@ -1,4 +1,5 @@
using MediaBrowser.Common.IO ;
using System.IO ;
using MediaBrowser.Common.IO ;
using MediaBrowser.Common.Progress ;
using MediaBrowser.Controller ;
using MediaBrowser.Controller.Sync ;
@ -9,7 +10,6 @@ using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.Sync ;
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
using System.Security.Cryptography ;
using System.Text ;
@ -152,7 +152,7 @@ namespace MediaBrowser.Server.Implementations.Sync
try
{
var sendFileResult = await SendFile ( provider , internalSyncJobItem . OutputPath , localItem , target , cancellationToken ) . ConfigureAwait ( false ) ;
var sendFileResult = await SendFile ( provider , internalSyncJobItem . OutputPath , localItem .LocalPath , target , cancellationToken ) . ConfigureAwait ( false ) ;
if ( localItem . Item . MediaSources ! = null )
{
@ -173,10 +173,6 @@ namespace MediaBrowser.Server.Implementations.Sync
var mediaSource = localItem . Item . MediaSources . FirstOrDefault ( ) ;
if ( mediaSource ! = null )
{
mediaSource . Path = sendFileResult . Path ;
mediaSource . Protocol = sendFileResult . Protocol ;
mediaSource . SupportsTranscoding = false ;
await SendSubtitles ( localItem , mediaSource , provider , dataProvider , target , cancellationToken ) . ConfigureAwait ( false ) ;
}
}
@ -216,7 +212,8 @@ namespace MediaBrowser.Server.Implementations.Sync
{
try
{
var sendFileResult = await SendFile ( provider , mediaStream . Path , localItem , target , cancellationToken ) . ConfigureAwait ( false ) ;
var remotePath = GetRemoteSubtitlePath ( localItem , mediaStream , provider , target ) ;
var sendFileResult = await SendFile ( provider , mediaStream . Path , remotePath , target , cancellationToken ) . ConfigureAwait ( false ) ;
mediaStream . Path = sendFileResult . Path ;
requiresSave = true ;
@ -240,6 +237,38 @@ namespace MediaBrowser.Server.Implementations.Sync
}
}
private string GetRemoteSubtitlePath ( LocalItem item , MediaStream stream , IServerSyncProvider provider , SyncTarget target )
{
var path = item . LocalPath ;
var filename = GetSubtitleSaveFileName ( item , stream . Language , stream . IsForced ) + "." + stream . Codec . ToLower ( ) ;
var parentPath = provider . GetParentDirectoryPath ( path , target ) ;
path = Path . Combine ( parentPath , filename ) ;
return path ;
}
private string GetSubtitleSaveFileName ( LocalItem item , string language , bool isForced )
{
var path = item . LocalPath ;
var name = Path . GetFileNameWithoutExtension ( path ) ;
if ( ! string . IsNullOrWhiteSpace ( language ) )
{
name + = "." + language . ToLower ( ) ;
}
if ( isForced )
{
name + = ".foreign" ;
}
return name ;
}
private async Task RemoveItem ( IServerSyncProvider provider ,
ISyncDataProvider dataProvider ,
string serverId ,
@ -264,12 +293,12 @@ namespace MediaBrowser.Server.Implementations.Sync
}
}
private async Task < SendFileResult > SendFile ( IServerSyncProvider provider , string inputPath , LocalItem item , SyncTarget target , CancellationToken cancellationToken )
private async Task < SendFileResult > SendFile ( IServerSyncProvider provider , string inputPath , string remotePath , SyncTarget target , CancellationToken cancellationToken )
{
_logger . Debug ( "Sending {0} to {1}. Remote path: {2}" , inputPath , provider . Name , item. Local Path) ;
_logger . Debug ( "Sending {0} to {1}. Remote path: {2}" , inputPath , provider . Name , remote Path) ;
using ( var stream = _fileSystem . GetFileStream ( inputPath , FileMode . Open , FileAccess . Read , FileShare . Read , true ) )
{
return await provider . SendFile ( stream , item. Local Path, target , new Progress < double > ( ) , cancellationToken ) . ConfigureAwait ( false ) ;
return await provider . SendFile ( stream , remote Path, target , new Progress < double > ( ) , cancellationToken ) . ConfigureAwait ( false ) ;
}
}