示例#1
0
        public Task <ImageSource> DownloadImageFor(IGameDetails game, CancellationToken cancellationToken = default)
        {
            ImageSource imageSource = new BitmapImage();

            imageSource.Freeze();

            if (game is null)
            {
                return(Task.FromResult(imageSource));
            }

            var uri       = $"https://staticdelivery.nexusmods.com/Images/games/4_3/tile_{game.Id}.jpg";
            var imageFile = GetImageFileFor(game);

            return(_downloadClient.GetStreamAsync(uri).ContinueWith(task =>
            {
                if (File.Exists(imageFile))
                {
                    File.Delete(imageFile);
                }

                Image.FromStream(task.Result).GetThumbnailImage(180, 255, null, IntPtr.Zero).Save(imageFile, ImageFormat.Jpeg);
                return GetImageFor(game);
            }, cancellationToken));
        }
示例#2
0
        public ImageSource GetImageFor(IGameDetails game)
        {
            var imageFile = GetImageFileFor(game);

            if (!File.Exists(imageFile))
            {
                ExtractImage(game);
            }
            return(GetImageFrom(imageFile, 255, 180));
        }
示例#3
0
        public IGameDetails Delete(IGameDetails entity)
        {
            if (entity is null)
            {
                return(null);
            }

            _appDatabaseProvider.TransactionalSqlCommand((db, transaction) =>
            {
                db.Execute(SqliteScripts.Table.Game.Delete, new { entity.Id }, transaction);
            });
            return(entity);
        }
示例#4
0
        private void ExtractImage(IGameDetails game)
        {
            // using the Embedded resource file "images.zip"
            var resourceName = Assembly.GetExecutingAssembly()
                               .GetManifestResourceNames()
                               .First(r => r.EndsWith("images.zip"));

            using var stream  = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
            using var archive = new ZipArchive(stream ?? throw new InvalidOperationException("Couldn't find the embedded resource file images.zip"));

            var imageFile = GetImageFileFor(game);
            var entry     = archive.Entries.FirstOrDefault(e => e.Name == Path.GetFileName(imageFile));

            entry?.ExtractToFile(imageFile, true);
        }
示例#5
0
        public IGameDetails Insert(IGameDetails entity)
        {
            if (entity is null)
            {
                return(null);
            }

            _appDatabaseProvider.TransactionalSqlCommand((db, transaction) =>
            {
                db.Execute(SqliteScripts.Table.Game.Insert, entity, transaction);
                foreach (var category in entity.Categories)
                {
                    db.Execute(SqliteScripts.Table.GameCategory.Insert,
                               new { category.Id, category.Name, category.ParentCategoryId, GameId = entity.Id }, transaction);
                }
            });
            return(entity);
        }
示例#6
0
        public IGameDetails Update(IGameDetails entity)
        {
            if (entity is null)
            {
                return(null);
            }

            _appDatabaseProvider.TransactionalSqlCommand((db, transaction) =>
            {
                db.Execute(SqliteScripts.Table.Game.Update, entity, transaction);

                // Delete all categories
                db.Execute("DELETE FROM GameCategory WHERE GameId = @GameId", new { GameId = entity.Id }, transaction);

                foreach (var category in entity.Categories)
                {
                    db.Execute(SqliteScripts.Table.GameCategory.Insert,
                               new { category.Id, category.Name, category.ParentCategoryId, GameId = entity.Id }, transaction);
                }
            });
            return(entity);
        }
示例#7
0
 /* Helpers */
 private string GetImageFileFor(IGameDetails game)
 {
     return(Path.Combine(_gameImagesDir, $"tile_{game.Id}.jpg"));
 }