Esempio n. 1
0
        private bool IsDowloadedModMoreRecent(string oldModPath, string unzippedModPath)
        {
            var oldDotVersionPath = Directory.GetFiles(oldModPath, "*.version", SearchOption.AllDirectories).FirstOrDefault();
            var newDotVersionPath = Directory.GetFiles(unzippedModPath, "*.version", SearchOption.AllDirectories).FirstOrDefault();

            if (string.IsNullOrEmpty(oldDotVersionPath) || string.IsNullOrEmpty(newDotVersionPath))
            {
                return(true);
            }

            //else
            DotVersion oldModVersion      = new DotVersion(oldDotVersionPath);
            DotVersion unzippedModVersion = new DotVersion(newDotVersionPath);

            return(unzippedModVersion > oldModVersion);
        }
        public static void LaunchUpdate(object paramObj)
        {
            Task.Run(async() =>
            {
                var param = (UpdateOrchestraMasterParams)paramObj;

                var modPathList = GetModPathList(param.GameDataPath);
                //var modPathList = new List<string>();
                //modPathList.Add("C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program\\GameData\\AirplanePlus");     // Forum KSP URL
                //modPathList.Add("C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program\\GameData\\B9PartSwitch");     // Github URL
                //modPathList.Add("C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program\\GameData\\EasyVesselSwitch"); // Curseforge URL
                //modPathList.Add("C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program\\GameData\\FuelTanksPlus");    // Spacedock URL

                //Todo : Parallel.ForEach()
                foreach (var modpath in modPathList)
                {
                    var toLog = new List <UpdateDetails>();
                    try
                    {
                        var modName        = new DirectoryInfo(modpath).Name;
                        var dotVersionFile = new DotVersion(modpath);

                        if (string.IsNullOrEmpty(dotVersionFile.DownloadLink))
                        {
                            toLog.Add(new UpdateDetails()
                            {
                                ModName = modName,
                                Status  = UpdateStatus.FailedToUpdate,
                                Tooltip = "! No Download link inside " + modName + " mod"
                            });
                            continue;
                        }

                        IDownloadLink hostLink = DownloadLinkHelper.GetHostType(dotVersionFile.DownloadLink,
                                                                                dotVersionFile.ModName, param.Webview);
                        var zipExtractor = new ZipExtractor(hostLink.ZipLink);
                        zipExtractor.DownloadAndExtract();

                        var updateMod = new PushUpdatedMod(zipExtractor.UnzippedDirectory, param.GameDataPath, modName);

                        toLog.AddRange(await updateMod.AutomaticPush());
                    }
                    catch (Exception e)
                    {
                        toLog.Add(new UpdateDetails()
                        {
                            ModName = new DirectoryInfo(modpath).Name,
                            Status  = UpdateStatus.FailedToUpdate,
                            Tooltip = "! " + e.Message,
                        });
                    }
                    finally
                    {
                        Application.Current.Dispatcher.Invoke(() =>
                        {
                            foreach (UpdateDetails log in toLog)
                            {
                                if (param.Logs.ContainsKey(log.ModName))
                                {
                                    // ModAdded < SuccessfullyUpdated < AlreadyUpdated < FailedToUpdate
                                    // So if my log is inferior has the saved one, it should be updated. Else, it shouldn't
                                    if (log.Status < param.Logs[log.ModName].Status)
                                    {
                                        param.Logs[log.ModName] = log;
                                    }
                                }
                                else
                                {
                                    param.Logs.Add(log.ModName, log);
                                }

                                Trace.WriteLine(log.Tooltip);
                            }
                        });
                    }
                }
            }).Wait();
        }