コード例 #1
0
        public async Task UpdateVersionMenu(string link_id)
        {
            if (!UseAsVersionsMenu())
            {
                return;
            }

            versionsMainMenu.Activated += (s, e) => {
                FigmaFileVersion version = menuManager.GetFileVersion(versionsMainMenu);
                if (version != null)
                {
                    VersionSelected?.Invoke(this, version);
                }
            };

            var versions = await Task.Run(() =>
            {
                var query = new FigmaFileVersionQuery(link_id);

                FigmaSharp.AppContext.Current.SetAccessToken(TokenStore.SharedTokenStore.GetToken());

                return(FigmaSharp.AppContext.Api.GetFileVersions(query)
                       .versions.GroupByCreatedAt()
                       .ToArray());
            });

            menuManager.Clear();

            foreach (var version in versions)
            {
                menuManager.AddItem(version);
            }

            UseAsVersionsMenu();
        }
コード例 #2
0
        internal async void Load(FigmaBundle bundle, Projects.Project project)
        {
            this.mainBundle = bundle;
            this.project    = project;

            bundlePopUp.RemoveAllItems();
            bundlePopUp.AddItem(bundle.Manifest.DocumentTitle);

            //loads current versions
            versionPopUp.RemoveAllItems();
            versionPopUp.AddItem("Latest");

            ShowLoading(true);
            EnableViews(false);

            var versionTask = Task.Run(() => {
                try {
                    var query             = new FigmaFileVersionQuery(bundle.FileId);
                    var figmaFileVersions = FigmaSharp.AppContext.Api.GetFileVersions(query)
                                            .versions;
                    var result = figmaFileVersions
                                 .GroupByCreatedAt()
                                 .ToArray();
                    return(result);
                } catch (Exception ex) {
                    Console.WriteLine(ex);
                    return(null);
                }
            });

            var figmaDirectory        = Path.GetDirectoryName(bundle.DirectoryPath);
            var currentProjectBundles = GetFromFigmaDirectory(figmaDirectory);

            versions = await versionTask;

            bundlePopUp.RemoveAllItems();
            foreach (var figmaNode in currentProjectBundles)
            {
                bundlePopUp.AddItem(figmaNode.Manifest.DocumentTitle);
            }

            ShowLoading(false);
            EnableViews(true);

            if (versions != null && versions.Length > 0)
            {
                foreach (var version in versions)
                {
                    versionMenu.AddItem(version);
                }
            }

            versionMenu.Generate(versionPopUp.Menu);

            //select current version
            var menu = versionMenu.GetMenuItem(bundle.Version);

            versionPopUp.SelectItem(menu);
        }
コード例 #3
0
        private async void FigmaUrlTextField_Changed(object sender, EventArgs e)
        {
            ShowLoading(true);

            SelectedFileVersion = null;

            //loads current versions
            versionPopUp.RemoveAllItems();

            RefreshStates();

            if (WebApiHelper.TryParseFileUrl(FileId, out string fileId))
            {
                figmaUrlTextField.StringValue = fileId;
            }

            versions = await Task.Run(() => {
                try {
                    var query             = new FigmaFileVersionQuery(fileId);
                    var figmaFileVersions = FigmaSharp.AppContext.Api.GetFileVersions(query).versions;
                    var result            = figmaFileVersions
                                            .GroupByCreatedAt()
                                            .ToArray();
                    return(result);
                } catch (Exception ex) {
                    LoggingService.LogError("[FIGMA] Error", ex);
                    return(null);
                }
            });

            ShowLoading(false);

            versionMenu.Clear();

            if (versions != null)
            {
                foreach (var item in versions)
                {
                    versionMenu.AddItem(item);
                }

                versionMenu.Generate(versionPopUp.Menu);

                versionPopUp.SelectItem(versionMenu.CurrentMenu);
                SelectedFileVersion = versionMenu.CurrentVersion;
            }

            RefreshStates();
        }
コード例 #4
0
        public async Task UpdateVersionMenu(string link_id)
        {
            if (!UseAsVersionsMenu())
            {
                return;
            }

            versionsMainMenu.Activated += (s, e) => {
                FigmaFileVersion version = menuManager.GetFileVersion(versionsMainMenu);
                if (version != null)
                {
                    VersionSelected?.Invoke(this, version);
                }
            };

            var versions = await Task.Run(() =>
            {
                try
                {
                    var query = new FigmaFileVersionQuery(link_id);

                    return(FigmaSharp.AppContext.Api.GetFileVersions(query)
                           .versions.GroupByCreatedAt()
                           .ToArray());
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    return(new FigmaFileVersion[0]);
                }
            });

            menuManager.Clear();

            foreach (var version in versions)
            {
                menuManager.AddItem(version);
            }

            UseAsVersionsMenu();
        }
コード例 #5
0
        public override void BuildNode(ITreeBuilder builder, object dataObject, NodeInfo nodeInfo)
        {
            if (dataObject is Projects.ProjectFile file)
            {
                if (file.IsFigmaDesignerFile())
                {
                    nodeInfo.OverlayBottomLeft = HasError(file, file.DependsOnFile) ? figmaOverlayError : figmaOverlay;
                }
                else if (file.IsFigmaCSFile(out var designerFile))
                {
                    nodeInfo.OverlayBottomLeft = HasError(designerFile, file) ? figmaOverlayError : figmaOverlay;
                }
            }
            else if (dataObject is ProjectFolder pr)
            {
                if (pr.IsDocumentDirectoryBundle())
                {
                    FigmaBundle bundle = null;
                    try {
                        bundle = FigmaBundle.FromDirectoryPath(pr.Path.FullPath);
                    } catch (Exception ex) {
                        //if the bundle is removed by any reason whyle updating
                        LoggingService.LogError("CustomFigmaFundlerNodeBuilder", ex);
                    }

                    if (bundle != null && bundle.Manifest != null && !string.IsNullOrEmpty(bundle.Manifest.DocumentTitle))
                    {
                        nodeInfo.Label = bundle.Manifest.DocumentTitle;
                    }
                    else
                    {
                        nodeInfo.Label = pr.Path.FileNameWithoutExtension;
                    }

                    nodeInfo.ClosedIcon = nodeInfo.Icon = Context.GetIcon(Stock.Package);
                    Task.Run(() => {
                        var query             = new FigmaFileVersionQuery(bundle.FileId);
                        var figmaFileVersions = FigmaSharp.AppContext.Api.GetFileVersions(query).versions;
                        return(figmaFileVersions
                               .GroupByCreatedAt()
                               .OrderByDescending(s => s.created_at)
                               .FirstOrDefault());
                    }).ContinueWith(s => {
                        if (s.Result != null && s.Result.id != bundle.Version.id)
                        {
                            Runtime.RunInMainThread(() => {
                                nodeInfo.StatusIcon = Context.GetIcon(packageUpdateIcon);

                                if (s.Result.IsNamed)
                                {
                                    nodeInfo.StatusMessage = $"Update available: {s.Result.label}";
                                }
                                else
                                {
                                    nodeInfo.StatusMessage = $"Update available: {s.Result.created_at.ToString("g")}";
                                }
                            });
                        }
                    });
                    return;
                }

                if (pr.IsFigmaDirectory())
                {
                    nodeInfo.Label      = FigmaFolderLabel;
                    nodeInfo.ClosedIcon = nodeInfo.Icon = Context.GetIcon(Resources.Icons.FigmaPad);
                    return;
                }
            }
        }