Beispiel #1
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}");
            }
        }
        public void TestRemoveHalfStack()
        {
            const long oid = 456499611;
            long       id;
            {
                var item = new PlayerItem {
                    BaseRecord       = "for-testing-item-halfstack-removal",
                    Mod              = string.Empty,
                    MinimumLevel     = 200,
                    LevelRequirement = 200,
                    StackCount       = 30,
                    OnlineId         = oid
                };
                dao.Save(item);


                item.Id.Should().Be.GreaterThan(0);
                id = item.Id;
            }


            // Reduce to 15
            {
                var reloaded = dao.GetByOnlineId(oid);
                reloaded.Id.Should().Be.EqualTo(id);
                reloaded.StackCount = 15;
                dao.Update(new List <PlayerItem> {
                    reloaded
                }, true);
            }


            // Ensure the online ID has been cleared
            {
                var reloaded = dao.GetByOnlineId(oid);
                reloaded.Should().Be.Null();
            }

            // Ensure the item still exists
            {
                var reloaded = dao.GetById(id);
                reloaded.Should().Not.Be.Null();
                reloaded.Count.Should().Be.EqualTo(15);
            }

            // Ensure the old OID is marked for removal
            var deletionEntry = dao.GetItemsMarkedForOnlineDeletion().FirstOrDefault(m => m.OID == oid);

            deletionEntry.Should().Not.Be.Null();
        }
Beispiel #3
0
 public PlayerItem GetByOnlineId(long OID)
 {
     return(ThreadExecuter.Execute(
                () => repo.GetByOnlineId(OID)
                ));
 }