예제 #1
0
        /// <summary>
        ///     Install a jarfile
        /// </summary>
        /// <param name="version">Version to install</param>
        /// <param name="targetlocation">Target location, plugins/name by default</param>
        /// <param name="showUi">Allow pop-up dialogs</param>
        /// <remarks></remarks>
        private static Boolean InstallJar(BukgetPluginVersion version, string targetlocation = "", bool showUi = true)
        {
            if (showUi)
            {
                if (
                    MetroMessageBox.Show(Application.OpenForms[0],
                                         Locale.Tr("You are about to install") + " " + version.Filename.Replace(".jar", "") + " (" +
                                         version.VersionNumber + ")" + Constants.vbCrLf + Locale.Tr("Do you wish to continue?"),
                                         Locale.Tr("Continue?"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                {
                    return(false);
                }
            }

            Logger.Log(LogLevel.Info, "BukGetAPI", "Installing plugin:" + version.Filename + ", packed as jar file");

            // It's nicer to have a plugin name instead of a file name with a random version. versions are retrieved from yml files, so we're using pretty names
            if (string.IsNullOrEmpty(targetlocation))
            {
                targetlocation = Fl.Location(RequestFile.Plugindir) + "/" + version.PluginName.ToLower();
            }

            FileDownloader fdd = new FileDownloader();

            fdd.AddFile(version.DownloadLink, targetlocation);
            fdd.ShowDialog();

            InstalledPluginManager.ReloadInstalledPluginFile(targetlocation);

            if (showUi)
            {
                ShowInstallationComplete(version.Filename.Replace(".jar", ""), version.VersionNumber);
            }
            return(true);
        }
예제 #2
0
        /// <summary>
        ///     Initialize all functions and the tabcontrol
        /// </summary>
        public void Initialize()
        {
            TabPage = new PluginsTab {
                Text = Name, ParentAddon = this
            };
            ConfigPage = null;

            // TODO: This code locks up the UI for a while
            InstalledPluginManager.Initialize();
        }
예제 #3
0
        /// <summary>
        ///     Install plguins from a zip file
        /// </summary>
        /// <param name="version">Version to install</param>
        /// <param name="updatelist">Update the list of installed plugins</param>
        /// <param name="showUi">Allow pop-up dialogs</param>
        /// <remarks></remarks>
        private static Boolean InstallZip(BukgetPluginVersion version,
                                          bool updatelist = true,
                                          bool showUi     = true)
        {
            if (showUi)
            {
                if (
                    MetroMessageBox.Show(Application.OpenForms[0],
                                         Locale.Tr("You are about to install") + " " + version.Filename.Replace(".zip", "") + " (" +
                                         version.VersionNumber + ")" + Constants.vbCrLf + Locale.Tr("Do you wish to continue?"),
                                         Locale.Tr("Continue?"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                {
                    return(false);
                }
            }

            Logger.Log(LogLevel.Info, "BukGetAPI", "Installing plugin:" + version.Filename + ", packed as zip file");

            string randomName = DateTime.Now.Ticks.ToString();

            string zipfile    = Fl.SafeLocation(RequestFile.Temp) + "install.zip";
            string extraction = Fl.SafeLocation(RequestFile.Temp) + "/install_" + randomName + "/";

            FileDownloader fdd = new FileDownloader();

            fdd.AddFile(version.DownloadLink, zipfile);
            fdd.ShowDialog();

            Compression.Decompress(extraction, zipfile);

            // ******************************
            // At this point, the zip file is extracted to a temporary location
            // Now only the needed files should be moved


            Boolean hasFileBeenMoved = false;

            Boolean hasFolderBeenMoved = false;

            //file is decompressed, now search the needed files
            DirectoryInfo extracteDirectoryInfo = new DirectoryInfo(extraction);

            List <string> extractedFileNamesList = new List <string>();

            foreach (FileInfo fileInfo in extracteDirectoryInfo.GetFiles())
            {
                if (fileInfo.Extension == ".jar")
                {
                    File.Copy(fileInfo.FullName,
                              Fl.Location(RequestFile.Plugindir) + "/" + fileInfo.Name, true);
                    extractedFileNamesList.Add(fileInfo.Name);
                    hasFileBeenMoved = true;
                    Logger.Log(LogLevel.Info, "BukGetAPI", "Jar file found in .zip (L1), copied:" + fileInfo.Name);
                }
            }

            // now we check if there's a folder with the same name as the plugin. This folder should also be moved to the /plugins folder
            foreach (DirectoryInfo directoryInZipInfo in extracteDirectoryInfo.GetDirectories())
            {
                Boolean folderShouldBeMoved = false;

                foreach (string f in extractedFileNamesList)
                {
                    if (f.Contains(directoryInZipInfo.Name))
                    {
                        folderShouldBeMoved = true;
                        Logger.Log(LogLevel.Info, "BukgetAPI",
                                   "Config/Info folder found in .zip, marked directory for copy:" + directoryInZipInfo.Name);
                    }
                }
                if (!folderShouldBeMoved)
                {
                    foreach (FileInfo fileInfo in directoryInZipInfo.GetFiles())
                    {
                        if (fileInfo.Extension == ".txt" | fileInfo.Extension == ".yml" | fileInfo.Extension == ".cfg" |
                            fileInfo.Extension == ".csv" | fileInfo.Extension == ".js")
                        {
                            folderShouldBeMoved = true;
                            Logger.Log(LogLevel.Info, "BukgetAPI",
                                       "Config/Info file found in .zip, marked directory for copy:" + fileInfo.Name);
                        }
                    }
                }
                if (folderShouldBeMoved)
                {
                    Directory.Move(directoryInZipInfo.FullName,
                                   Fl.Location(RequestFile.Plugindir) + "/" + directoryInZipInfo.Name);
                    hasFileBeenMoved   = false;
                    hasFolderBeenMoved = true;
                }

                // If we didn't copy a file yet, check other folders for jar files
                //L2
                if (!hasFileBeenMoved)
                {
                    foreach (FileInfo fileInfo in directoryInZipInfo.GetFiles())
                    {
                        if (fileInfo.Extension != ".jar")
                        {
                            continue;
                        }
                        fileInfo.MoveTo(Fl.Location(RequestFile.Plugindir) + "/" + fileInfo.Name);
                        hasFileBeenMoved = true;
                        Logger.Log(LogLevel.Info, "BukgetAPI", "Jar file found in .zip (L2), copied:" + fileInfo.Name);
                    }
                }

                if (hasFolderBeenMoved)
                {
                    continue;
                }
                // If we didn't find a config folder yet, check deeper. config folders are not required
                foreach (DirectoryInfo dir2 in directoryInZipInfo.GetDirectories())
                {
                    bool copy2 = false;
                    foreach (string f in extractedFileNamesList)
                    {
                        if (!f.Contains(dir2.Name))
                        {
                            continue;
                        }
                        copy2 = true;
                        Logger.Log(LogLevel.Info, "BukgetAPI",
                                   "Config/Info folder found in .zip, marked directory for copy:" + dir2.Name);
                    }
                    foreach (FileInfo fileInfo in dir2.GetFiles())
                    {
                        if (fileInfo.Extension == ".txt" | fileInfo.Extension == ".yml" | fileInfo.Extension == ".cfg" |
                            fileInfo.Extension == ".csv" | fileInfo.Extension == ".js")
                        {
                            copy2 = true;
                            Logger.Log(LogLevel.Info, "BukgetAPI",
                                       "Config/Info file found in .zip, marked directory for copy:" + fileInfo.Name);
                        }
                    }
                    if (copy2)
                    {
                        FsUtil.CopyFolder(directoryInZipInfo.FullName,
                                          Fl.Location(RequestFile.Plugindir) + "/" + dir2.Name, true);
                    }
                }

                // end of second level searching
            }


            Logger.Log(LogLevel.Info, "BukgetAPI",
                       "Finished plugin installation: Success?" + (hasFileBeenMoved || hasFolderBeenMoved));

            //refresh installed list
            if (updatelist)
            {
                InstalledPluginManager.RefreshAllInstalledPluginsAsync();
            }
            //refresh installed list

            ShowInstallationComplete();

            return(hasFileBeenMoved || hasFolderBeenMoved);
        }