mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-16 07:06:18 +00:00
update channel db
This commit is contained in:
@@ -33,12 +33,12 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||
|
||||
var imageResponse = new DynamicImageResponse();
|
||||
|
||||
if (!string.IsNullOrEmpty(channelItem.OriginalImageUrl))
|
||||
if (!string.IsNullOrEmpty(channelItem.ExternalImagePath))
|
||||
{
|
||||
var options = new HttpRequestOptions
|
||||
{
|
||||
CancellationToken = cancellationToken,
|
||||
Url = channelItem.OriginalImageUrl
|
||||
Url = channelItem.ExternalImagePath
|
||||
};
|
||||
|
||||
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
|
||||
@@ -74,7 +74,7 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||
|
||||
if (channelItem != null)
|
||||
{
|
||||
return !channelItem.HasImage(ImageType.Primary) && !string.IsNullOrWhiteSpace(channelItem.OriginalImageUrl);
|
||||
return !channelItem.HasImage(ImageType.Primary) && !string.IsNullOrWhiteSpace(channelItem.ExternalImagePath);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1180,7 +1180,7 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||
_logger.ErrorException("Error retrieving channel item from database", ex);
|
||||
}
|
||||
|
||||
if (item == null || !string.Equals(item.DataVersion, channnelDataVersion, StringComparison.Ordinal))
|
||||
if (item == null || !string.Equals(item.ExternalEtag, channnelDataVersion, StringComparison.Ordinal))
|
||||
{
|
||||
item = new T();
|
||||
isNew = true;
|
||||
@@ -1190,7 +1190,7 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||
isNew = false;
|
||||
}
|
||||
|
||||
item.DataVersion = channnelDataVersion;
|
||||
item.ExternalEtag = channnelDataVersion;
|
||||
item.Id = id;
|
||||
return item;
|
||||
}
|
||||
@@ -1229,17 +1229,19 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||
item.ProviderIds = info.ProviderIds;
|
||||
item.OfficialRating = info.OfficialRating;
|
||||
|
||||
item.DateCreated = info.DateCreated.HasValue ?
|
||||
info.DateCreated.Value :
|
||||
DateTime.UtcNow;
|
||||
item.DateCreated = info.DateCreated ?? DateTime.UtcNow;
|
||||
}
|
||||
|
||||
var channelItem = (IChannelItem)item;
|
||||
|
||||
channelItem.OriginalImageUrl = info.ImageUrl;
|
||||
channelItem.ExternalId = info.Id;
|
||||
channelItem.ExternalImagePath = info.ImageUrl;
|
||||
channelItem.ChannelId = internalChannelId.ToString("N");
|
||||
channelItem.ChannelItemType = info.Type;
|
||||
|
||||
if (!string.Equals(channelItem.ExternalId, info.Id, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
isNew = true;
|
||||
}
|
||||
channelItem.ExternalId = info.Id;
|
||||
|
||||
if (isNew)
|
||||
{
|
||||
|
||||
@@ -1042,6 +1042,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
dto.IsFolder = item.IsFolder;
|
||||
dto.MediaType = item.MediaType;
|
||||
dto.LocationType = item.LocationType;
|
||||
dto.IsHD = item.IsHD;
|
||||
|
||||
dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode;
|
||||
dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage;
|
||||
@@ -1308,7 +1309,6 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
dto.VideoType = video.VideoType;
|
||||
dto.Video3DFormat = video.Video3DFormat;
|
||||
dto.IsoType = video.IsoType;
|
||||
dto.IsHD = video.IsHD;
|
||||
|
||||
if (video.AdditionalParts.Count != 0)
|
||||
{
|
||||
|
||||
@@ -39,38 +39,39 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
var imageResponse = new DynamicImageResponse();
|
||||
|
||||
if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath))
|
||||
if (!string.IsNullOrEmpty(liveTvItem.ExternalImagePath))
|
||||
{
|
||||
imageResponse.Path = liveTvItem.ProviderImagePath;
|
||||
imageResponse.HasImage = true;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl))
|
||||
{
|
||||
var options = new HttpRequestOptions
|
||||
if (liveTvItem.ExternalImagePath.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
CancellationToken = cancellationToken,
|
||||
Url = liveTvItem.ProviderImageUrl,
|
||||
var options = new HttpRequestOptions
|
||||
{
|
||||
CancellationToken = cancellationToken,
|
||||
Url = liveTvItem.ExternalImagePath,
|
||||
|
||||
// Some image hosts require a user agent to be specified.
|
||||
UserAgent = "Emby Server/" + _appHost.ApplicationVersion
|
||||
};
|
||||
// Some image hosts require a user agent to be specified.
|
||||
UserAgent = "Emby Server/" + _appHost.ApplicationVersion
|
||||
};
|
||||
|
||||
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
|
||||
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
|
||||
|
||||
var contentType = response.ContentType;
|
||||
|
||||
if (contentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
imageResponse.HasImage = true;
|
||||
imageResponse.Stream = response.Content;
|
||||
imageResponse.SetFormatFromMimeType(contentType);
|
||||
if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
imageResponse.HasImage = true;
|
||||
imageResponse.Stream = response.Content;
|
||||
imageResponse.SetFormatFromMimeType(response.ContentType);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Error("Provider did not return an image content type.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Error("Provider did not return an image content type.");
|
||||
imageResponse.Path = liveTvItem.ExternalImagePath;
|
||||
imageResponse.HasImage = true;
|
||||
}
|
||||
}
|
||||
else if (liveTvItem.HasProviderImage ?? true)
|
||||
else
|
||||
{
|
||||
var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
|
||||
@@ -572,9 +572,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
// replaceImages.Add(ImageType.Primary);
|
||||
//}
|
||||
|
||||
item.ProviderImageUrl = channelInfo.ImageUrl;
|
||||
item.HasProviderImage = channelInfo.HasImage;
|
||||
item.ProviderImagePath = channelInfo.ImagePath;
|
||||
item.ExternalImagePath = string.IsNullOrWhiteSpace(channelInfo.ImageUrl) ? channelInfo.ImagePath : channelInfo.ImageUrl;
|
||||
|
||||
if (string.IsNullOrEmpty(item.Name))
|
||||
{
|
||||
@@ -607,7 +605,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
Id = id,
|
||||
DateCreated = DateTime.UtcNow,
|
||||
DateModified = DateTime.UtcNow,
|
||||
Etag = info.Etag
|
||||
ExternalEtag = info.Etag
|
||||
};
|
||||
}
|
||||
|
||||
@@ -621,7 +619,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
item.EpisodeTitle = info.EpisodeTitle;
|
||||
item.ExternalId = info.Id;
|
||||
item.Genres = info.Genres;
|
||||
item.HasProviderImage = info.HasImage;
|
||||
item.IsHD = info.IsHD;
|
||||
item.IsKids = info.IsKids;
|
||||
item.IsLive = info.IsLive;
|
||||
@@ -634,8 +631,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
item.Name = info.Name;
|
||||
item.OfficialRating = item.OfficialRating ?? info.OfficialRating;
|
||||
item.Overview = item.Overview ?? info.Overview;
|
||||
item.ProviderImagePath = info.ImagePath;
|
||||
item.ProviderImageUrl = info.ImageUrl;
|
||||
item.ExternalImagePath = string.IsNullOrWhiteSpace(info.ImagePath) ? info.ImageUrl : info.ImagePath;
|
||||
item.RunTimeTicks = (info.EndDate - info.StartDate).Ticks;
|
||||
item.StartDate = info.StartDate;
|
||||
item.HomePageUrl = info.HomePageUrl;
|
||||
@@ -657,11 +653,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
else
|
||||
{
|
||||
// Increment this whenver some internal change deems it necessary
|
||||
var etag = info.Etag + "2";
|
||||
var etag = info.Etag + "4";
|
||||
|
||||
if (!string.Equals(etag, item.Etag, StringComparison.OrdinalIgnoreCase))
|
||||
if (!string.Equals(etag, item.ExternalEtag, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
item.Etag = etag;
|
||||
item.ExternalEtag = etag;
|
||||
await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
@@ -718,13 +714,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
recording.ExternalId = info.Id;
|
||||
|
||||
recording.ProgramId = _tvDtoService.GetInternalProgramId(serviceName, info.ProgramId).ToString("N");
|
||||
recording.Audio = info.Audio;
|
||||
recording.ChannelType = info.ChannelType;
|
||||
recording.EndDate = info.EndDate;
|
||||
recording.EpisodeTitle = info.EpisodeTitle;
|
||||
recording.ProviderImagePath = info.ImagePath;
|
||||
recording.ProviderImageUrl = info.ImageUrl;
|
||||
recording.ExternalImagePath = string.IsNullOrWhiteSpace(info.ImagePath) ? info.ImageUrl : info.ImagePath;
|
||||
recording.IsHD = info.IsHD;
|
||||
recording.IsKids = info.IsKids;
|
||||
recording.IsLive = info.IsLive;
|
||||
@@ -1467,7 +1460,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
dto.RecordingStatus = info.Status;
|
||||
dto.IsRepeat = info.IsRepeat;
|
||||
dto.EpisodeTitle = info.EpisodeTitle;
|
||||
dto.ChannelType = info.ChannelType;
|
||||
dto.Audio = info.Audio;
|
||||
dto.IsHD = info.IsHD;
|
||||
dto.IsMovie = info.IsMovie;
|
||||
@@ -1504,8 +1496,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
dto.CompletionPercentage = pct;
|
||||
}
|
||||
|
||||
dto.ProgramId = info.ProgramId;
|
||||
|
||||
if (channel != null)
|
||||
{
|
||||
dto.ChannelName = channel.Name;
|
||||
@@ -1792,7 +1782,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
EndDate = program.EndDate ?? DateTime.MinValue,
|
||||
EpisodeTitle = program.EpisodeTitle,
|
||||
Genres = program.Genres,
|
||||
HasImage = program.HasProviderImage,
|
||||
Id = program.ExternalId,
|
||||
IsHD = program.IsHD,
|
||||
IsKids = program.IsKids,
|
||||
@@ -1806,8 +1795,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
OriginalAirDate = program.PremiereDate,
|
||||
Overview = program.Overview,
|
||||
StartDate = program.StartDate,
|
||||
ImagePath = program.ProviderImagePath,
|
||||
ImageUrl = program.ProviderImageUrl,
|
||||
ImagePath = program.ExternalImagePath,
|
||||
Name = program.Name,
|
||||
OfficialRating = program.OfficialRating
|
||||
};
|
||||
|
||||
@@ -36,33 +36,36 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
var imageResponse = new DynamicImageResponse();
|
||||
|
||||
if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath))
|
||||
if (!string.IsNullOrEmpty(liveTvItem.ExternalImagePath))
|
||||
{
|
||||
imageResponse.Path = liveTvItem.ProviderImagePath;
|
||||
imageResponse.HasImage = true;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl))
|
||||
{
|
||||
var options = new HttpRequestOptions
|
||||
if (liveTvItem.ExternalImagePath.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
CancellationToken = cancellationToken,
|
||||
Url = liveTvItem.ProviderImageUrl
|
||||
};
|
||||
var options = new HttpRequestOptions
|
||||
{
|
||||
CancellationToken = cancellationToken,
|
||||
Url = liveTvItem.ExternalImagePath
|
||||
};
|
||||
|
||||
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
|
||||
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
|
||||
|
||||
if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
imageResponse.HasImage = true;
|
||||
imageResponse.Stream = response.Content;
|
||||
imageResponse.SetFormatFromMimeType(response.ContentType);
|
||||
if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
imageResponse.HasImage = true;
|
||||
imageResponse.Stream = response.Content;
|
||||
imageResponse.SetFormatFromMimeType(response.ContentType);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Error("Provider did not return an image content type.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Error("Provider did not return an image content type.");
|
||||
imageResponse.Path = liveTvItem.ExternalImagePath;
|
||||
imageResponse.HasImage = true;
|
||||
}
|
||||
}
|
||||
else if (liveTvItem.HasProviderImage ?? true)
|
||||
else
|
||||
{
|
||||
var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
@@ -115,7 +118,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
if (liveTvItem != null)
|
||||
{
|
||||
return !liveTvItem.HasImage(ImageType.Primary) && (liveTvItem.HasProviderImage ?? true);
|
||||
return !liveTvItem.HasImage(ImageType.Primary);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -36,30 +36,33 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
var imageResponse = new DynamicImageResponse();
|
||||
|
||||
if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath))
|
||||
if (!string.IsNullOrEmpty(liveTvItem.ExternalImagePath))
|
||||
{
|
||||
imageResponse.Path = liveTvItem.ProviderImagePath;
|
||||
imageResponse.HasImage = true;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl))
|
||||
{
|
||||
var options = new HttpRequestOptions
|
||||
if (liveTvItem.ExternalImagePath.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
CancellationToken = cancellationToken,
|
||||
Url = liveTvItem.ProviderImageUrl
|
||||
};
|
||||
var options = new HttpRequestOptions
|
||||
{
|
||||
CancellationToken = cancellationToken,
|
||||
Url = liveTvItem.ExternalImagePath
|
||||
};
|
||||
|
||||
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
|
||||
var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
|
||||
|
||||
if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
imageResponse.HasImage = true;
|
||||
imageResponse.Stream = response.Content;
|
||||
imageResponse.SetFormatFromMimeType(response.ContentType);
|
||||
if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
imageResponse.HasImage = true;
|
||||
imageResponse.Stream = response.Content;
|
||||
imageResponse.SetFormatFromMimeType(response.ContentType);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Error("Provider did not return an image content type.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Error("Provider did not return an image content type.");
|
||||
imageResponse.Path = liveTvItem.ExternalImagePath;
|
||||
imageResponse.HasImage = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -109,7 +112,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
if (liveTvItem != null)
|
||||
{
|
||||
return !liveTvItem.HasImage(ImageType.Primary) && (!string.IsNullOrWhiteSpace(liveTvItem.ProviderImagePath) || !string.IsNullOrWhiteSpace(liveTvItem.ProviderImageUrl));
|
||||
return !liveTvItem.HasImage(ImageType.Primary);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -224,7 +224,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
{
|
||||
return new ITaskTrigger[]
|
||||
{
|
||||
new IntervalTrigger{ Interval = TimeSpan.FromHours(6)}
|
||||
new IntervalTrigger{ Interval = TimeSpan.FromHours(24)}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Controller.Channels;
|
||||
|
||||
namespace MediaBrowser.Server.Implementations.Persistence
|
||||
{
|
||||
@@ -72,7 +73,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
private IDbCommand _deletePeopleCommand;
|
||||
private IDbCommand _savePersonCommand;
|
||||
|
||||
private const int LatestSchemaVersion = 11;
|
||||
private const int LatestSchemaVersion = 13;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
|
||||
@@ -187,7 +188,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
|
||||
_connection.AddColumn(_logger, "TypedBaseItems", "PreferredMetadataLanguage", "Text");
|
||||
_connection.AddColumn(_logger, "TypedBaseItems", "PreferredMetadataCountryCode", "Text");
|
||||
|
||||
_connection.AddColumn(_logger, "TypedBaseItems", "IsHD", "BIT");
|
||||
_connection.AddColumn(_logger, "TypedBaseItems", "ExternalEtag", "Text");
|
||||
_connection.AddColumn(_logger, "TypedBaseItems", "ExternalImagePath", "Text");
|
||||
|
||||
PrepareStatements();
|
||||
|
||||
_mediaStreamsRepository.Initialize();
|
||||
@@ -221,7 +225,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
"IndexNumber",
|
||||
"IsLocked",
|
||||
"PreferredMetadataLanguage",
|
||||
"PreferredMetadataCountryCode"
|
||||
"PreferredMetadataCountryCode",
|
||||
"IsHD",
|
||||
"ExternalEtag",
|
||||
"ExternalImagePath"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
@@ -274,7 +281,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
"IsOffline",
|
||||
"LocationType",
|
||||
"PreferredMetadataLanguage",
|
||||
"PreferredMetadataCountryCode"
|
||||
"PreferredMetadataCountryCode",
|
||||
"IsHD",
|
||||
"ExternalEtag",
|
||||
"ExternalImagePath"
|
||||
};
|
||||
_saveItemCommand = _connection.CreateCommand();
|
||||
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
|
||||
@@ -460,7 +470,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
|
||||
_saveItemCommand.GetParameter(index++).Value = item.PreferredMetadataLanguage;
|
||||
_saveItemCommand.GetParameter(index++).Value = item.PreferredMetadataCountryCode;
|
||||
|
||||
_saveItemCommand.GetParameter(index++).Value = item.IsHD;
|
||||
_saveItemCommand.GetParameter(index++).Value = item.ExternalEtag;
|
||||
_saveItemCommand.GetParameter(index++).Value = item.ExternalImagePath;
|
||||
|
||||
_saveItemCommand.Transaction = transaction;
|
||||
|
||||
_saveItemCommand.ExecuteNonQuery();
|
||||
@@ -667,6 +680,21 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
item.PreferredMetadataCountryCode = reader.GetString(20);
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(21))
|
||||
{
|
||||
item.IsHD = reader.GetBoolean(21);
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(22))
|
||||
{
|
||||
item.ExternalEtag = reader.GetString(22);
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(23))
|
||||
{
|
||||
item.ExternalImagePath = reader.GetString(23);
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
@@ -1394,7 +1422,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
typeof(UserRootFolder),
|
||||
typeof(UserView),
|
||||
typeof(Video),
|
||||
typeof(Year)
|
||||
typeof(Year),
|
||||
typeof(Channel)
|
||||
};
|
||||
|
||||
private static Dictionary<string, string[]> GetTypeMapDictionary()
|
||||
|
||||
Reference in New Issue
Block a user