private void UpdateFolderFromDisk(MyPluginControl plugin)
        {
            if (string.IsNullOrEmpty(plugin.contextFolderNode.FolderPath))
            {
                var result = MessageBox.Show(plugin,
                                             @"This folder node is not synced with a local folder. Would you like to choose one?", @"Question",
                                             MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    var fbd = new CustomFolderBrowserDialog(tv.OrganizationMajorVersion, true, false)
                    {
                        Text = @"Local folder"
                    };
                    if (fbd.ShowDialog(plugin) == DialogResult.OK)
                    {
                        plugin.contextFolderNode.FolderPath = fbd.FolderPath;
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    return;
                }
            }

            var invalidFileNames = new List <string>();

            plugin.tv.RefreshFolderNodeContent(plugin.contextFolderNode, invalidFileNames, null);
            plugin.ShowInvalidFiles(invalidFileNames);
        }
        private static void RefreshFileFromDisk(MyPluginControl plugin)
        {
            if (string.IsNullOrEmpty(plugin.contextStripResource.FilePath))
            {
                var result = MessageBox.Show(plugin, @"This webresource is not synced with a local file. Do you want to sync it with a local file?", @"Question",
                                             MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    var ofd = new OpenFileDialog();
                    if (ofd.ShowDialog(plugin) == DialogResult.OK)
                    {
                        plugin.contextStripResource.FilePath = ofd.FileName;
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    return;
                }
            }

            plugin.contextStripResource.RefreshFromDisk();
        }
        private static void SetDependencyXml(MyPluginControl plugin)
        {
            var dialog = new DependencyDialog(plugin.contextStripResource, plugin);

            if (dialog.ShowDialog(plugin) == DialogResult.OK)
            {
                plugin.contextStripResource.DependencyXml = dialog.UpdatedDependencyXml;
            }
        }
        private static void AddNewFolder(MyPluginControl plugin)
        {
            var newFolderDialog = new NewFolderDialog(plugin.ConnectionDetail?.OrganizationMajorVersion ?? -1);

            if (newFolderDialog.ShowDialog(plugin) == DialogResult.OK)
            {
                plugin.tv.AddSingleFolder(plugin.contextFolderNode, newFolderDialog.FolderName);
            }
        }
        private static void ShowProperties(MyPluginControl plugin)
        {
            if (plugin.rpd.IsDisposed)
            {
                plugin.rpd = new ResourcePropertiesDialog();
            }

            plugin.rpd.Resource = plugin.contextStripResource;
            plugin.rpd.ShowDocked();
        }
        private static void OpenInBrowser(MyPluginControl plugin)
        {
            if (plugin.contextStripResource.Id == Guid.Empty)
            {
                MessageBox.Show(plugin, @"This web resource does not exist on the CRM organization or is not synced", @"Warning",
                                MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            Process.Start($"{plugin.ConnectionDetail.WebApplicationUrl}/main.aspx?id={plugin.contextStripResource.Id}&etc=9333&pagetype=webresourceedit");
        }
        private static void AddExistingFile(MyPluginControl plugin)
        {
            var ofd = new OpenFileDialog {
                Multiselect = true, Title = @"Select file(s) to add as webresource(s)"
            };

            if (ofd.ShowDialog(plugin.ParentForm) == DialogResult.OK)
            {
                var invalidFileNames = new List <string>();
                plugin.tv.AddFilesAsNodes(plugin.contextFolderNode, ofd.FileNames.ToList(), invalidFileNames);
                plugin.ShowInvalidFiles(invalidFileNames);
            }
        }
        private static void RenameWebResource(MyPluginControl plugin)
        {
            var renameDialog = new RenameWebResourceDialog(plugin.contextStripResource.Name, plugin.ConnectionDetail?.OrganizationMajorVersion ?? -1);

            if (renameDialog.ShowDialog(plugin) == DialogResult.OK)
            {
                if (plugin.contextStripResource.Name != renameDialog.WebResourceName)
                {
                    if (plugin.contextStripResource.Id == Guid.Empty)
                    {
                        plugin.contextStripResource.Name = renameDialog.WebResourceName;
                        plugin.contextStripResource.Rename(plugin.contextStripResource.Node, renameDialog.WebResourceName);
                    }
                    else
                    {
                        plugin.ExecuteMethod(plugin.RenameWebresource, renameDialog.WebResourceName);
                    }
                }
            }
        }