Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MetadataUpdater"/> class.
        /// </summary>
        /// <param name="metadata"><see cref="MetadataFile"/> that is to be updated.</param>
        /// <exception cref="ArgumentNullException"><paramref name="metadata"/> is null</exception>
        public MetadataUpdater(MetadataFile metadata)
        {
            if (metadata == null)
                throw new ArgumentNullException("metadata");

            m_metadata = metadata;
        }
Esempio n. 2
0
 public ProjectFile_v2 VisitMetadataFile(MetadataFile metadata)
 {
     return new MetadataFile_v2
     {
          Filename = metadata.Filename,
           ModuleName = metadata.ModuleName,
     };
 }
Esempio n. 3
0
		protected MetadataMapping(MetadataFile file, string conceptElementName, string storageElementName) : base(MetadataElementKind.Mapping, file)
		{
			if(string.IsNullOrWhiteSpace(conceptElementName))
				throw new ArgumentNullException("conceptElementName");

			if(string.IsNullOrWhiteSpace(storageElementName))
				throw new ArgumentNullException("storageElementName");

			_conceptElementName = conceptElementName.Trim();
			_storageElementName = storageElementName.Trim();
		}
Esempio n. 4
0
        public async Task SkipExistingTest()
        {
            using (var temp = TempDirectory.Create())
            {
                var db = new GameDatabase(temp.TempPath);
                db.OpenDatabase();
                Game.DatabaseReference = db;
                int callCount = 0;
                var addedGame = db.ImportGame(new GameInfo()
                {
                    Name        = "Game1",
                    Description = "Description",
                    Developers  = new List <string>()
                    {
                        "Developers"
                    },
                    Genres = new List <string>()
                    {
                        "Genres"
                    },
                    Links = new List <Link>()
                    {
                        new Link("Link", "URL")
                    },
                    Publishers = new List <string>()
                    {
                        "Publishers"
                    },
                    ReleaseDate = new DateTime(2012, 6, 6),
                    Tags        = new List <string>()
                    {
                        "Tags"
                    },
                    UserScore      = 1,
                    CommunityScore = 2,
                    CriticScore    = 3
                });

                addedGame.Icon            = "Icon";
                addedGame.CoverImage      = "Image";
                addedGame.BackgroundImage = "BackgroundImage";

                var igdbProvider = new Mock <LibraryMetadataProvider>();
                igdbProvider.Setup(x => x.GetMetadata(It.IsAny <Game>())).Returns((Game g) =>
                {
                    callCount++;
                    var gameId = g.Name;
                    var game   = new GameInfo()
                    {
                        Name        = "IGDB Game " + gameId,
                        Description = $"IGDB Description {gameId}",
                        Developers  = new List <string>()
                        {
                            $"IGDB Developer {gameId}"
                        },
                        Genres = new List <string>()
                        {
                            $"IGDB Genre {gameId}"
                        },
                        Links = new List <Link>()
                        {
                            new Link($"IGDB link {gameId}", $"IGDB link url {gameId}")
                        },
                        Publishers = new List <string>()
                        {
                            $"IGDB publisher {gameId}"
                        },
                        ReleaseDate = new DateTime(2012, 6, 6),
                        Tags        = new List <string>()
                        {
                            $"IGDB Tag {gameId}"
                        }
                    };
                    var icon       = new MetadataFile($"IGDBIconName{gameId}.file", randomFile);
                    var image      = new MetadataFile($"IGDBImageName{gameId}.file", randomFile);
                    var background = new MetadataFile($"IGDB backgournd {gameId}");
                    return(new GameMetadata(game, icon, image, background));
                });

                var downloader = new MetadataDownloader(db, igdbProvider.Object, null);
                var settings   = new MetadataDownloaderSettings()
                {
                    SkipExistingValues = true
                };

                // No download - all values are kept
                settings.ConfigureFields(MetadataSource.IGDB, true);
                await downloader.DownloadMetadataAsync(
                    db.Games.ToList(), settings, null, null);

                var dbGames = db.Games.ToList();
                Assert.AreEqual(0, callCount);

                var game1 = dbGames[0];
                Assert.AreEqual("Description", game1.Description);
                Assert.AreEqual("Developers", game1.Developers[0].Name);
                Assert.AreEqual("Genres", game1.Genres[0].Name);
                Assert.AreEqual("Link", game1.Links[0].Name);
                Assert.AreEqual("URL", game1.Links[0].Url);
                Assert.AreEqual("Publishers", game1.Publishers[0].Name);
                Assert.AreEqual("Tags", game1.Tags[0].Name);
                Assert.AreEqual(2012, game1.ReleaseDate.Value.Year);
                Assert.IsNotEmpty(game1.BackgroundImage);
                Assert.IsNotEmpty(game1.Icon);
                Assert.IsNotEmpty(game1.CoverImage);

                // Single download - values are changed even when present
                settings.SkipExistingValues = false;
                await downloader.DownloadMetadataAsync(
                    db.Games.ToList(), settings, null, null);

                dbGames = db.Games.ToList();
                Assert.AreEqual(1, callCount);

                game1 = dbGames[0];
                Assert.AreEqual("IGDB Description Game1", game1.Description);
                Assert.AreEqual("IGDB Developer Game1", game1.Developers[0].Name);
                Assert.AreEqual("IGDB Genre Game1", game1.Genres[0].Name);
                Assert.AreEqual("IGDB link Game1", game1.Links[0].Name);
                Assert.AreEqual("IGDB link url Game1", game1.Links[0].Url);
                Assert.AreEqual("IGDB publisher Game1", game1.Publishers[0].Name);
                Assert.AreEqual("IGDB Tag Game1", game1.Tags[0].Name);
                Assert.AreEqual(2012, game1.ReleaseDate.Value.Year);
                Assert.IsNotEmpty(game1.BackgroundImage);
                Assert.IsNotEmpty(game1.Icon);
                Assert.IsNotEmpty(game1.CoverImage);

                // Single download - values are changed when skip enabled and values are not present
                callCount = 0;
                settings.SkipExistingValues = true;
                db.Games.Remove(game1);
                db.Games.Add(new Game("Game1"));

                await downloader.DownloadMetadataAsync(
                    db.Games.ToList(), settings, null, null);

                dbGames = db.Games.ToList();
                Assert.AreEqual(1, callCount);

                game1 = dbGames[0];
                Assert.AreEqual("IGDB Description Game1", game1.Description);
                Assert.AreEqual("IGDB Developer Game1", game1.Developers[0].Name);
                Assert.AreEqual("IGDB Genre Game1", game1.Genres[0].Name);
                Assert.AreEqual("IGDB link Game1", game1.Links[0].Name);
                Assert.AreEqual("IGDB link url Game1", game1.Links[0].Url);
                Assert.AreEqual("IGDB publisher Game1", game1.Publishers[0].Name);
                Assert.AreEqual("IGDB Tag Game1", game1.Tags[0].Name);
                Assert.AreEqual(2012, game1.ReleaseDate.Value.Year);
                Assert.IsNotEmpty(game1.BackgroundImage);
                Assert.IsNotEmpty(game1.Icon);
                Assert.IsNotEmpty(game1.CoverImage);
            }
        }
