private async Task <IList <jsTreeNode> > GetProjectContents(string href) { IList <jsTreeNode> nodes = new List <jsTreeNode>(); // the API SDK ProjectsApi projectApi = new ProjectsApi(); projectApi.Configuration.AccessToken = Credentials.TokenInternal; // extract the hubId & projectId from the href string[] idParams = href.Split('/'); string hubId = idParams[idParams.Length - 3]; string projectId = idParams[idParams.Length - 1]; /*var project = await projectApi.GetProjectAsync(hubId, projectId); * var rootFolderHref = project.data.relationships.rootFolder.meta.link.href; * return await GetFolderContents(rootFolderHref);*/ var folders = await projectApi.GetProjectTopFoldersAsync(hubId, projectId); foreach (KeyValuePair <string, dynamic> folder in new DynamicDictionaryItems(folders.data)) { nodes.Add(new jsTreeNode(folder.Value.links.self.href, folder.Value.attributes.displayName, "folders", true)); } return(nodes); }
private async void listTopFolders(MyTreeNode projectNode) { var projectsApi = new ProjectsApi(); projectsApi.Configuration.AccessToken = logInInfo.accessToken; string[] idParams = projectNode.id.Split('/'); string hubId = idParams[idParams.Length - 3]; string projectId = idParams[idParams.Length - 1]; setNodeState(projectNode, true); var folders = await projectsApi.GetProjectTopFoldersAsync(hubId, projectId); foreach (KeyValuePair <string, dynamic> folderInfo in new DynamicDictionaryItems(folders.data)) { MyTreeNode folderNode = new MyTreeNode( folderInfo.Value.links.self.href, folderInfo.Value.attributes.displayName, folderInfo.Value.attributes.extension.type, "", NodeType.Folder ); addToTreeView(projectNode, folderNode); } setNodeState(projectNode, false); }
public async Task <IList <Item> > GetTopFoldersAsync(string hubId, string projectId) { string sessionId, localId; if (!HeaderUtils.GetSessionLocalIDs(out sessionId, out localId)) { return(null); } if (!await OAuthDB.IsSessionIdValid(sessionId, localId)) { return(null); } string userAccessToken = await OAuthDB.GetAccessToken(sessionId, localId); IList <Item> nodes = new List <Item>(); ProjectsApi projectsApi = new ProjectsApi(); projectsApi.Configuration.AccessToken = userAccessToken; var folders = await projectsApi.GetProjectTopFoldersAsync(hubId, projectId); foreach (KeyValuePair <string, dynamic> folderInfo in new DynamicDictionaryItems(folders.data)) { Item projectNode = new Item(folderInfo.Value.links.self.href, folderInfo.Value.attributes.displayName, "folders"); nodes.Add(projectNode); } return(nodes); }
private async Task IndexProjectsAsync(Credentials credentials, string hubId, PerformContext context) { // the API SDK ProjectsApi projectsApi = new ProjectsApi(); projectsApi.Configuration.AccessToken = credentials.TokenInternal; var projects = await projectsApi.GetHubProjectsAsync(hubId); foreach (KeyValuePair <string, dynamic> projectInfo in new DynamicDictionaryItems(projects.data)) { var folders = await projectsApi.GetProjectTopFoldersAsync(hubId, projectInfo.Value.id); foreach (KeyValuePair <string, dynamic> folder in new DynamicDictionaryItems(folders.data)) { // Project File folder show Files, Plans folder show items:autodesk.bim360:Document // for this sample let's focus on Project Files only try { if (!folder.Value.attributes.extension.data.visibleTypes.ToString().Contains("items:autodesk.bim360:File")) { continue; } } catch { continue; } // if we cannot get visibleTypes, maybe it's Recycle, so let's skip... await GetFolderContentsAsync(credentials.UserId, hubId, folder.Value.links.self.href, 0, context); // string[] hrefParams = folder.Value.links.self.href.Split('/'); string folderUrn = hrefParams[hrefParams.Length - 1]; // start listening for this folder (Project Files) DMWebhook webhooksApi = new DMWebhook(credentials.TokenInternal, Config.WebhookUrl); await webhooksApi.DeleteHook(Event.VersionAdded, folderUrn); // remove old (needed when doing local test with ngrok or to create a new one) await webhooksApi.CreateHook(Event.VersionAdded, projectInfo.Value.id, folderUrn); } } }