Ejemplo n.º 1
0
        public override IEnumerable <MetadataProperty> GetPlatforms(GetMetadataFieldArgs args)
        {
            yield return(new MetadataSpecProperty("pc_windows"));

            yield return(new MetadataSpecProperty("Sony PlayStation Vita"));

            yield return(new MetadataNameProperty("Microsoft Xbox 360"));
        }
        public override string GetName(GetMetadataFieldArgs args)
        {
            if (AvailableFields.Contains(MetadataField.Name))
            {
                return(gameData.Name);
            }

            return(base.GetName(args));
        }
        public override IEnumerable <MetadataProperty> GetPublishers(GetMetadataFieldArgs args)
        {
            if (AvailableFields.Contains(MetadataField.Publishers))
            {
                return(gameData.Publishers);
            }

            return(base.GetPublishers(args));
        }
        public override MetadataFile GetCoverImage(GetMetadataFieldArgs args)
        {
            if (AvailableFields.Contains(MetadataField.ReleaseDate))
            {
                return(gameData.CoverImage);
            }

            return(base.GetCoverImage(args));
        }
Ejemplo n.º 5
0
        public void DownloadPluginData(MetadataPlugin plugin)
        {
            var res = dialogs.ActivateGlobalProgress((args) =>
            {
                var provider = plugin.GetMetadataProvider(new MetadataRequestOptions(EditingGame, false));
                if (provider != null)
                {
                    try
                    {
                        var fieldArgs = new GetMetadataFieldArgs {
                            CancelToken = args.CancelToken
                        };
                        var metadata = new GameMetadata
                        {
                            Name            = provider.GetName(fieldArgs),
                            Genres          = provider.GetGenres(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            ReleaseDate     = provider.GetReleaseDate(fieldArgs),
                            Developers      = provider.GetDevelopers(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Publishers      = provider.GetPublishers(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Tags            = provider.GetTags(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Features        = provider.GetFeatures(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Description     = provider.GetDescription(fieldArgs),
                            Links           = provider.GetLinks(fieldArgs)?.Where(a => a != null).ToList(),
                            CriticScore     = provider.GetCriticScore(fieldArgs),
                            CommunityScore  = provider.GetCommunityScore(fieldArgs),
                            AgeRatings      = provider.GetAgeRatings(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Series          = provider.GetSeries(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Regions         = provider.GetRegions(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Platforms       = provider.GetPlatforms(fieldArgs)?.Where(a => a != null).ToHashSet(),
                            Icon            = provider.GetIcon(fieldArgs),
                            CoverImage      = provider.GetCoverImage(fieldArgs),
                            BackgroundImage = provider.GetBackgroundImage(fieldArgs)
                        };

                        Application.Current.Dispatcher.Invoke(() => PreviewGameData(ConvertGameInfo(metadata)));
                    }
                    finally
                    {
                        provider.Dispose();
                    }
                }
            }, new GlobalProgressOptions(LOC.DownloadingLabel)
            {
                IsIndeterminate = true,
                Cancelable      = true
            });

            if (res.Error != null)
            {
                logger.Error(res.Error, string.Format("Failed to download metadata, {0}, {1}", Game.PluginId, Game.GameId));
                dialogs.ShowMessage(
                    string.Format(resources.GetString("LOCMetadataDownloadError"), res.Error.Message),
                    resources.GetString("LOCDownloadError"),
                    MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Ejemplo n.º 6
0
        public Task <IEnumerable <ISearchItem <string> > > GetItemsTask(string query, IReadOnlyList <Candidate> addedItems)
        {
            if (string.IsNullOrWhiteSpace(query))
            {
                return(null);
            }

            var metadataArgs = new GetMetadataFieldArgs();

            return(Task.Run(() =>
            {
                var game = new Game(query);
                var gameMetadata = new GameMetadata();
                var requestOptions = new MetadataRequestOptions(game, true);

                List <ISearchItem <string> > items = new List <ISearchItem <string> >();

                using (var provider = metadataPlugin.GetMetadataProvider(requestOptions))
                {
                    var item = new CommandItem();
                    var fields = provider.AvailableFields;

                    if (fields.Contains(MetadataField.Icon))
                    {
                        gameMetadata.Icon = provider.GetIcon(new GetMetadataFieldArgs());
                    }
                    if (fields.Contains(MetadataField.Platform))
                    {
                        gameMetadata.Platforms = provider.GetPlatforms(new GetMetadataFieldArgs()).ToHashSet();
                    }
                    if (fields.Contains(MetadataField.Genres))
                    {
                        gameMetadata.Genres = provider.GetGenres(new GetMetadataFieldArgs()).ToHashSet();
                    }
                    if (fields.Contains(MetadataField.Name) && provider.GetName(new GetMetadataFieldArgs()) is string name)
                    {
                        gameMetadata.Name = name;
                        var tempGame = SearchPlugin.Instance.PlayniteApi.Database.ImportGame(gameMetadata);
                        items.Add(new GameSearchItem(tempGame));
                        if (SearchPlugin.Instance.PlayniteApi.Database.Games.Remove(tempGame.Id))
                        {
                        }
                        else
                        {
                        }
                    }
                }

                return items.AsEnumerable();
            }, metadataArgs.CancelToken));
        }
 public override IEnumerable<MetadataProperty> GetTags(GetMetadataFieldArgs args)
 {
     return metadata.Tags;
 }
 public override IEnumerable<MetadataProperty> GetPlatforms(GetMetadataFieldArgs args)
 {
     return metadata.Platforms;
 }
Ejemplo n.º 9
0
 public override IEnumerable <MetadataProperty> GetFeatures(GetMetadataFieldArgs args)
 {
     yield return(new MetadataNameProperty("Test Feature"));
 }
 public override string GetDescription(GetMetadataFieldArgs args)
 {
     return metadata.Description;
 }
 public override int? GetCriticScore(GetMetadataFieldArgs args)
 {
     return metadata.CriticScore;
 }
 public override MetadataFile GetCoverImage(GetMetadataFieldArgs args)
 {
     return metadata.CoverImage;
 }
 public override int? GetCommunityScore(GetMetadataFieldArgs args)
 {
     return metadata.CommunityScore;
 }
 public override MetadataFile GetBackgroundImage(GetMetadataFieldArgs args)
 {
     return metadata.BackgroundImage;
 }
 public override IEnumerable<MetadataProperty> GetRegions(GetMetadataFieldArgs args)
 {
     return metadata.Regions;
 }
Ejemplo n.º 16
0
        public override IEnumerable <Link> GetLinks(GetMetadataFieldArgs args)
        {
            yield return(new Link("Playnite website", "https://playnite.link/"));

            yield return(null);
        }
 public override MetadataFile GetIcon(GetMetadataFieldArgs args)
 {
     return metadata.Icon;
 }
Ejemplo n.º 18
0
        public override IEnumerable <MetadataProperty> GetRegions(GetMetadataFieldArgs args)
        {
            yield return(new MetadataSpecProperty("newZealand"));

            yield return(new MetadataSpecProperty("hongKong"));
        }
 public override IEnumerable<Link> GetLinks(GetMetadataFieldArgs args)
 {
     return metadata.Links;
 }
Ejemplo n.º 20
0
 // Override additional methods based on supported metadata fields.
 public override string GetDescription(GetMetadataFieldArgs args)
 {
     return(options.GameData.Name + " description");
 }
 public override string GetName(GetMetadataFieldArgs args)
 {
     return metadata.Name;
 }
 public override IEnumerable<MetadataProperty> GetPublishers(GetMetadataFieldArgs args)
 {
     return metadata.Publishers;
 }
 public override ReleaseDate? GetReleaseDate(GetMetadataFieldArgs args)
 {
     return metadata.ReleaseDate;
 }
Ejemplo n.º 24
0
        internal GameMetadata ProcessField(
            Game game,
            MetadataFieldSettings fieldSettings,
            MetadataField gameField,
            Func <GameMetadata, object> propertySelector,
            Dictionary <Guid, GameMetadata> existingStoreData,
            Dictionary <Guid, OnDemandMetadataProvider> existingPluginData,
            CancellationToken cancelToken)
        {
            if (fieldSettings.Sources.Any() == false)
            {
                return(null);
            }

            var getFieldArgs = new GetMetadataFieldArgs {
                CancelToken = cancelToken
            };

            foreach (var source in fieldSettings.Sources)
            {
                if (cancelToken.IsCancellationRequested)
                {
                    return(null);
                }

                try
                {
                    // Skip Store source for manually added games.
                    if (source == Guid.Empty && game.PluginId == Guid.Empty)
                    {
                        continue;
                    }

                    // Check if metadata from this source are already downloaded.
                    if (existingStoreData.ContainsKey(source))
                    {
                        if (existingStoreData[source] != null && propertySelector(existingStoreData[source]) != null)
                        {
                            return(existingStoreData[source]);
                        }
                        else
                        {
                            continue;
                        }
                    }

                    // Check if downloader supports this game field.
                    if (source != Guid.Empty)
                    {
                        var downloader = metadataDownloaders.FirstOrDefault(a => a.Id == source);
                        if (downloader == null)
                        {
                            continue;
                        }
                        else if (downloader.SupportedFields?.Contains(gameField) != true)
                        {
                            continue;
                        }
                    }

                    // Download metadata.
                    GameMetadata metadata = null;
                    if (source == Guid.Empty)
                    {
                        metadata = ProcessStoreDownload(game);
                        existingStoreData.Add(source, metadata);
                    }
                    else
                    {
                        var downloader = metadataDownloaders.FirstOrDefault(a => a.Id == source);
                        if (downloader == null)
                        {
                            continue;
                        }

                        OnDemandMetadataProvider provider = null;
                        if (existingPluginData.ContainsKey(source))
                        {
                            provider = existingPluginData[source];
                        }
                        else
                        {
                            provider = downloader.GetMetadataProvider(new MetadataRequestOptions(game, true));
                            existingPluginData.Add(source, provider);
                        }

                        if (provider == null)
                        {
                            continue;
                        }

                        if (!provider.AvailableFields.Contains(gameField))
                        {
                            continue;
                        }

                        metadata = new GameMetadata();
                        switch (gameField)
                        {
                        case MetadataField.Name:
                            metadata.Name = provider.GetName(getFieldArgs);
                            break;

                        case MetadataField.Genres:
                            metadata.Genres = provider.GetGenres(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.ReleaseDate:
                            metadata.ReleaseDate = provider.GetReleaseDate(getFieldArgs);
                            break;

                        case MetadataField.Developers:
                            metadata.Developers = provider.GetDevelopers(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.Publishers:
                            metadata.Publishers = provider.GetPublishers(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.Tags:
                            metadata.Tags = provider.GetTags(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.Description:
                            metadata.Description = provider.GetDescription(getFieldArgs);
                            break;

                        case MetadataField.Links:
                            metadata.Links = provider.GetLinks(getFieldArgs)?.Where(a => a != null).ToList();
                            break;

                        case MetadataField.CriticScore:
                            metadata.CriticScore = provider.GetCriticScore(getFieldArgs);
                            break;

                        case MetadataField.CommunityScore:
                            metadata.CommunityScore = provider.GetCommunityScore(getFieldArgs);
                            break;

                        case MetadataField.Icon:
                            metadata.Icon = provider.GetIcon(getFieldArgs);
                            break;

                        case MetadataField.CoverImage:
                            metadata.CoverImage = provider.GetCoverImage(getFieldArgs);
                            break;

                        case MetadataField.BackgroundImage:
                            metadata.BackgroundImage = provider.GetBackgroundImage(getFieldArgs);
                            break;

                        case MetadataField.Features:
                            metadata.Features = provider.GetFeatures(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.AgeRating:
                            metadata.AgeRatings = provider.GetAgeRatings(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.Region:
                            metadata.Regions = provider.GetRegions(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.Series:
                            metadata.Series = provider.GetSeries(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        case MetadataField.Platform:
                            metadata.Platforms = provider.GetPlatforms(getFieldArgs)?.Where(a => a != null).ToHashSet();
                            break;

                        default:
                            throw new NotImplementedException();
                        }
                    }

                    if (metadata != null && propertySelector(metadata) != null)
                    {
                        return(metadata);
                    }
                    else
                    {
                        continue;
                    }
                }
                catch (Exception e) when(!PlayniteEnvironment.ThrowAllErrors)
                {
                    logger.Error(e, $"Failed to process metadata download: {gameField}, {source}");
                }
            }

            return(null);
        }
 public override IEnumerable<MetadataProperty> GetFeatures(GetMetadataFieldArgs args)
 {
     return metadata.Features;
 }