예제 #1
0
 public void OnUnload()
 {
     if (_settingsWindow != null)
     {
         if (_settingsWindow.IsVisible)
         {
             _settingsWindow.Close();
         }
         _settingsWindow = null;
     }
     _config.Save();
     _view.OnUnload();
 }
예제 #2
0
        public async Task <List <Deck> > RetrieveMetaDecks(PluginConfig config)
        {
            // First check if we need to download the meta file.
            string newMetaVersion = "";

            if (!File.Exists(MetaFilePath))
            {
                Log.Info("No meta file found.");
                using (WebClient client = new WebClient())
                {
                    newMetaVersion = await client.DownloadStringTaskAsync(MetaVersionUrl);
                }
            }
            else
            {
                double daysSinceLastDownload = (DateTime.Now - config.CurrentMetaFileDownloadTime).TotalDays;
                if (daysSinceLastDownload > RecentDownloadTimeoutDays)
                {
                    Log.Info(daysSinceLastDownload +
                             " days since meta file has been updated, checking for new version.");
                    using (WebClient client = new WebClient())
                    {
                        newMetaVersion = await client.DownloadStringTaskAsync(MetaVersionUrl);
                    }
                    if (newMetaVersion.Trim() != "" && newMetaVersion != config.CurrentMetaFileVersion)
                    {
                        Log.Info("New version detected: " + newMetaVersion +
                                 ", old version: " + config.CurrentMetaFileVersion);
                    }
                    else
                    {
                        Log.Debug("Newest version of meta file matches cached version: " + newMetaVersion);
                        newMetaVersion = "";
                    }
                }
                else
                {
                    Log.Debug("Cached meta file is only " + daysSinceLastDownload + " days old.");
                }
            }

            if (newMetaVersion != "")
            {
                Log.Info("Downloading new meta file.");
                using (WebClient client = new WebClient())
                {
                    await client.DownloadFileTaskAsync(MetaFileUrl, MetaArchivePath);
                }

                Log.Info("Meta file downloaded, unzipping...");
                FileInfo archiveFile = new FileInfo(MetaArchivePath);

                using (FileStream archiveFileStream = archiveFile.OpenRead())
                {
                    using (FileStream unzippedFileStream = File.Create(MetaFilePath))
                    {
                        using (GZipStream unzipStream =
                                   new GZipStream(archiveFileStream, CompressionMode.Decompress))
                        {
                            unzipStream.CopyTo(unzippedFileStream);
                        }
                    }
                }

                config.CurrentMetaFileVersion      = newMetaVersion;
                config.CurrentMetaFileDownloadTime = DateTime.Now;
                config.Save();
            }

            Log.Debug("Loading meta file");
            List <Deck> metaDecks = XmlManager <List <Deck> > .Load(MetaFilePath);

            Log.Info("Meta retrieved, " + metaDecks.Count + " decks loaded.");
            return(metaDecks);
        }