示例#1
0
        public void GenerateMdMiniPng()
        {
            if (!File.Exists(originalArtPath) && File.Exists(iconPath))
            {
                using (var file = File.OpenRead(iconPath))
                    using (var bitmap = new SystemDrawingBitmap(new Bitmap(file) as Bitmap))
                        using (var fileOut = File.OpenWrite(originalArtPath))
                        {
                            bitmap.TrimPixels();
                            bitmap.Bitmap.Save(fileOut, ImageFormat.Png);
                        }
            }

            if (!File.Exists(mdMiniIconPath))
            {
                if (File.Exists(originalArtPath))
                {
                    SetMdMini(originalArtPath, GameImageType.MdFront);
                }

                if (File.Exists(spinePath))
                {
                    SetMdMini(spinePath, GameImageType.MdSpine);
                }
            }
        }
示例#2
0
        public virtual void SetImage(Image img, bool EightBitCompression = false)
        {
            // full-size image ratio
            int maxX = 228;
            int maxY = 204;

            bool mdminiFormatted = false;

            if (File.Exists(originalArtPath))
            {
                File.Delete(originalArtPath);
            }

            if (img.Size.Width == 182 && img.Size.Height == 216)
            {
                using (var bImage = new SystemDrawingBitmap(img.Clone() as Bitmap))
                {
                    if (bImage.EmptyRow(0) && bImage.EmptyRow(215) && bImage.EmptyColumn(0) && bImage.EmptyColumn(181) && bImage.EmptyColumn(29) && bImage.EmptyColumn(30))
                    {
                        mdminiFormatted = true;
                        using (var file = File.OpenWrite(mdMiniIconPath))
                            bImage.Bitmap.Save(file, ImageFormat.Png);

                        img = bImage.Bitmap.Clone(new Rectangle(31, 1, 150, 214), PixelFormat.Format32bppArgb);
                    }
                }
            }

            using (var file = File.OpenWrite(originalArtPath))
                using (var copy = new Bitmap(img))
                    copy.Save(file, ImageFormat.Png);

            if (!mdminiFormatted)
            {
                SetMdMini(img as Bitmap, GameImageType.MdFront);
            }

            ProcessImage(img, iconPath, maxX, maxY, false, true, EightBitCompression);

            // thumbnail image ratio
            maxX = 40;
            maxY = 40;
            ProcessImage(img, smallIconPath, maxX, maxY, ConfigIni.Instance.CenterThumbnail, false, EightBitCompression);
        }
示例#3
0
        private SystemDrawingBitmap GetMdMiniBitmap(MemoryStream bitmapStream = null)
        {
            if (bitmapStream != null && bitmapStream.Length > 0)
            {
                bitmapStream.Seek(0, SeekOrigin.Begin);
                return(new SystemDrawingBitmap(new Bitmap(bitmapStream) as Bitmap));
            }
            else if (File.Exists(mdMiniIconPath))
            {
                using (var file = File.OpenRead(mdMiniIconPath))
                    return(new SystemDrawingBitmap(new Bitmap(file) as Bitmap));
            }
            else
            {
                var template = new SystemDrawingBitmap(new Bitmap(182, 216, PixelFormat.Format32bppArgb) as Bitmap);

                return(template);
            }
        }
