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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
                }
            }
        }