private void bw_DoWork(object sender, DoWorkEventArgs e) { try { if (Thread.CurrentThread.Name == null) { Thread.CurrentThread.Name = "StatParserUI"; } logger.Info("Updating player stats"); BackgroundWorker worker = sender as BackgroundWorker; // Update all stats playerItemDao.ClearAllItemStats(); IList <PlayerItem> items = playerItemDao.ListAll(); worker.ReportProgress(Math.Max(100, items.Count), 1); int total = 0; playerItemDao.UpdateAllItemStats(items, (p) => { worker.ReportProgress(total++, 0); }); logger.Info("Updated item stats"); } catch (Exception ex) { logger.Fatal(ex.Message); logger.Fatal(ex.StackTrace); //ExceptionReporter.ReportException(ex); throw; } }
/// <summary> /// Serializes each player item /// </summary> /// <returns></returns> private SerializedPlayerItems GetItems() { var items = _playerItemDao.ListAll().Select(Convert).ToList(); var serializedItems = JsonConvert.SerializeObject(items); return(new SerializedPlayerItems { Verification = BuddyVerificationId, Items = serializedItems }); }
private void Download() { var result = Post($"token={_token}&lastUpdate={Properties.Settings.Default.LastOnlineBackup}", DownloadUrl); if (string.IsNullOrEmpty(result)) { Logger.Warn("Error downloading items from remote backup server"); _nextDownload = DateTime.UtcNow.AddMinutes(30); return; } var obj = JsonConvert.DeserializeObject <PlayerItemBackupDownload>(result); if (obj.Success) { var existingItems = _playerItemDao.ListAll() .Where(m => m.OnlineId.HasValue) .Select(m => m.OnlineId.Value) .ToList(); var newItems = obj.Items.Where(onlineItem => !existingItems.Contains(onlineItem.OnlineId)).ToList(); foreach (var simplified in newItems) { var item = Map(simplified); // TODO: Get timestamp from server [on upload] _playerItemDao.Save(item); } foreach (var deleted in obj.Deleted) { var item = _playerItemDao.GetByOnlineId(deleted); if (item != null) { _playerItemDao.Remove(item); } } Logger.Info($"Added {obj.Items.Count} items after online sync"); Logger.Info($"Removed {obj.Deleted.Count} items after online sync"); // TODO: This is very low for every-day usage, and very high for frequent pc switch usage _nextDownload = DateTime.UtcNow.AddHours(1); if (obj.Items.Count > 0) { Properties.Settings.Default.LastOnlineBackup = obj.Items.Max(m => m.ModifiedDate); Properties.Settings.Default.Save(); } } else { HandleAuthenticationIssues(obj.ErrorCode); Logger.Warn($"Could not synchronize items from online backup. Error code {obj.ErrorCode}"); } }
private void buttonExport_Click(object sender, EventArgs e) { if (buttonExport.Enabled) { if (IsGdstashFormat) { var io = new GDFileExporter(filename, false, string.Empty); // Params are not used for writing GDTransferFile settings = cbItemSelection.SelectedItem as GDTransferFile; if (settings == null) { var items = playerItemDao.ListAll(); io.Write(items); } else { var items = playerItemDao.ListAll() .Where(item => item.IsHardcore == settings.IsHardcore /* && item.IsExpansion1 == settings.IsExpansion1*/); if (string.IsNullOrEmpty(settings.Mod)) { io.Write(items.Where(item => string.IsNullOrEmpty(item.Mod)).ToList()); } else { io.Write(items.Where(item => item.Mod == settings.Mod).ToList()); } } } else { var io = new IAFileExporter(filename); var items = playerItemDao.ListAll(); io.Write(items); } MessageBox.Show("Items Exported!", "Items exported!", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } }
private void Backup(string destination, bool forced) { if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } #if DEBUG var suffix = "_DEBUG"; #else var suffix = string.Empty; #endif string target = Path.Combine(destination, string.Format("{0}{1}.zip", DateTime.Now.DayOfWeek, suffix)); // If the file already exists and is newer than 3 days ('not written today'), just skip it. if (File.Exists(target) && !forced) { DateTime lastModified = File.GetLastWriteTime(target); if ((DateTime.Now - lastModified).TotalDays < 3) { return; } } using (var file = new TempFile()) { using (ZipFile zip = new ZipFile { UseZip64WhenSaving = Zip64Option.AsNecessary }) { Logger.Info("Backing up characters.."); string gameSaves = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "My Games", "Grim Dawn", "Save"); if (Directory.Exists(gameSaves)) { zip.AddDirectory(gameSaves, "Save"); } Logger.Info("Backing up items.."); var exporter = new IAFileExporter(file.filename); exporter.Write(_playerItemDao.ListAll()); zip.AddFile(file.filename).FileName = "export.ias"; /* * try { * // TODO: This is now redundant, but leaving it in here "for safety" until the IAS format has proven itself. * zip.AddDirectory(GlobalPaths.UserdataFolder, "IAGD"); * } * catch (Exception ex) { * Logger.Warn(ex.Message); * Logger.Warn(ex.StackTrace); * ExceptionReporter.ReportException(ex); * }*/ string helpfile = Path.Combine("Resources", "YES THIS FILE IS SUPPOSED TO BE SMALL.txt"); if (File.Exists(helpfile)) { zip.AddFile(helpfile, ""); } zip.Comment = string.Format("This backup was created at {0}.", System.DateTime.Now.ToString("G")); try { zip.Save(target); } catch (UnauthorizedAccessException) { Logger.WarnFormat("Access denied writing backup to \"{0}\"", target); throw; } Logger.Info("Created a new backup of the database"); } // } }
private void Backup(string destination, bool forced) { if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } #if DEBUG var suffix = "_DEBUG"; #else var suffix = string.Empty; #endif string target = Path.Combine(destination, $"{DateTime.Now.DayOfWeek}{suffix}.zip"); // If the file already exists and is newer than 3 days ('not written today'), just skip it. if (File.Exists(target) && !forced) { DateTime lastModified = File.GetLastWriteTime(target); if ((DateTime.Now - lastModified).TotalDays < 3) { return; } } var items = _playerItemDao.ListAll(); if (items.Count == 0) { Logger.Warn("No items found, skipping backup to avoid overwriting existing good backups."); return; } using (var file = new TempFile()) { using (ZipFile zip = new ZipFile { UseZip64WhenSaving = Zip64Option.AsNecessary }) { Logger.Info("Backing up characters.."); string[] files = Directory.GetFiles(GlobalPaths.SavePath, "*.*", SearchOption.AllDirectories); foreach (var f in files) { if (!IsAcceptedFileFormat(f)) { Logger.Debug($"Ignoring file {f}, invalid file format."); continue; } // Max 1MB if (new FileInfo(f).Length > 1024 * 1024) { Logger.Debug($"Ignoring file {f}, size exceeds 1MB"); continue; } var relativePath = f.Replace(GlobalPaths.SavePath, "").Replace(Path.GetFileName(f), ""); zip.AddFile(f, relativePath); } Logger.Info("Backing up items.."); var exporter = new IAFileExporter(file.filename); exporter.Write(items); zip.AddFile(file.filename).FileName = "export.ias"; string helpfile = Path.Combine("Resources", "YES THIS FILE IS SUPPOSED TO BE SMALL.txt"); if (File.Exists(helpfile)) { zip.AddFile(helpfile, ""); } zip.Comment = string.Format("This backup was created at {0}.", System.DateTime.Now.ToString("G")); try { zip.Save(target); } catch (UnauthorizedAccessException) { Logger.WarnFormat("Access denied writing backup to \"{0}\"", target); throw; } Logger.Info("Created a new backup of the database"); } // } }
private void Backup(string destination, bool forced) { if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } #if DEBUG var suffix = "_DEBUG"; #else var suffix = string.Empty; #endif string target = Path.Combine(destination, $"{DateTime.Now.DayOfWeek}{suffix}.zip"); // If the file already exists and is newer than 3 days ('not written today'), just skip it. if (File.Exists(target) && !forced) { DateTime lastModified = File.GetLastWriteTime(target); if ((DateTime.Now - lastModified).TotalDays < 3) { return; } } using (var file = new TempFile()) { using (ZipFile zip = new ZipFile { UseZip64WhenSaving = Zip64Option.AsNecessary }) { Logger.Info("Backing up characters.."); string gameSaves = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "My Games", "Grim Dawn", "Save"); string[] files = Directory.GetFiles(gameSaves, "*.*", SearchOption.AllDirectories); foreach (var f in files) { if (f.EndsWith(".zip") || f.EndsWith(".ias") || f.EndsWith(".gds") || f.EndsWith(".rar")) { continue; } // Max 10MB if (new FileInfo(f).Length > 1024 * 1024 * 10) { continue; } zip.AddFile(f); } Logger.Info("Backing up items.."); var exporter = new IAFileExporter(file.filename); exporter.Write(_playerItemDao.ListAll()); zip.AddFile(file.filename).FileName = "export.ias"; string helpfile = Path.Combine("Resources", "YES THIS FILE IS SUPPOSED TO BE SMALL.txt"); if (File.Exists(helpfile)) { zip.AddFile(helpfile, ""); } zip.Comment = string.Format("This backup was created at {0}.", System.DateTime.Now.ToString("G")); try { zip.Save(target); } catch (UnauthorizedAccessException) { Logger.WarnFormat("Access denied writing backup to \"{0}\"", target); throw; } Logger.Info("Created a new backup of the database"); } // } }