Esempio n. 5
0
        public async Task IGDBSourceTest()
        {
            using (var temp = TempDirectory.Create())
            {
                var db = new GameDatabase(temp.TempPath);
                db.OpenDatabase();
                Game.DatabaseReference = db;
                int callCount   = 0;
                var storeCalled = false;

                var games = new List <Game>()
                {
                    new Game("Game1"),
                    new Game("Game2")
                    {
                        PluginId = storePluginId, GameId = "Game2"
                    },
                    new Game("Game3")
                };

                db.Games.Add(games);

                var igdbProvider = new Mock <LibraryMetadataProvider>();
                igdbProvider.Setup(x => x.GetMetadata(It.IsAny <Game>())).Returns((Game g) =>
                {
                    callCount++;

                    if (g.Name == "Game3")
                    {
                        return(GameMetadata.GetEmptyData());
                    }

                    var gameId = g.Name;
                    var game   = new GameInfo()
                    {
                        Name        = "IGDB Game " + gameId,
                        Description = $"IGDB Description {gameId}",
                        Developers  = new List <string>()
                        {
                            $"IGDB Developer {gameId}"
                        },
                        Genres = new List <string>()
                        {
                            $"IGDB Genre {gameId}"
                        },
                        Links = new List <Link>()
                        {
                            new Link($"IGDB link {gameId}", $"IGDB link url {gameId}")
                        },
                        Publishers = new List <string>()
                        {
                            $"IGDB publisher {gameId}"
                        },
                        ReleaseDate = new DateTime(2012, 6, 6),
                        Tags        = new List <string>()
                        {
                            $"IGDB Tag {gameId}"
                        }
                    };
                    var icon       = new MetadataFile($"IGDBIconName{gameId}.file", randomFile);
                    var image      = new MetadataFile($"IGDBImageName{gameId}.file", randomFile);
                    var background = new MetadataFile($"IGDB backgournd {gameId}");
                    return(new GameMetadata(game, icon, image, background));
                });

                var storeProvider = new Mock <LibraryMetadataProvider>();
                storeProvider.Setup(x => x.GetMetadata(It.IsAny <Game>())).Returns((Game g) =>
                {
                    callCount++;
                    storeCalled = true;
                    return(GameMetadata.GetEmptyData());
                });

                var downloader = new MetadataDownloader(db, igdbProvider.Object, GetLibraryPlugins(storeProvider.Object, storePluginId));
                var settings   = new MetadataDownloaderSettings()
                {
                    SkipExistingValues = false
                };
                settings.Name.Import = false;
                settings.ConfigureFields(MetadataSource.IGDB, true);
                await downloader.DownloadMetadataAsync(
                    db.Games.ToList(), settings, null, null);


                Assert.IsFalse(storeCalled);
                Assert.AreEqual(3, callCount);
                var game1 = db.Games[games[0].Id];
                Assert.AreEqual("IGDB Description Game1", game1.Description);
                Assert.AreEqual("IGDB Developer Game1", game1.Developers[0].Name);
                Assert.AreEqual("IGDB Genre Game1", game1.Genres[0].Name);
                Assert.AreEqual("IGDB link Game1", game1.Links[0].Name);
                Assert.AreEqual("IGDB link url Game1", game1.Links[0].Url);
                Assert.AreEqual("IGDB publisher Game1", game1.Publishers[0].Name);
                Assert.AreEqual("IGDB Tag Game1", game1.Tags[0].Name);
                Assert.AreEqual(2012, game1.ReleaseDate.Value.Year);
                Assert.IsNotEmpty(game1.BackgroundImage);
                Assert.IsNotEmpty(game1.Icon);
                Assert.IsNotEmpty(game1.CoverImage);
                var game2 = db.Games[games[1].Id];
                Assert.AreEqual("IGDB Description Game2", game2.Description);

                Assert.AreEqual(2, Directory.GetFiles(db.GetFileStoragePath(game1.Id)).Count());
                Assert.AreEqual(2, Directory.GetFiles(db.GetFileStoragePath(game2.Id)).Count());
            }
        }
