示例#1
0
 public void SaveRelease(VpdbRelease release)
 {
     _games.Upsert(release.Game);
     if (release.Game.Backglass != null)
     {
         _files.Upsert(release.Game.Backglass);
     }
     if (release.Game.Logo != null)
     {
         _files.Upsert(release.Game.Logo);
     }
     release.Versions.ToList().ForEach(version => {
         version.Files.ToList().ForEach(file => {
             _files.Upsert(file.Reference);
             _files.Upsert(file.PlayfieldImage);
             if (file.PlayfieldVideo != null)
             {
                 _files.Upsert(file.PlayfieldVideo);
             }
             file.Compatibility.ToList().ForEach(build => _builds.Upsert(build));
         });
     });
     release.Authors.ToList().ForEach(author => {
         _users.Upsert(author.User);
     });
     _releases.Upsert(release);
 }
示例#2
0
文件: Job.cs 项目: xantari/agent
 /// <summary>
 /// Constructor called when creating a new job through the application for
 /// downloading a file not part of a release but related to a release,
 /// like playfield image or backglass.
 /// </summary>
 /// <param name="release">Release to be downloaded</param>
 /// <param name="file">File to be downloaded</param>
 /// <param name="filetype">Where does this end up?</param>
 /// <param name="platform">Platform the file belongs to</param>
 public Job(VpdbRelease release, VpdbFile file, FileType filetype, VpdbTableFile.VpdbPlatform platform) : this(release, file)
 {
     FileType = filetype;
     Platform = platform;
     Thumb    = release.Thumb?.Image;
     _logger.Info("Creating new download job for {0} {1}.", filetype, File.Uri.AbsoluteUri);
 }
示例#3
0
文件: Job.cs 项目: xantari/agent
 /// <summary>
 /// Constructor called when creating a new job through the application for
 /// downloading a table file.
 /// </summary>
 /// <param name="release">Release to be downloaded</param>
 /// <param name="tableFile">File of the release to be downloaded</param>
 /// <param name="filetype">Where does this end up?</param>
 /// <param name="platform">Platform the file belongs to</param>
 public Job(VpdbRelease release, VpdbTableFile tableFile, FileType filetype, VpdbTableFile.VpdbPlatform platform) : this(release, tableFile.Reference)
 {
     FileType = filetype;
     Thumb    = tableFile.Thumb;
     Platform = platform;
     _logger.Info("Creating new release download job for {0} {1}.", filetype, File.Uri.AbsoluteUri);
 }
示例#4
0
        /// <summary>
        /// Maps this mapping to a VPDB release.
        /// </summary>
        /// <param name="release">Release to map to</param>
        /// <param name="fileId">File ID of the release corresponding to the mapping</param>
        /// <returns>This mapping</returns>
        public Mapping Map(VpdbRelease release, string fileId)
        {
            ReleaseId = release.Id;
            FileId    = fileId;

            return(this);
        }
示例#5
0
        public void MapGame(AggregatedGame game, VpdbRelease release, string fileId)
        {
            // update in case we didn't catch the last version.
            _vpdbManager.GetRelease(release.Id).Subscribe(updatedRelease => {
                _logger.Info("Mapping {0} to {1} ({2})", game, release, fileId);

                GetOrCreateMapping(game).Map(release, fileId);
            }, exception => _vpdbClient.HandleApiError(exception, "retrieving release details during linking"));
        }
示例#6
0
        public Message LogReleaseLinked(AggregatedGame game, VpdbRelease release, string fileId)
        {
            var msg = new Message(MessageType.ReleaseLinked, MessageLevel.Info, new Dictionary <string, string> {
                { DataGameName, game.FileId },
                { DataRelease, release.Id },
                { DataFile, fileId }
            });

            return(Log(msg));
        }
