mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 10:11:30 +01:00 
			
		
		
		
	fix update level migration
This commit is contained in:
		
							parent
							
								
									2b61894e3c
								
							
						
					
					
						commit
						86bc77fd6a
					
				@ -78,6 +78,69 @@ namespace MediaBrowser.Common.Implementations.Updates
 | 
				
			|||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private bool MatchesUpdateLevel(RootObject i, PackageVersionClass updateLevel)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (updateLevel == PackageVersionClass.Beta)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (updateLevel == PackageVersionClass.Dev)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) ||
 | 
				
			||||||
 | 
					                       i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Technically all we need to do is check that it's not pre-release
 | 
				
			||||||
 | 
					            // But let's addititional checks for -beta and -dev to handle builds that might be temporarily tagged incorrectly.
 | 
				
			||||||
 | 
					            return !i.prerelease && !i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) &&
 | 
				
			||||||
 | 
					                   !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async Task<List<RootObject>> GetLatestReleases(string organzation, string repository, string assetFilename, CancellationToken cancellationToken)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var list = new List<RootObject>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var url = string.Format("https://api.github.com/repos/{0}/{1}/releases", organzation, repository);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var options = new HttpRequestOptions
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Url = url,
 | 
				
			||||||
 | 
					                EnableKeepAlive = false,
 | 
				
			||||||
 | 
					                CancellationToken = cancellationToken,
 | 
				
			||||||
 | 
					                UserAgent = "Emby/3.0"
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (_cacheLength.Ticks > 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                options.CacheMode = CacheMode.Unconditional;
 | 
				
			||||||
 | 
					                options.CacheLength = _cacheLength;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            using (var stream = await _httpClient.Get(options).ConfigureAwait(false))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var obj = _jsonSerializer.DeserializeFromStream<RootObject[]>(stream);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                obj = obj.Where(i => (i.assets ?? new List<Asset>()).Any(a => IsAsset(a, assetFilename))).ToArray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                list.AddRange(obj.Where(i => MatchesUpdateLevel(i, PackageVersionClass.Release)).OrderByDescending(GetVersion).Take(1));
 | 
				
			||||||
 | 
					                list.AddRange(obj.Where(i => MatchesUpdateLevel(i, PackageVersionClass.Beta)).OrderByDescending(GetVersion).Take(1));
 | 
				
			||||||
 | 
					                list.AddRange(obj.Where(i => MatchesUpdateLevel(i, PackageVersionClass.Dev)).OrderByDescending(GetVersion).Take(1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return list;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Version GetVersion(RootObject obj)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Version version;
 | 
				
			||||||
 | 
					            if (!Version.TryParse(obj.tag_name, out version))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return new Version(1, 0);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return version;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private CheckForUpdateResult CheckForUpdateResult(RootObject obj, Version minVersion, string assetFilename, string packageName, string targetFilename)
 | 
					        private CheckForUpdateResult CheckForUpdateResult(RootObject obj, Version minVersion, string assetFilename, string packageName, string targetFilename)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Version version;
 | 
					            Version version;
 | 
				
			||||||
 | 
				
			|||||||
@ -41,16 +41,7 @@ namespace MediaBrowser.Server.Startup.Common.Migrations
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                var updateLevel = _config.Configuration.SystemUpdateLevel;
 | 
					                var updateLevel = _config.Configuration.SystemUpdateLevel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Go down a level
 | 
					                if (updateLevel == PackageVersionClass.Dev)
 | 
				
			||||||
                if (updateLevel == PackageVersionClass.Release)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    updateLevel = PackageVersionClass.Beta;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (updateLevel == PackageVersionClass.Beta)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    updateLevel = PackageVersionClass.Dev;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (updateLevel == PackageVersionClass.Dev)
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    // It's already dev, there's nothing to check
 | 
					                    // It's already dev, there's nothing to check
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
@ -66,32 +57,42 @@ namespace MediaBrowser.Server.Startup.Common.Migrations
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        private async Task CheckVersion(Version currentVersion, PackageVersionClass updateLevel, CancellationToken cancellationToken)
 | 
					        private async Task CheckVersion(Version currentVersion, PackageVersionClass updateLevel, CancellationToken cancellationToken)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var result = await new GithubUpdater(_httpClient, _jsonSerializer, TimeSpan.FromMinutes(5))
 | 
					            var releases = await new GithubUpdater(_httpClient, _jsonSerializer, TimeSpan.FromMinutes(5))
 | 
				
			||||||
                .CheckForUpdateResult("MediaBrowser", "Emby", currentVersion, PackageVersionClass.Beta, _releaseAssetFilename, "MBServer", "Mbserver.zip",
 | 
					                .GetLatestReleases("MediaBrowser", "Emby", _releaseAssetFilename, cancellationToken).ConfigureAwait(false);
 | 
				
			||||||
                    cancellationToken).ConfigureAwait(false);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (result != null && result.IsUpdateAvailable)
 | 
					            var newUpdateLevel = updateLevel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (releases.Count >= 2)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _config.Configuration.SystemUpdateLevel = updateLevel;
 | 
					                var beta = releases[1];
 | 
				
			||||||
 | 
					                Version version;
 | 
				
			||||||
 | 
					                if (Version.TryParse(beta.tag_name, out version))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (currentVersion >= version)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        newUpdateLevel = PackageVersionClass.Beta;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (releases.Count >= 3)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var dev = releases[2];
 | 
				
			||||||
 | 
					                Version version;
 | 
				
			||||||
 | 
					                if (Version.TryParse(dev.tag_name, out version))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (currentVersion >= version)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        newUpdateLevel = PackageVersionClass.Dev;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (newUpdateLevel != updateLevel)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _config.Configuration.SystemUpdateLevel = newUpdateLevel;
 | 
				
			||||||
                _config.SaveConfiguration();
 | 
					                _config.SaveConfiguration();
 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Go down a level
 | 
					 | 
				
			||||||
            if (updateLevel == PackageVersionClass.Release)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                updateLevel = PackageVersionClass.Beta;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (updateLevel == PackageVersionClass.Beta)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                updateLevel = PackageVersionClass.Dev;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            await CheckVersion(currentVersion, updateLevel, cancellationToken).ConfigureAwait(false);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user