Esempio n. 6
0
 public static Assembly CreateAssembly(ITypeUniverse typeUniverse, MetadataFile metadataImport, IReflectionFactory factory, string manifestFile)
 {
     return(AssemblyFactory.CreateAssembly(typeUniverse, metadataImport, null, factory, manifestFile, null));
 }
Esempio n. 7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializableMetadata"/> class.
        /// </summary>
        /// <param name="metadataFile"><see cref="MetadataFile"/> object from which <see cref="SerializableMetadata"/> is to be initialized.</param>
        /// <exception cref="ArgumentNullException"><paramref name="metadataFile"/> is null.</exception>
        /// <exception cref="ArgumentException"><paramref name="metadataFile"/> is closed.</exception>
        public SerializableMetadata(MetadataFile metadataFile)
            : this()
        {
            if (metadataFile == null)
                throw new ArgumentNullException("metadataFile");

            if (!metadataFile.IsOpen)
                throw new ArgumentException("metadataFile is closed");

            // Process all records in the metadata file.
            List<SerializableMetadataRecord> serializableMetadataRecords = new List<SerializableMetadataRecord>();
            foreach (MetadataRecord metadataRecord in metadataFile.Read())
            {
                serializableMetadataRecords.Add(new SerializableMetadataRecord(metadataRecord));
            }
            MetadataRecords = serializableMetadataRecords.ToArray();
        }
 /// <summary>
 /// Load metadata file from file system
 /// </summary>
 public void LoadMetadataFile(MetadataFile metadataFile)
 {
     try
     {
         metadataFile.CleanUpContent();
         metadataFile.LoadContent(ReadMetadataFile(metadataFile.FileName));
     }
     catch (Exception ex)
     {
         metadataFile.ErrorInLoading = ex;
     }
 }
