add latest translations
This commit is contained in:
parent
0200911afc
commit
2a77500c61
|
@ -479,12 +479,11 @@ namespace MediaBrowser.Api.Library
|
|||
/// Posts the specified request.
|
||||
/// </summary>
|
||||
/// <param name="request">The request.</param>
|
||||
public async void Post(RefreshLibrary request)
|
||||
public void Post(RefreshLibrary request)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _libraryManager.ValidateMediaLibrary(new Progress<double>(), CancellationToken.None)
|
||||
.ConfigureAwait(false);
|
||||
_libraryManager.ValidateMediaLibrary(new Progress<double>(), CancellationToken.None);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -513,7 +512,7 @@ namespace MediaBrowser.Api.Library
|
|||
{
|
||||
throw new UnauthorizedAccessException("This operation requires a logged in user with delete access.");
|
||||
}
|
||||
|
||||
|
||||
return _libraryManager.DeleteItem(item);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using System.Text;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Dlna;
|
||||
|
@ -153,7 +154,7 @@ namespace MediaBrowser.Api.Playback
|
|||
|
||||
if (time.HasValue)
|
||||
{
|
||||
var seconds = TimeSpan.FromTicks(time.Value).TotalSeconds - FastSeekOffsetSeconds;
|
||||
var seconds = TimeSpan.FromTicks(time.Value).TotalSeconds;
|
||||
|
||||
if (seconds > 0)
|
||||
{
|
||||
|
@ -172,16 +173,6 @@ namespace MediaBrowser.Api.Playback
|
|||
/// <value>The slow seek command line parameter.</value>
|
||||
protected string GetSlowSeekCommandLineParameter(StreamRequest request)
|
||||
{
|
||||
var time = request.StartTimeTicks;
|
||||
|
||||
if (time.HasValue)
|
||||
{
|
||||
if (TimeSpan.FromTicks(time.Value).TotalSeconds - FastSeekOffsetSeconds > 0)
|
||||
{
|
||||
return string.Format(" -ss {0}", FastSeekOffsetSeconds.ToString(UsCulture));
|
||||
}
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
|
@ -922,7 +913,8 @@ namespace MediaBrowser.Api.Playback
|
|||
|
||||
ApiEntryPoint.Instance.OnTranscodeBeginning(outputPath, TranscodingJobType, process, state.IsInputVideo, state.Request.StartTimeTicks, state.MediaPath, state.Request.DeviceId);
|
||||
|
||||
Logger.Info(process.StartInfo.FileName + " " + process.StartInfo.Arguments);
|
||||
var commandLineLogMessage = process.StartInfo.FileName + " " + process.StartInfo.Arguments;
|
||||
Logger.Info(commandLineLogMessage);
|
||||
|
||||
var logFilePath = Path.Combine(ServerConfigurationManager.ApplicationPaths.LogDirectoryPath, "ffmpeg-" + Guid.NewGuid() + ".txt");
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(logFilePath));
|
||||
|
@ -930,6 +922,9 @@ namespace MediaBrowser.Api.Playback
|
|||
// FFMpeg writes debug/error info to stderr. This is useful when debugging so let's put it in the log directory.
|
||||
state.LogFileStream = FileSystem.GetFileStream(logFilePath, FileMode.Create, FileAccess.Write, FileShare.Read, true);
|
||||
|
||||
var commandLineLogMessageBytes = Encoding.UTF8.GetBytes(commandLineLogMessage + Environment.NewLine + Environment.NewLine);
|
||||
await state.LogFileStream.WriteAsync(commandLineLogMessageBytes, 0, commandLineLogMessageBytes.Length).ConfigureAwait(false);
|
||||
|
||||
process.Exited += (sender, args) => OnFfMpegProcessExited(process, state);
|
||||
|
||||
try
|
||||
|
@ -1149,7 +1144,7 @@ namespace MediaBrowser.Api.Playback
|
|||
return state.VideoRequest.Framerate.Value;
|
||||
}
|
||||
|
||||
var maxrate = state.VideoRequest.MaxFramerate ?? 23.976;
|
||||
var maxrate = state.VideoRequest.MaxFramerate ?? 23.97602;
|
||||
|
||||
if (state.VideoStream != null)
|
||||
{
|
||||
|
@ -1628,7 +1623,7 @@ namespace MediaBrowser.Api.Playback
|
|||
}
|
||||
|
||||
var profile = string.IsNullOrWhiteSpace(state.Request.DeviceProfileId) ?
|
||||
DlnaManager.GetProfile(headers) :
|
||||
null :
|
||||
DlnaManager.GetProfile(state.Request.DeviceProfileId);
|
||||
|
||||
if (profile == null)
|
||||
|
@ -1686,7 +1681,6 @@ namespace MediaBrowser.Api.Playback
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Adds the dlna headers.
|
||||
/// </summary>
|
||||
|
|
|
@ -11,7 +11,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks
|
|||
/// <summary>
|
||||
/// Plugin Update Task
|
||||
/// </summary>
|
||||
public class SystemUpdateTask : IScheduledTask
|
||||
public class SystemUpdateTask : IScheduledTask, IHasKey
|
||||
{
|
||||
/// <summary>
|
||||
/// The _app host
|
||||
|
@ -140,5 +140,10 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks
|
|||
{
|
||||
get { return "Application"; }
|
||||
}
|
||||
|
||||
public string Key
|
||||
{
|
||||
get { return "SystemUpdateTask"; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,4 +56,9 @@ namespace MediaBrowser.Common.ScheduledTasks
|
|||
/// <value><c>true</c> if this instance is enabled; otherwise, <c>false</c>.</value>
|
||||
bool IsEnabled { get; }
|
||||
}
|
||||
|
||||
public interface IHasKey
|
||||
{
|
||||
string Key { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,14 @@ namespace MediaBrowser.Common.ScheduledTasks
|
|||
isHidden = configurableTask.IsHidden;
|
||||
}
|
||||
|
||||
string key = null;
|
||||
|
||||
var hasKey = task.ScheduledTask as IHasKey;
|
||||
|
||||
if (hasKey != null)
|
||||
{
|
||||
key = hasKey.Key;
|
||||
}
|
||||
return new TaskInfo
|
||||
{
|
||||
Name = task.Name,
|
||||
|
@ -35,7 +43,8 @@ namespace MediaBrowser.Common.ScheduledTasks
|
|||
Triggers = task.Triggers.Select(GetTriggerInfo).ToList(),
|
||||
Description = task.Description,
|
||||
Category = task.Category,
|
||||
IsHidden = isHidden
|
||||
IsHidden = isHidden,
|
||||
Key = key
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -199,7 +199,14 @@ namespace MediaBrowser.Dlna
|
|||
throw new ArgumentNullException("headers");
|
||||
}
|
||||
|
||||
return GetProfiles().FirstOrDefault(i => i.Identification != null && IsMatch(headers, i.Identification));
|
||||
var profile = GetProfiles().FirstOrDefault(i => i.Identification != null && IsMatch(headers, i.Identification));
|
||||
|
||||
if (profile != null)
|
||||
{
|
||||
_logger.Debug("Found matching device profile: {0}", profile.Name);
|
||||
}
|
||||
|
||||
return profile;
|
||||
}
|
||||
|
||||
private bool IsMatch(IDictionary<string, string> headers, DeviceIdentification profileInfo)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System.Xml.Serialization;
|
||||
using MediaBrowser.Controller.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace MediaBrowser.Dlna.Profiles
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System.Xml.Serialization;
|
||||
using MediaBrowser.Controller.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace MediaBrowser.Dlna.Profiles
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System.Xml.Serialization;
|
||||
using MediaBrowser.Controller.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace MediaBrowser.Dlna.Profiles
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System.Xml.Serialization;
|
||||
using MediaBrowser.Controller.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace MediaBrowser.Dlna.Profiles
|
||||
{
|
||||
|
|
|
@ -47,8 +47,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||
AudioCodec = "wmav2",
|
||||
Type = DlnaProfileType.Video,
|
||||
TranscodeSeekInfo = TranscodeSeekInfo.Bytes,
|
||||
EstimateContentLength = true,
|
||||
VideoProfile= "baseline"
|
||||
EstimateContentLength = true
|
||||
},
|
||||
new TranscodingProfile
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System.Xml.Serialization;
|
||||
using MediaBrowser.Controller.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using MediaBrowser.Model.Dlna;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace MediaBrowser.Dlna.Profiles
|
||||
{
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
</DirectPlayProfiles>
|
||||
<TranscodingProfiles>
|
||||
<TranscodingProfile container="mp3" type="Audio" audioCodec="mp3" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto" />
|
||||
<TranscodingProfile container="asf" type="Video" videoCodec="wmv2" audioCodec="wmav2" estimateContentLength="true" enableMpegtsM2TsMode="false" transcodeSeekInfo="Bytes" videoProfile="baseline" />
|
||||
<TranscodingProfile container="asf" type="Video" videoCodec="wmv2" audioCodec="wmav2" estimateContentLength="true" enableMpegtsM2TsMode="false" transcodeSeekInfo="Bytes" />
|
||||
<TranscodingProfile container="jpeg" type="Photo" estimateContentLength="false" enableMpegtsM2TsMode="false" transcodeSeekInfo="Auto" />
|
||||
</TranscodingProfiles>
|
||||
<ContainerProfiles>
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace MediaBrowser.Model.Dlna
|
|||
public StreamInfo BuildAudioItem(AudioOptions options)
|
||||
{
|
||||
ValidateAudioInput(options);
|
||||
|
||||
|
||||
var mediaSources = options.MediaSources;
|
||||
|
||||
// If the client wants a specific media soure, filter now
|
||||
|
@ -201,7 +201,7 @@ namespace MediaBrowser.Model.Dlna
|
|||
return false;
|
||||
}
|
||||
|
||||
if (options.AudioStreamIndex.HasValue &&
|
||||
if (options.AudioStreamIndex.HasValue &&
|
||||
item.MediaStreams.Count(i => i.Type == MediaStreamType.Audio) > 1)
|
||||
{
|
||||
return false;
|
||||
|
@ -503,10 +503,40 @@ namespace MediaBrowser.Model.Dlna
|
|||
return videoStream == null ? null : videoStream.Width;
|
||||
case ProfileConditionValue.VideoLevel:
|
||||
return videoStream == null ? null : videoStream.Level;
|
||||
case ProfileConditionValue.VideoBitDepth:
|
||||
return videoStream == null ? null : GetBitDepth(videoStream);
|
||||
default:
|
||||
throw new InvalidOperationException("Unexpected Property");
|
||||
}
|
||||
}
|
||||
|
||||
private int? GetBitDepth(MediaStream videoStream)
|
||||
{
|
||||
var eightBit = new List<string>
|
||||
{
|
||||
"yuv420p",
|
||||
"yuv411p",
|
||||
"yuvj420p",
|
||||
"uyyvyy411",
|
||||
"nv12",
|
||||
"nv21",
|
||||
"rgb444le",
|
||||
"rgb444be",
|
||||
"bgr444le",
|
||||
"bgr444be",
|
||||
"yuvj411p"
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(videoStream.PixelFormat))
|
||||
{
|
||||
if (eightBit.Contains(videoStream.PixelFormat, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -62,6 +62,12 @@ namespace MediaBrowser.Model.Tasks
|
|||
/// <value><c>true</c> if this instance is hidden; otherwise, <c>false</c>.</value>
|
||||
public bool IsHidden { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the key.
|
||||
/// </summary>
|
||||
/// <value>The key.</value>
|
||||
public string Key { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TaskInfo"/> class.
|
||||
/// </summary>
|
||||
|
|
|
@ -63,6 +63,7 @@ namespace MediaBrowser.Server.Implementations.Configuration
|
|||
{
|
||||
UpdateItemsByNamePath();
|
||||
UpdateTranscodingTempPath();
|
||||
UpdateMetadataPath();
|
||||
|
||||
base.OnConfigurationUpdated();
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"SettingsSaved":"Param\u00e8tres sauvegard\u00e9s.","AddUser":"Ajouter utilisateur","Users":"Utilisateur","Delete":"Supprimer","Administrator":"Administrateur","Password":"Mot de passe","DeleteImage":"Supprimer Image","DeleteImageConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer l'image?","FileReadCancelled":"La lecture du fichier a \u00e9t\u00e9 annul\u00e9e.","FileNotFound":"Fichier non trouv\u00e9","FileReadError":"Un erreur est survenue pendant la lecture du fichier.","DeleteUser":"Supprimer utilisateur","DeleteUserConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer {0}?","PasswordResetHeader":"R\u00e9initialisation du mot de passe","PasswordResetComplete":"Le mot de passe a \u00e9t\u00e9 r\u00e9initialis\u00e9.","PasswordResetConfirmation":"\u00cates-vous s\u00fbr de vouloir r\u00e9initialiser le mot de passe?","PasswordSaved":"Mot de passe sauvegard\u00e9.","PasswordMatchError":"Mot de passe et confirmation de mot de passe doivent correspondre.","OptionOff":"Off","OptionOn":"On","OptionRelease":"Lancement","OptionBeta":"Beta","OptionDev":"Dev","UninstallPluginHeader":"D\u00e9sinstaller Plug-in","UninstallPluginConfirmation":"\u00cates-vous s\u00fbr de vouloir d\u00e9sinstaller {0}?","NoPluginConfigurationMessage":"Ce module d'extension n'a rien \u00e0 configurer.","NoPluginsInstalledMessage":"Vous n'avez aucun module d'extension install\u00e9.","BrowsePluginCatalogMessage":"Explorer notre catalogue de modules d'extension pour voir ce qui est disponible."}
|
||||
{"SettingsSaved":"Param\u00e8tres sauvegard\u00e9s.","AddUser":"Ajouter utilisateur","Users":"Utilisateurs","Delete":"Supprimer","Administrator":"Administrateur","Password":"Mot de passe","DeleteImage":"Supprimer Image","DeleteImageConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer l'image?","FileReadCancelled":"La lecture du fichier a \u00e9t\u00e9 annul\u00e9e.","FileNotFound":"Fichier non trouv\u00e9","FileReadError":"Un erreur est survenue pendant la lecture du fichier.","DeleteUser":"Supprimer utilisateur","DeleteUserConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer {0}?","PasswordResetHeader":"R\u00e9initialisation du mot de passe","PasswordResetComplete":"Le mot de passe a \u00e9t\u00e9 r\u00e9initialis\u00e9.","PasswordResetConfirmation":"\u00cates-vous s\u00fbr de vouloir r\u00e9initialiser le mot de passe?","PasswordSaved":"Mot de passe sauvegard\u00e9.","PasswordMatchError":"Le mot de passe et sa confirmation doivent correspondre.","OptionOff":"Off","OptionOn":"On","OptionRelease":"Lancement","OptionBeta":"Beta","OptionDev":"Dev","UninstallPluginHeader":"D\u00e9sinstaller Plug-in","UninstallPluginConfirmation":"\u00cates-vous s\u00fbr de vouloir d\u00e9sinstaller {0}?","NoPluginConfigurationMessage":"Ce module d'extension n'a rien \u00e0 configurer.","NoPluginsInstalledMessage":"Vous n'avez aucun module d'extension install\u00e9.","BrowsePluginCatalogMessage":"Explorer notre catalogue de Plug-ins disponibles."}
|
|
@ -1 +1 @@
|
|||
{"SettingsSaved":"Instellingen opgeslagen.","AddUser":"Gebruiker toevoegen","Users":"Gebruikers","Delete":"Verwijderen","Administrator":"Beheerder","Password":"Wachtwoord","DeleteImage":"Verwijder afbeelding","DeleteImageConfirmation":"Weet je zeker dat je deze afbeelding wilt verwijderen?","FileReadCancelled":"Het lezen van het bestand is geannuleerd","FileNotFound":"Bestand niet gevonden.","FileReadError":"Er is een fout opgetreden bij het lezen van het bestand.","DeleteUser":"Verwijder gebruiker","DeleteUserConfirmation":"Weet je zeker dat je {0} wilt verwijderen?","PasswordResetHeader":"Wachtwoord opnieuw instellen","PasswordResetComplete":"Het wachtwoord is opnieuw ingesteld.","PasswordResetConfirmation":"Weet je zeker dat je het wachtwoord opnieuw in wilt stellen?","PasswordSaved":"Wachtwoord opgeslagen.","PasswordMatchError":"Wachtwoord en wachtwoord bevestiging moeten hetzelfde zijn.","OptionOff":"Uit","OptionOn":"Aan","OptionRelease":"Release","OptionBeta":"Beta","OptionDev":"Dev","UninstallPluginHeader":"Deinstalleer Plugin","UninstallPluginConfirmation":"Weet u zeker dat u {0} wilt deinstalleren?","NoPluginConfigurationMessage":"Deze plugin heeft niets in te stellen","NoPluginsInstalledMessage":"U heeft geen plugins geinstalleerd","BrowsePluginCatalogMessage":"Blader door de Plugincatalogus voor beschikbare plugins."}
|
||||
{"SettingsSaved":"Instellingen opgeslagen.","AddUser":"Gebruiker toevoegen","Users":"Gebruikers","Delete":"Verwijderen","Administrator":"Beheerder","Password":"Wachtwoord","DeleteImage":"Verwijder afbeelding","DeleteImageConfirmation":"Weet je zeker dat je deze afbeelding wilt verwijderen?","FileReadCancelled":"Het lezen van het bestand is geannuleerd","FileNotFound":"Bestand niet gevonden.","FileReadError":"Er is een fout opgetreden bij het lezen van het bestand.","DeleteUser":"Verwijder gebruiker","DeleteUserConfirmation":"Weet je zeker dat je {0} wilt verwijderen?","PasswordResetHeader":"Wachtwoord opnieuw instellen","PasswordResetComplete":"Het wachtwoord is opnieuw ingesteld.","PasswordResetConfirmation":"Weet je zeker dat je het wachtwoord opnieuw in wilt stellen?","PasswordSaved":"Wachtwoord opgeslagen.","PasswordMatchError":"Wachtwoord en wachtwoord bevestiging moeten hetzelfde zijn.","OptionOff":"Uit","OptionOn":"Aan","OptionRelease":"Release","OptionBeta":"Beta","OptionDev":"Ontwikkeling","UninstallPluginHeader":"Deinstalleer Plugin","UninstallPluginConfirmation":"Weet u zeker dat u {0} wilt deinstalleren?","NoPluginConfigurationMessage":"Deze plugin heeft niets in te stellen","NoPluginsInstalledMessage":"U heeft geen plugins geinstalleerd","BrowsePluginCatalogMessage":"Blader door de Plugincatalogus voor beschikbare plugins."}
|
|
@ -1 +1 @@
|
|||
{"SettingsSaved":"Configura\u00e7\u00f5es guardadas.","AddUser":"Adicionar Utilizador","Users":"Utilizadores","Delete":"Apagar","Administrator":"Administrador","Password":"Senha","DeleteImage":"Apagar Imagem","DeleteImageConfirmation":"Tem a certeza que pretende apagar a imagem?","FileReadCancelled":"A leitura do ficheiro foi cancelada.","FileNotFound":"Ficheiro n\u00e3o encontrado","FileReadError":"Ocorreu um erro ao ler o ficheiro.","DeleteUser":"Apagar Utilizador","DeleteUserConfirmation":"Tem a certeza que pretende apagar {0}?","PasswordResetHeader":"Redefinir Senha","PasswordResetComplete":"A senha foi redefinida.","PasswordResetConfirmation":"Tem a certeza que deseja redefinir a senha?","PasswordSaved":"Senha guardada.","PasswordMatchError":"A senha e a confirma\u00e7\u00e3o da senha devem coincidir.","OptionOff":"Desligado","OptionOn":"Ligado","OptionRelease":"Final","OptionBeta":"Beta","OptionDev":"Dev","UninstallPluginHeader":"Desinstalar extens\u00e3o","UninstallPluginConfirmation":"Tem a certeza que pretende desinstalar {0}?","NoPluginConfigurationMessage":"Esta extens\u00e3o n\u00e3o \u00e9 configur\u00e1vel.","NoPluginsInstalledMessage":"N\u00e3o tem extens\u00f5es instaladas.","BrowsePluginCatalogMessage":"Navegue o nosso cat\u00e1logo de extens\u00f5es, para ver as extens\u00f5es dispon\u00edveis."}
|
||||
{"SettingsSaved":"Configura\u00e7\u00f5es guardadas.","AddUser":"Adicionar Utilizador","Users":"Utilizadores","Delete":"Apagar","Administrator":"Administrador","Password":"Senha","DeleteImage":"Apagar Imagem","DeleteImageConfirmation":"Tem a certeza que deseja apagar a imagem?","FileReadCancelled":"A leitura do ficheiro foi cancelada.","FileNotFound":"Ficheiro n\u00e3o encontrado.","FileReadError":"Ocorreu um erro ao ler o ficheiro.","DeleteUser":"Apagar Utilizador","DeleteUserConfirmation":"Tem a certeza que deseja apagar {0}?","PasswordResetHeader":"Redefinir Senha","PasswordResetComplete":"A senha foi redefinida.","PasswordResetConfirmation":"Tem a certeza que deseja redefinir a senha?","PasswordSaved":"Senha guardada.","PasswordMatchError":"A senha e a confirma\u00e7\u00e3o da senha devem coincidir.","OptionOff":"Desligado","OptionOn":"Ligado","OptionRelease":"Final","OptionBeta":"Beta","OptionDev":"Dev","UninstallPluginHeader":"Desinstalar extens\u00e3o","UninstallPluginConfirmation":"Tem a certeza que deseja desinstalar {0}?","NoPluginConfigurationMessage":"Esta extens\u00e3o n\u00e3o \u00e9 configur\u00e1vel.","NoPluginsInstalledMessage":"N\u00e3o tem extens\u00f5es instaladas.","BrowsePluginCatalogMessage":"Navegue o nosso cat\u00e1logo de extens\u00f5es, para ver as extens\u00f5es dispon\u00edveis."}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -128,10 +128,12 @@
|
|||
"OptionRevenue": "Revenue",
|
||||
"OptionPoster": "Poster",
|
||||
"OptionTimeline": "Timeline",
|
||||
"OptionThumb": "Thumb",
|
||||
"OptionBanner": "Banner",
|
||||
"OptionCriticRating": "Critic Rating",
|
||||
"OptionVideoBitrate": "Video Bitrate",
|
||||
"OptionResumable": "Resumable",
|
||||
"ScheduledTasksHelp": "Click a task to adjust it's schedule.",
|
||||
"ScheduledTasksHelp": "Click a task to adjust its schedule.",
|
||||
"ScheduledTasksTitle": "ScheduledTasks",
|
||||
"TabMyPlugins": "My Plugins",
|
||||
"TabCatalog": "Catalog",
|
||||
|
@ -144,5 +146,66 @@
|
|||
"HeaderLatestSongs": "Latest Songs",
|
||||
"HeaderRecentlyPlayed": "Recently Played",
|
||||
"HeaderFrequentlyPlayed": "Frequently Played",
|
||||
"DevBuildWarning": "Dev builds are the bleeding edge. Released often, these build have not been tested. The application may crash and entire features may not work at all."
|
||||
"DevBuildWarning": "Dev builds are the bleeding edge. Released often, these build have not been tested. The application may crash and entire features may not work at all.",
|
||||
"LabelVideoType": "Video Type:",
|
||||
"OptionBluray": "Bluray",
|
||||
"OptionDvd": "Dvd",
|
||||
"OptionIso": "Iso",
|
||||
"Option3D": "3D",
|
||||
"LabelFeatures": "Features:",
|
||||
"OptionHasSubtitles": "Subtitles",
|
||||
"OptionHasTrailer": "Trailer",
|
||||
"OptionHasThemeSong": "Theme Song",
|
||||
"OptionHasThemeVideo": "Theme Video",
|
||||
"TabMovies": "Movies",
|
||||
"TabStudios": "Studios",
|
||||
"TabTrailers": "Trailers",
|
||||
"HeaderLatestMovies": "Latest Movies",
|
||||
"HeaderLatestTrailers": "Latest Trailers",
|
||||
"OptionHasSpecialFeatures": "Special Features",
|
||||
"OptionImdbRating": "IMDb Rating",
|
||||
"OptionParentalRating": "Parental Rating",
|
||||
"OptionPremiereDate": "Premiere Date",
|
||||
"TabBasic": "Basic",
|
||||
"TabAdvanced": "Advanced",
|
||||
"HeaderStatus": "Status",
|
||||
"OptionContinuing": "Continuing",
|
||||
"OptionEnded": "Ended",
|
||||
"HeaderAirDays": "Air Days:",
|
||||
"OptionSunday": "Sunday",
|
||||
"OptionMonday": "Monday",
|
||||
"OptionTuesday": "Tuesday",
|
||||
"OptionWednesday": "Wednesday",
|
||||
"OptionThursday": "Thursday",
|
||||
"OptionFriday": "Friday",
|
||||
"OptionSaturday": "Saturday",
|
||||
"HeaderManagement": "Management:",
|
||||
"OptionMissingImdbId": "Missing IMDb Id",
|
||||
"OptionMissingTvdbId": "Missing TheTVDB Id",
|
||||
"OptionMissingOverview": "Missing Overview",
|
||||
"OptionFileMetadataYearMismatch": "File/Metadata Years Mismatched",
|
||||
"TabGeneral": "General",
|
||||
"TitleSupport": "Support",
|
||||
"TabLog": "Log",
|
||||
"TabAbout": "About",
|
||||
"TabSupporterKey": "Supporter Key",
|
||||
"TabBecomeSupporter": "Become a Supporter",
|
||||
"MediaBrowserHasCommunity": "Media Browser has a thriving community of users and contributors.",
|
||||
"CheckoutKnowledgeBase": "Check out our knowledge base to help you get the most out of Media Browser.",
|
||||
"SearchKnowledgeBase": "Search the Knowledge Base",
|
||||
"VisitTheCommunity": "Visit the Community",
|
||||
"VisitMediaBrowserWebsite": "Visit the Media Browser Web Site",
|
||||
"VisitMediaBrowserWebsiteLong": "Visit the Media Browser Web site to catch the latest news and keep up with the developer blog.",
|
||||
"OptionHideUser": "Hide this user from login screens",
|
||||
"OptionDisableUser": "Disable this user",
|
||||
"OptionDisableUserHelp": "If disabled the server will not allow any connections from this user. Existing connections will be abruptly terminated.",
|
||||
"HeaderAdvancedControl": "Advanced Control",
|
||||
"LabelName": "Name:",
|
||||
"OptionAllowUserToManageServer": "Allow this user to manage the server",
|
||||
"HeaderFeatureAccess": "Feature Access",
|
||||
"OptionAllowMediaPlayback": "Allow media playback",
|
||||
"OptionAllowBrowsingLiveTv": "Allow browsing of live tv",
|
||||
"OptionAllowDeleteLibraryContent": "Allow this user to delete library content",
|
||||
"OptionAllowManageLiveTv": "Allow management of live tv recordings",
|
||||
"OptionAllowRemoteControlOthers": "Allow this user to remote control other users"
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,5 @@
|
|||
using MediaBrowser.Controller.Persistence;
|
||||
using System.Text;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
|
@ -20,7 +21,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
|||
private IDbCommand _saveStreamCommand;
|
||||
|
||||
private SqliteShrinkMemoryTimer _shrinkMemoryTimer;
|
||||
|
||||
|
||||
public SqliteMediaStreamsRepository(IDbConnection connection, ILogManager logManager)
|
||||
{
|
||||
_connection = connection;
|
||||
|
@ -39,11 +40,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
|||
|
||||
// Add PixelFormat column
|
||||
|
||||
createTableCommand += "(ItemId GUID, StreamIndex INT, StreamType TEXT, Codec TEXT, Language TEXT, ChannelLayout TEXT, Profile TEXT, AspectRatio TEXT, Path TEXT, IsInterlaced BIT, BitRate INT NULL, Channels INT NULL, SampleRate INT NULL, IsDefault BIT, IsForced BIT, IsExternal BIT, Height INT NULL, Width INT NULL, AverageFrameRate FLOAT NULL, RealFrameRate FLOAT NULL, Level FLOAT NULL, PRIMARY KEY (ItemId, StreamIndex))";
|
||||
createTableCommand += "(ItemId GUID, StreamIndex INT, StreamType TEXT, Codec TEXT, Language TEXT, ChannelLayout TEXT, Profile TEXT, AspectRatio TEXT, Path TEXT, IsInterlaced BIT, BitRate INT NULL, Channels INT NULL, SampleRate INT NULL, IsDefault BIT, IsForced BIT, IsExternal BIT, Height INT NULL, Width INT NULL, AverageFrameRate FLOAT NULL, RealFrameRate FLOAT NULL, Level FLOAT NULL, PixelFormat TEXT, PRIMARY KEY (ItemId, StreamIndex))";
|
||||
|
||||
string[] queries = {
|
||||
|
||||
createTableCommand,
|
||||
|
||||
"create index if not exists idx_mediastreams on mediastreams(ItemId, StreamIndex)",
|
||||
|
||||
//pragmas
|
||||
|
@ -54,11 +56,44 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
|||
|
||||
_connection.RunQueries(queries, _logger);
|
||||
|
||||
AddPixelFormatColumnCommand();
|
||||
|
||||
PrepareStatements();
|
||||
|
||||
_shrinkMemoryTimer = new SqliteShrinkMemoryTimer(_connection, _writeLock, _logger);
|
||||
}
|
||||
|
||||
private void AddPixelFormatColumnCommand()
|
||||
{
|
||||
using (var cmd = _connection.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = "PRAGMA table_info(mediastreams)";
|
||||
|
||||
using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (!reader.IsDBNull(1))
|
||||
{
|
||||
var name = reader.GetString(1);
|
||||
|
||||
if (string.Equals(name, "PixelFormat", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.AppendLine("alter table mediastreams");
|
||||
builder.AppendLine("add column PixelFormat TEXT");
|
||||
|
||||
_connection.RunQueries(new[] { builder.ToString() }, _logger);
|
||||
}
|
||||
|
||||
private readonly string[] _saveColumns =
|
||||
{
|
||||
"ItemId",
|
||||
|
@ -81,7 +116,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
|||
"Width",
|
||||
"AverageFrameRate",
|
||||
"RealFrameRate",
|
||||
"Level"
|
||||
"Level",
|
||||
"PixelFormat"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
@ -240,6 +276,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
|||
item.Level = reader.GetFloat(20);
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(21))
|
||||
{
|
||||
item.PixelFormat = reader.GetString(21);
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
@ -301,7 +342,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
|||
_saveStreamCommand.GetParameter(18).Value = stream.AverageFrameRate;
|
||||
_saveStreamCommand.GetParameter(19).Value = stream.RealFrameRate;
|
||||
_saveStreamCommand.GetParameter(20).Value = stream.Level;
|
||||
|
||||
_saveStreamCommand.GetParameter(21).Value = stream.PixelFormat;
|
||||
|
||||
_saveStreamCommand.Transaction = transaction;
|
||||
_saveStreamCommand.ExecuteNonQuery();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user