示例#4
0
        public Tasker.Conclusion ScrapeGames(Tasker tasker, Object syncObject = null)
        {
            if (Program.TheGamesDBAPI == null)
            {
                return(Tasker.Conclusion.Success);
            }

            try
            {
                var idList = new Dictionary <UInt32, int>();

                foreach (var app in NewGames)
                {
                    if (app.Metadata.OriginalCrc32 != 0 &&
                        data.GamesDB.HashLookup.ContainsKey(app.Metadata.OriginalCrc32) &&
                        data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.Count > 0)
                    {
                        if (!idList.ContainsKey(app.Metadata.OriginalCrc32))
                        {
                            idList.Add(app.Metadata.OriginalCrc32, data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.First());
                        }
                    }
                }

                var api      = Program.TheGamesDBAPI;
                var infoList = new Dictionary <int, IScraperData>();

                foreach (var chunk in idList.Values.Distinct().ToList().ChunkBy(20))
                {
                    var apiResponse = api.GetInfoByID(chunk.ToArray());

                    while (true)
                    {
                        apiResponse.Wait();
                        foreach (var result in apiResponse.Result.Items)
                        {
                            infoList.Add(int.Parse(result.ID), result);
                        }

                        if (apiResponse.Result.HasNextPage)
                        {
                            apiResponse = apiResponse.Result.GetNextPage();
                        }
                        else
                        {
                            break;
                        }
                    }
                }

                var counter = 0;

                foreach (var app in NewGames)
                {
                    tasker.SetProgress(++counter, NewGames.Count);
                    tasker.SetStatus(string.Format(Resources.Scraping0, app.Name));

                    int tgdbId;
                    if (app.Metadata.OriginalCrc32 != 0 &&
                        data.GamesDB.HashLookup.ContainsKey(app.Metadata.OriginalCrc32) &&
                        data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.Count > 0 &&
                        infoList.ContainsKey(tgdbId = data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.First()))
                    {
                        try
                        {
                            var apiResult = infoList[tgdbId];

                            if (apiResult.Name != null)
                            {
                                var name = GamesDB.HashLookup[app.Metadata.OriginalCrc32].Name;

                                if (name != null)
                                {
                                    name = Shared.CleanName(name, true);
                                }

                                app.Desktop.Name     = name ?? apiResult.Name;
                                app.Desktop.SortName = Shared.GetSortName(app.Desktop.Name);
                            }

                            if (apiResult.Publishers != null && apiResult.Publishers.Length > 0)
                            {
                                app.Desktop.Publisher = String.Join(", ", apiResult.Publishers).ToUpper();
                            }
                            else if (apiResult.Developers != null && apiResult.Developers.Length > 0)
                            {
                                if (apiResult.ReleaseDate != null)
                                {
                                    app.Desktop.Copyright = $"© {apiResult.ReleaseDate.Year} {String.Join(", ", apiResult.Developers)}";
                                }
                                else
                                {
                                    app.Desktop.Copyright = $"© {String.Join(", ", apiResult.Developers)}";
                                }
                            }

                            if (apiResult.Description != null)
                            {
                                app.Desktop.Description = apiResult.Description;
                            }

                            if (apiResult.ReleaseDate != null)
                            {
                                app.Desktop.ReleaseDate = apiResult.ReleaseDate.ToString("yyyy-MM-dd");
                            }

                            if (apiResult.PlayerCount > 0)
                            {
                                app.Desktop.Players      = Convert.ToByte(apiResult.PlayerCount);
                                app.Desktop.Simultaneous = apiResult.PlayerCount == 2;
                            }

                            if (apiResult.Genres != null && apiResult.Genres.Length > 0)
                            {
                                foreach (var genre in apiResult.Genres)
                                {
                                    var match = Genre.GenreList.Where(g => g.GamesDbId.Contains(genre.ID)).Select(g => g);

                                    if (match.Count() > 0)
                                    {
                                        var firstGenre = match.First();

                                        app.Desktop.Genre = firstGenre.DesktopName;
                                        break;
                                    }
                                }
                            }

                            using (var wc = new HakchiWebClient())
                            {
                                try
                                {
                                    var front = apiResult.Images.Where(i => i.Type == TeamShinkansen.Scrapers.Enums.ArtType.Front).ToArray();

                                    if (front.Length > 0 && !app.CoverArtMatchSuccess)
                                    {
                                        tasker.SetStatus(string.Format(Resources.DownloadingFrontArtFor0, apiResult.Name));
                                        var data = wc.DownloadData(front[0].Url);
                                        using (var ms = new MemoryStream(data))
                                            using (var bm = new Bitmap(ms))
                                            {
                                                app.SetImage(bm);
                                            }
                                    }
                                }
                                catch (WebException ex) { }

                                try
                                {
                                    tasker.SetStatus(string.Format(Resources.DownloadingClearLogoFor0, apiResult.Name));
                                    var imageData = wc.DownloadData($"https://cdn.thegamesdb.net/images/original/clearlogo/{apiResult.ID}.png");

                                    using (var ms = new MemoryStream(imageData))
                                        using (var clearLogo = File.OpenWrite(Path.Combine(app.BasePath, $"{app.Code}_logo.png")))
                                        {
                                            ms.Seek(0, SeekOrigin.Begin);
                                            ms.CopyTo(clearLogo);
                                            ms.Seek(0, SeekOrigin.Begin);

                                            tasker.SetStatus(string.Format(Resources.GeneratingSpineFor0, apiResult.Name));
                                            using (var bm = new Bitmap(ms))
                                                using (var cl = new SystemDrawingBitmap(bm))
                                                    using (var spineImage = (Program.SpineTemplates.Where(e => e.Value.Name == "Custom (Black Grid)").First().Value as SpineTemplate <Bitmap>).Process(cl).Bitmap)
                                                    {
                                                        app.SetMdMini(spineImage, NesMenuElementBase.GameImageType.MdSpine);
                                                    }
                                        }
                                }
                                catch (WebException ex) { }
                            }
                        }
                        catch (Exception innerEx) { }
                    }
                }
            }
            catch (Exception ex) { }

            return(Tasker.Conclusion.Success);
        }