Esempio n. 9
0
        public override MetadataFile FindMetadataFile(Series series, string path)
        {
            var filename = Path.GetFileName(path);

            if (filename == null)
            {
                return(null);
            }

            var metadata = new MetadataFile
            {
                SeriesId     = series.Id,
                Consumer     = GetType().Name,
                RelativePath = series.Path.GetRelativePath(path)
            };

            //Series and season images are both named folder.jpg, only season ones sit in season folders
            if (Path.GetFileName(filename).Equals("folder.jpg", StringComparison.InvariantCultureIgnoreCase))
            {
                var parentdir   = Directory.GetParent(path);
                var seasonMatch = SeasonImagesRegex.Match(parentdir.Name);
                if (seasonMatch.Success)
                {
                    metadata.Type = MetadataType.SeasonImage;

                    if (seasonMatch.Groups["specials"].Success)
                    {
                        metadata.SeasonNumber = 0;
                    }

                    else
                    {
                        metadata.SeasonNumber = Convert.ToInt32(seasonMatch.Groups["season"].Value);
                    }

                    return(metadata);
                }

                metadata.Type = MetadataType.SeriesImage;
                return(metadata);
            }

            var parseResult = Parser.Parser.ParseTitle(filename);

            if (parseResult != null &&
                !parseResult.FullSeason)
            {
                switch (Path.GetExtension(filename).ToLowerInvariant())
                {
                case ".xml":
                    metadata.Type = MetadataType.EpisodeMetadata;
                    return(metadata);

                case ".metathumb":
                    metadata.Type = MetadataType.EpisodeImage;
                    return(metadata);
                }
            }

            return(null);
        }
Esempio n. 10
0
        public override string GetFilenameAfterMove(Movie movie, MovieFile movieFile, MetadataFile metadataFile)
        {
            var movieFilePath = Path.Combine(movie.Path, movieFile.RelativePath);

            if (metadataFile.Type == MetadataType.MovieImage)
            {
                return(GetMovieFileImageFilename(movieFilePath));
            }

            if (metadataFile.Type == MetadataType.MovieMetadata)
            {
                return(GetMovieFileMetadataFilename(movieFilePath));
            }

            _logger.Debug("Unknown movie file metadata: {0}", metadataFile.RelativePath);
            return(Path.Combine(movie.Path, metadataFile.RelativePath));
        }
Esempio n. 11
0
        public virtual string GetFilenameAfterMove(Series series, EpisodeFile episodeFile, MetadataFile metadataFile)
        {
            var existingFilename = Path.Combine(series.Path, metadataFile.RelativePath);
            var extension        = Path.GetExtension(existingFilename).TrimStart('.');
            var newFileName      = Path.ChangeExtension(Path.Combine(series.Path, episodeFile.RelativePath), extension);

            return(newFileName);
        }
Esempio n. 12
0
        public MetadataOnlyModule LoadModuleFromFile(string moduleFileName)
        {
            MetadataFile metadataFile = this.m_dispenser.OpenFileAsFileMapping(moduleFileName);

            return(new MetadataOnlyModule(this.m_universe, metadataFile, this.Factory, moduleFileName));
        }
