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;
            }
        }
Beispiel #2
0
        /// <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
            });
        }
Beispiel #3
0
        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}");
            }
        }
Beispiel #4
0
        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();
            }
        }
Beispiel #5
0
        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");
                } //
            }
        }
Beispiel #6
0
        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");
                } //
            }
        }
Beispiel #7
0
        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");
                } //
            }
        }