示例#7
0
        public Message LogReleaseDownloaded(VpdbRelease release, VpdbVersion version, VpdbFile file, double bytesPerSecond)
        {
            var msg = new Message(MessageType.ReleaseDownloaded, MessageLevel.Info, new Dictionary <string, string> {
                { DataRelease, release.Id },
                { DataReleaseName, release.Name },
                { DataVersion, version.Name },
                { DataFile, file.Id },
                { DataSubject, release.Game.DisplayName },
                { DownloadSpeed, $"{bytesPerSecond.Bytes().ToString("#.0")}/s" },
            });

            return(Log(msg));
        }
示例#8
0
        public GameResultItemViewModel(AggregatedGame game, VpdbRelease release, VpdbVersion version, VpdbTableFile tableFile, ICommand closeCommand)
        {
            Game      = game;
            Version   = version;
            Release   = release;
            TableFile = tableFile;

            SelectResult = ReactiveCommand.Create(() => {
                GameManager.MapGame(game, release, tableFile.Reference.Id);
                //MessageManager.LogReleaseLinked(game, release, tableFile.Reference.Id);

                closeCommand.Execute(null);
            });
        }
示例#9
0
        public void AddOrUpdateRelease(VpdbRelease release)
        {
            var dirtyRelease = _releases.FindOne(r => r.Id == release.Id);

            if (dirtyRelease == null)
            {
                _logger.Info("Adding new release data for release {0} ({1})", release.Id, release.Name);
                _releases.Insert(release);
            }
            else
            {
                _logger.Info("Updating release data of release {0} ({1})", release.Id, release.Name);
                dirtyRelease.Update(release);
                _releases.Update(dirtyRelease);
            }
        }
示例#10
0
        public VpdbTableFile FindLatestFile(VpdbRelease release, string currentFileId = null)
        {
            if (release == null)
            {
                return(null);
            }
            var currentFile = _databaseManager.GetTableFile(release.Id, currentFileId);

            var file = release.Versions
                       .SelectMany(v => v.Files)
                       .Where(f => FlavorMatches(f, currentFile))
                       .Select(f => new { f, weight = FlavorWeight(f, currentFile) })
                       .OrderByDescending(x => x.weight)
                       .ThenByDescending(x => x.f.ReleasedAt)
                       .Select(x => x.f)
                       .FirstOrDefault();

            // check for newer version
            if (file != null && currentFile != null)
            {
                var currentVersion = _databaseManager.GetVersion(release.Id, currentFile.Reference.Id);
                var latestVersion  = _databaseManager.GetVersion(release.Id, file.Reference.Id);
                if (latestVersion != null && currentVersion != null && currentVersion.ReleasedAt >= latestVersion.ReleasedAt)
                {
                    _logger.Info("Update check: No update found.");
                    return(null);
                }
                if (latestVersion != null && currentVersion != null)
                {
                    _logger.Info("Update check: Found new version from v{0} to v{1}", currentVersion.Name, latestVersion.Name);
                }
                else
                {
                    _logger.Warn("Update check: Failed to retrieve version for file {0}/{1}", file.Reference.Id, currentFile.Reference.Id);
                }
            }
            if (file == null)
            {
                _logger.Info("Update check: Nothing matched.");
            }

            return(file);
        }
示例#11
0
 /// <summary>
 /// Sets VPDB release data when mapping data is available.
 /// </summary>
 /// <param name="release"></param>
 /// <param name="fileId"></param>
 private void SetRelease(VpdbRelease release, string fileId)
 {
     MappedRelease   = release;
     MappedVersion   = release.GetVersion(fileId);
     MappedTableFile = release.GetFile(fileId);
 }
示例#12
0
文件: Job.cs 项目: xantari/agent
 /// <summary>
 /// Constructor called when de-serializing
 /// </summary>
 private Job(VpdbRelease release, VpdbFile file) : this()
 {
     Release = release;
     File    = file;
 }
示例#13
0
 /// <summary>
 /// Constructor when linking game to VPDB
 /// </summary>
 /// <param name="game">Game to link to</param>
 /// <param name="system">System to link to</param>
 /// <param name="release">VPDB release</param>
 /// <param name="fileId">File ID of VPDB release</param>
 public Mapping(AggregatedGame game, PinballXSystem system, VpdbRelease release, string fileId) : this(game, system)
 {
     ReleaseId = release.Id;
     FileId    = fileId;
 }