Esempio n. 13
0
        private static async Task Main(string[] args)
        {
            if (args == null || args.Length == 0)
            {
#if DEBUG
                args = new[] { @"..\..\..\..\.." };
#else
                args = new string[] { Environment.CurrentDirectory };
#endif
            }

            string rootPath = args[0];

            StringComparer comparer = StringComparer.InvariantCulture;

            var metadata = new RoslynatorMetadata(rootPath);

            ImmutableArray <AnalyzerMetadata>           analyzers             = metadata.Analyzers;
            ImmutableArray <AnalyzerMetadata>           codeAnalysisAnalyzers = metadata.CodeAnalysisAnalyzers;
            ImmutableArray <AnalyzerMetadata>           formattingAnalyzers   = metadata.FormattingAnalyzers;
            ImmutableArray <RefactoringMetadata>        refactorings          = metadata.Refactorings;
            ImmutableArray <CodeFixMetadata>            codeFixes             = metadata.CodeFixes;
            ImmutableArray <CompilerDiagnosticMetadata> compilerDiagnostics   = metadata.CompilerDiagnostics;

            WriteAllText(
                @"..\docs\Options.md",
                MarkdownGenerator.CreateListOfAnalyzerOptions(metadata));

            WriteAnalyzersReadMe(@"Analyzers\README.md", analyzers, "Roslynator.Analyzers");

            WriteAnalyzersReadMe(@"CodeAnalysis.Analyzers\README.md", codeAnalysisAnalyzers, "Roslynator.CodeAnalysis.Analyzers");

            WriteAnalyzersReadMe(@"Formatting.Analyzers\README.md", formattingAnalyzers, "Roslynator.Formatting.Analyzers");
#if !DEBUG
            VisualStudioInstance instance = MSBuildLocator.QueryVisualStudioInstances().First(f => f.Version.Major == 16);

            MSBuildLocator.RegisterInstance(instance);

            using (MSBuildWorkspace workspace = MSBuildWorkspace.Create())
            {
                workspace.WorkspaceFailed += (o, e) => Console.WriteLine(e.Diagnostic.Message);

                string solutionPath = Path.Combine(rootPath, "Roslynator.sln");

                Console.WriteLine($"Loading solution '{solutionPath}'");

                Solution solution = await workspace.OpenSolutionAsync(solutionPath).ConfigureAwait(false);

                Console.WriteLine($"Finished loading solution '{solutionPath}'");

                RoslynatorInfo roslynatorInfo = await RoslynatorInfo.Create(solution).ConfigureAwait(false);

                IOrderedEnumerable <SourceFile> sourceFiles = analyzers
                                                              .Concat(codeAnalysisAnalyzers)
                                                              .Concat(formattingAnalyzers)
                                                              .Select(f => new SourceFile(f.Id, roslynatorInfo.GetAnalyzerFilesAsync(f.Identifier).Result))
                                                              .Concat(refactorings
                                                                      .Select(f => new SourceFile(f.Id, roslynatorInfo.GetRefactoringFilesAsync(f.Identifier).Result)))
                                                              .OrderBy(f => f.Id);

                MetadataFile.SaveSourceFiles(sourceFiles, @"..\SourceFiles.xml");
            }
#endif
            WriteAnalyzerMarkdowns(codeAnalysisAnalyzers, new (string, string)[] { ("Roslynator.CodeAnalysis.Analyzers", "https://www.nuget.org/packages/Roslynator.CodeAnalysis.Analyzers") });
Esempio n. 14
0
 public static Assembly CreateAssembly(ITypeUniverse typeUniverse, MetadataFile manifestModuleImport, MetadataFile[] netModuleImports, string manifestFile, string[] netModuleFiles)
 {
     return(AssemblyFactory.CreateAssembly(typeUniverse, manifestModuleImport, netModuleImports, new DefaultFactory(), manifestFile, netModuleFiles));
 }
Esempio n. 15
0
        public override string GetFilenameAfterMove(Series series, EpisodeFile episodeFile, MetadataFile metadataFile)
        {
            var episodeFilePath = Path.Combine(series.Path, episodeFile.RelativePath);

            if (metadataFile.Type == MetadataType.EpisodeImage)
            {
                return(GetEpisodeImageFilename(episodeFilePath));
            }

            if (metadataFile.Type == MetadataType.EpisodeMetadata)
            {
                return(GetEpisodeMetadataFilename(episodeFilePath));
            }

            _logger.Debug("Unknown episode file metadata: {0}", metadataFile.RelativePath);
            return(Path.Combine(series.Path, metadataFile.RelativePath));
        }
Esempio n. 16
0
		public MetadataContainer(string name, MetadataFile file, MetadataElementKind kind) : base(kind, file)
		{
			_name = name == null ? string.Empty : name.Trim();
		}
Esempio n. 17
0
        public override MetadataFile FindMetadataFile(Series series, string path)
        {
            var filename = Path.GetFileName(path);

            if (filename == null)
            {
                return(null);
            }

            var metadata = new MetadataFile
            {
                SeriesId     = series.Id,
                Consumer     = GetType().Name,
                RelativePath = series.Path.GetRelativePath(path)
            };

            if (SeriesImagesRegex.IsMatch(filename))
            {
                metadata.Type = MetadataType.SeriesImage;
                return(metadata);
            }

            var seasonMatch = SeasonImagesRegex.Match(filename);

            if (seasonMatch.Success)
            {
                metadata.Type = MetadataType.SeasonImage;

                var seasonNumberMatch = seasonMatch.Groups["season"].Value;
                int seasonNumber;

                if (seasonNumberMatch.Contains("specials"))
                {
                    metadata.SeasonNumber = 0;
                }

                else if (int.TryParse(seasonNumberMatch, out seasonNumber))
                {
                    metadata.SeasonNumber = seasonNumber;
                }

                else
                {
                    return(null);
                }

                return(metadata);
            }

            if (EpisodeImageRegex.IsMatch(filename))
            {
                metadata.Type = MetadataType.EpisodeImage;
                return(metadata);
            }

            if (filename.Equals("tvshow.nfo", StringComparison.OrdinalIgnoreCase))
            {
                metadata.Type = MetadataType.SeriesMetadata;
                return(metadata);
            }

            var parseResult = Parser.Parser.ParseTitle(filename);

            if (parseResult != null &&
                !parseResult.FullSeason &&
                Path.GetExtension(filename).Equals(".nfo", StringComparison.OrdinalIgnoreCase) &&
                _detectNfo.IsXbmcNfoFile(path))
            {
                metadata.Type = MetadataType.EpisodeMetadata;
                return(metadata);
            }

            return(null);
        }
 /// <summary>
 /// Write the metadata file.
 /// </summary>
 /// <param name="file">The metadata file to be written</param>
 protected virtual void WriteMetadataFile(MetadataFile file)
 {
     throw new NotImplementedException();
 }
Esempio n. 19
0
        public override string GetFilenameAfterMove(Artist artist, TrackFile trackFile, MetadataFile metadataFile)
        {
            var trackFilePath = trackFile.Path;

            if (metadataFile.Type == MetadataType.TrackMetadata)
            {
                return(GetTrackMetadataFilename(trackFilePath));
            }

            _logger.Debug("Unknown track file metadata: {0}", metadataFile.RelativePath);
            return(Path.Combine(artist.Path, metadataFile.RelativePath));
        }
Esempio n. 20
0
 public void SetTreeNodeProperties(MetadataFile mf)
 {
     TreeNode.Text = Path.GetFileName(mf.ModuleName);
     TreeNode.ImageName = "typelib.ico";
 }
        public async Task SkipExistingTest()
        {
            // Tests that existing data are not overriden even if metadata provider has them.
            var testPlugin = GetTestPlugin();
            testPlugin.SetSupportedFields(new List<MetadataField>
            {
                MetadataField.Description,
                MetadataField.Icon,
                MetadataField.CoverImage,
                MetadataField.BackgroundImage,
                MetadataField.Links,
                MetadataField.Publishers,
                MetadataField.Developers,
                MetadataField.Tags,
                MetadataField.Genres,
                MetadataField.ReleaseDate,
                MetadataField.Features
            });

            var gameId = "Game1";
            var icon = new MetadataFile($"IGDBIconName{gameId}.file", randomFile);
            var image = new MetadataFile($"IGDBImageName{gameId}.file", randomFile);
            var background = new MetadataFile($"IGDB backgournd {gameId}");
            testPlugin.ReturnMetadata = new GameMetadata()
            {
                Name = "IGDB Game " + gameId,
                Description = $"IGDB Description {gameId}",
                Developers = new HashSet<MetadataProperty> { new MetadataNameProperty($"IGDB Developer {gameId}") },
                Genres = new HashSet<MetadataProperty> { new MetadataNameProperty($"IGDB Genre {gameId}") },
                Links = new List<Link> { new Link($"IGDB link {gameId}", $"IGDB link url {gameId}") },
                Publishers = new HashSet<MetadataProperty> { new MetadataNameProperty($"IGDB publisher {gameId}") },
                ReleaseDate = new ReleaseDate(2012, 6, 6),
                Tags = new HashSet<MetadataProperty> { new MetadataNameProperty($"IGDB Tag {gameId}") },
                Features = new HashSet<MetadataProperty> { new MetadataNameProperty($"IGDB Feature {gameId}") },
                Icon = icon,
                BackgroundImage = background,
                CoverImage = image
            };

            List<MetadataPlugin> metadataDownloaders = new List<MetadataPlugin>()
            {
                testPlugin
            };

            using (var temp = TempDirectory.Create())
            using (var db = new GameDatabase(temp.TempPath))
            using (var token = new CancellationTokenSource())
            {
                db.OpenDatabase();
                Game.DatabaseReference = db;
                var addedGame = db.ImportGame(new GameMetadata()
                {
                    Name = "Game1",
                    Description = "Description",
                    Developers = new HashSet<MetadataProperty> { new MetadataNameProperty("Developers") },
                    Genres = new HashSet<MetadataProperty> { new MetadataNameProperty("Genres") },
                    Links = new List<Link>() { new Link("Link", "URL") },
                    Publishers = new HashSet<MetadataProperty> { new MetadataNameProperty("Publishers") },
                    ReleaseDate = new ReleaseDate(2012, 6, 6),
                    Tags = new HashSet<MetadataProperty> { new MetadataNameProperty("Tags") },
                    Features = new HashSet<MetadataProperty> { new MetadataNameProperty("Features") },
                    UserScore = 1,
                    CommunityScore = 2,
                    CriticScore = 3
                });

                addedGame.Icon = "Icon";
                addedGame.CoverImage = "Image";
                addedGame.BackgroundImage = "BackgroundImage";

                var downloader = new MetadataDownloader(db, metadataDownloaders, new List<LibraryPlugin>());
                var settings = new MetadataDownloaderSettings() { SkipExistingValues = true };

                // No download - all values are kept
                settings.ConfigureFields(new List<Guid> { testPlugin.Id }, true);
                await downloader.DownloadMetadataAsync(
                    db.Games.ToList(), settings, new PlayniteSettings(), null, token.Token);

                var dbGames = db.Games.ToList();
                Assert.AreEqual(0, testPlugin.CallCount);

                var game1 = dbGames[0];
                Assert.AreEqual("Description", game1.Description);
                Assert.AreEqual("Developers", game1.Developers[0].Name);
                Assert.AreEqual("Genres", game1.Genres[0].Name);
                Assert.AreEqual("Link", game1.Links[0].Name);
                Assert.AreEqual("URL", game1.Links[0].Url);
                Assert.AreEqual("Publishers", game1.Publishers[0].Name);
                Assert.AreEqual("Tags", game1.Tags[0].Name);
                Assert.AreEqual("Features", game1.Features[0].Name);
                Assert.AreEqual(2012, game1.ReleaseDate.Value.Year);
                Assert.IsNotEmpty(game1.BackgroundImage);
                Assert.IsNotEmpty(game1.Icon);
                Assert.IsNotEmpty(game1.CoverImage);

                // Single download - values are changed even when present
                settings.SkipExistingValues = false;
                await downloader.DownloadMetadataAsync(
                    db.Games.ToList(), settings, new PlayniteSettings(), null, token.Token);

                dbGames = db.Games.ToList();
                Assert.AreEqual(1, testPlugin.CallCount);

                game1 = dbGames[0];
                Assert.AreEqual("IGDB Description Game1", game1.Description);
                Assert.AreEqual("IGDB Developer Game1", game1.Developers[0].Name);
                Assert.AreEqual("IGDB Genre Game1", game1.Genres[0].Name);
                Assert.AreEqual("IGDB link Game1", game1.Links[0].Name);
                Assert.AreEqual("IGDB link url Game1", game1.Links[0].Url);
                Assert.AreEqual("IGDB publisher Game1", game1.Publishers[0].Name);
                Assert.AreEqual("IGDB Tag Game1", game1.Tags[0].Name);
                Assert.AreEqual("IGDB Feature Game1", game1.Features[0].Name);
                Assert.AreEqual(2012, game1.ReleaseDate.Value.Year);
                Assert.IsNotEmpty(game1.BackgroundImage);
                Assert.IsNotEmpty(game1.Icon);
                Assert.IsNotEmpty(game1.CoverImage);

                // Single download - values are changed when skip enabled and values are not present
                testPlugin.CallCount = 0;
                settings.SkipExistingValues = true;
                db.Games.Remove(game1);
                db.Games.Add(new Game("Game1"));

                await downloader.DownloadMetadataAsync(
                    db.Games.ToList(), settings, new PlayniteSettings(), null, token.Token);

                dbGames = db.Games.ToList();
                Assert.AreEqual(1, testPlugin.CallCount);

                game1 = dbGames[0];
                Assert.AreEqual("IGDB Description Game1", game1.Description);
                Assert.AreEqual("IGDB Developer Game1", game1.Developers[0].Name);
                Assert.AreEqual("IGDB Genre Game1", game1.Genres[0].Name);
                Assert.AreEqual("IGDB link Game1", game1.Links[0].Name);
                Assert.AreEqual("IGDB link url Game1", game1.Links[0].Url);
                Assert.AreEqual("IGDB publisher Game1", game1.Publishers[0].Name);
                Assert.AreEqual("IGDB Tag Game1", game1.Tags[0].Name);
                Assert.AreEqual("IGDB Feature Game1", game1.Features[0].Name);
                Assert.AreEqual(2012, game1.ReleaseDate.Value.Year);
                Assert.IsNotEmpty(game1.BackgroundImage);
                Assert.IsNotEmpty(game1.Icon);
                Assert.IsNotEmpty(game1.CoverImage);
            }
        }
Esempio n. 22
0
 public ProjectFile_v3 VisitMetadataFile(string projectAbsPath, MetadataFile metadata)
 {
     return new MetadataFile_v3
     {
          Filename = ConvertToProjectRelativePath(projectAbsPath, metadata.Filename),
           ModuleName = metadata.ModuleName,
     };
 }
Esempio n. 23
0
        public override string GetFilenameAfterMove(Movie movie, MovieFile movieFile, MetadataFile metadataFile)
        {
            var movieFilePath = Path.Combine(movie.Path, movieFile.RelativePath);
            var metadataPath  = Path.Combine(movie.Path, metadataFile.RelativePath);

            if (metadataFile.Type == MetadataType.MovieMetadata)
            {
                return(GetMovieMetadataFilename(movieFilePath));
            }

            if (metadataFile.Type == MetadataType.MovieImage)
            {
                var isFanart = metadataFile.RelativePath.Contains("fanart.jpg") ? MediaCoverTypes.Fanart : MediaCoverTypes.Poster;
                return(Path.Combine(movie.Path, GetMovieImageFilename(movieFilePath, isFanart)));
            }

            _logger.Debug("Unknown movie file metadata: {0}", metadataFile.RelativePath);
            return(Path.Combine(movie.Path, metadataFile.RelativePath));
        }
 /// <summary>
 /// Convert metadata loading errors into proxy generation error messages
 /// </summary>
 /// <return></return>
 /// <remarks></remarks>
 internal static ProxyGenerationError ConvertMetadataErrorToProxyGenerationError(MetadataFile metadataItem, Exception ex)
 {
     ProxyGenerationError generationError = null;
     if (ex is XmlSchemaException)
     {
         generationError = new ProxyGenerationError(ProxyGenerationError.GeneratorState.LoadMetadata, metadataItem.FileName, (XmlSchemaException)ex);
     }
     else if (ex is XmlException)
     {
         generationError = new ProxyGenerationError(ProxyGenerationError.GeneratorState.LoadMetadata, metadataItem.FileName, (XmlException)ex);
     }
     else if (ex is InvalidOperationException)
     {
         System.Xml.Schema.XmlSchemaException schemaException = ex.InnerException as System.Xml.Schema.XmlSchemaException;
         if (schemaException != null)
         {
             generationError = new ProxyGenerationError(ProxyGenerationError.GeneratorState.LoadMetadata, metadataItem.FileName, schemaException);
         }
         else
         {
             System.Xml.XmlException xmlException = ex.InnerException as System.Xml.XmlException;
             if (xmlException != null)
             {
                 generationError = new ProxyGenerationError(ProxyGenerationError.GeneratorState.LoadMetadata, metadataItem.FileName, xmlException);
             }
             else
             {
                 generationError = new ProxyGenerationError(ProxyGenerationError.GeneratorState.LoadMetadata, metadataItem.FileName, (InvalidOperationException)ex);
             }
         }
     }
     else
     {
         generationError = new ProxyGenerationError(ProxyGenerationError.GeneratorState.LoadMetadata, metadataItem.FileName, ex);
     }
     return generationError;
 }
Esempio n. 25
0
 public static Assembly CreateAssembly(ITypeUniverse typeUniverse, MetadataFile metadataImport, string manifestFile)
 {
     return(AssemblyFactory.CreateAssembly(typeUniverse, metadataImport, new DefaultFactory(), manifestFile));
 }