|
Server : Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12 System : Windows NT SERVER-PC 10.0 build 26200 (Windows 11) AMD64 User : ServerPC ( 0) PHP Version : 8.2.12 Disable Function : NONE Directory : C:/Users/ServerPC/AppData/Roaming/Emby-Server/system/dashboard-ui/modules/sync/ |
Upload File : |
define(["exports","./../common/servicelocator.js","./../localdatabase/localassetmanager.js"],function(_exports,_servicelocator,_localassetmanager){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var MaxBackdrops=1;function reportTransfer(apiClient,item){return _localassetmanager.default.getItemFileSize(item.LocalPath).then(function(size){return 0<size?apiClient.reportSyncJobItemTransferred(item.SyncJobItemId).then(function(){return item.SyncStatus="synced",console.log("[mediasync] reportSyncJobItemTransferred called for "+item.LocalPath),_servicelocator.itemRepository.updateLibraryItem(item.ServerId,item.Id,item).then(function(){return function(apiClient,libraryItem){var p=Promise.resolve();libraryItem.SeriesId&&(p=p.then(function(){return downloadItem(apiClient,libraryItem.SeriesId)}));libraryItem.SeasonId&&(p=p.then(function(){return downloadItem(apiClient,libraryItem.SeasonId)}));libraryItem.AlbumId&&(p=p.then(function(){return downloadItem(apiClient,libraryItem.AlbumId)}),libraryItem.AlbumId!==libraryItem.ParentId)&&(p=p.then(function(){return downloadItem(apiClient,libraryItem.ParentId)}));return p}(apiClient,item.Item)})},function(error){return console.error("[mediasync] Mediasync error on reportSyncJobItemTransferred",error),item.SyncStatus="error",_servicelocator.itemRepository.updateLibraryItem(item.ServerId,item.Id,item)}):_localassetmanager.default.isDownloadFileInQueue(item.LocalPath).then(function(result){return result?Promise.resolve():(console.log("[mediasync] reportTransfer: Size is 0 and download no longer in queue. Setting item as failed."),item.SyncStatus="error",_servicelocator.itemRepository.updateLibraryItem(item.ServerId,item.Id,item))})},function(error){return console.error("[mediasync] reportTransfer: error on getItemFileSize. Deleting item.",error),_localassetmanager.default.removeLocalItem(item).then(function(){return console.log("[mediasync] reportTransfer: Item deleted."),Promise.resolve()},function(err2){return console.log("[mediasync] reportTransfer: Failed to delete item.",err2),Promise.resolve()})})}function mapToId(userAction){return userAction.Id}function syncData(apiClient){console.log("[mediasync] Begin syncData");return _servicelocator.itemRepository.getLibraryItemsBySyncStatus(apiClient.serverId(),["synced","error"]).then(function(items){items={TargetId:apiClient.deviceId(),LocalItemIds:items.map(function(xitem){return xitem.ItemId})};return apiClient.syncData(items).then(function(result){return function(apiClient,syncDataResult){console.log("[mediasync] Begin afterSyncData");var p=Promise.resolve();syncDataResult.ItemIdsToRemove&&0<syncDataResult.ItemIdsToRemove.length&&syncDataResult.ItemIdsToRemove.forEach(function(itemId){p=p.then(function(){return function(itemId,serverId){return console.log("[mediasync] Begin removeLocalItem"),_servicelocator.itemRepository.getLibraryItem(serverId,itemId).then(function(item){return item?_localassetmanager.default.removeLocalItem(item):Promise.resolve()},function(err2){return console.error("[mediasync] removeLocalItem: Failed: ",err2),Promise.resolve()})}(itemId,apiClient.serverId())})});return(p=p.then(function(){return console.log("[mediasync] Begin removeObsoleteContainerItems"),serverId=apiClient.serverId(),_servicelocator.itemRepository.getAllLibraryItems(serverId).then(function(items){var seriesItems=items.filter(function(item){return"series"===(item.Item.Type||"").toLowerCase()}),seasonItems=items.filter(function(item){return"season"===(item.Item.Type||"").toLowerCase()}),albumItems=items.filter(function(item){item=(item.Item.Type||"").toLowerCase();return"musicalbum"===item||"photoalbum"===item}),requiredSeriesIds=items.filter(function(item){return"episode"===(item.Item.Type||"").toLowerCase()}).map(function(item2){return item2.Item.SeriesId}).filter(filterDistinct),requiredSeasonIds=items.filter(function(item){return"episode"===(item.Item.Type||"").toLowerCase()}).map(function(item2){return item2.Item.SeasonId}).filter(filterDistinct),requiredAlbumIds=items.filter(function(item){item=(item.Item.Type||"").toLowerCase();return"audio"===item||"photo"===item}).map(function(item2){return item2.Item.AlbumId}).filter(filterDistinct),obsoleteItems=[],p=(seriesItems.forEach(function(item){requiredSeriesIds.indexOf(item.Item.Id)<0&&obsoleteItems.push(item)}),seasonItems.forEach(function(item){requiredSeasonIds.indexOf(item.Item.Id)<0&&obsoleteItems.push(item)}),albumItems.forEach(function(item){requiredAlbumIds.indexOf(item.Item.Id)<0&&obsoleteItems.push(item)}),Promise.resolve());return obsoleteItems.forEach(function(item){p=p.then(function(){return _servicelocator.itemRepository.deleteLibraryItem(item.ServerId,item.ItemId)})}),p});var serverId})).then(function(){return console.log("[mediasync] Exit afterSyncData"),Promise.resolve()})}(apiClient,result).then(function(){return console.log("[mediasync] Exit syncData"),Promise.resolve()},function(err){return console.error("[mediasync] Error in syncData: "+err.toString()),Promise.resolve()})})})}function filterDistinct(value,index,self){return self.indexOf(value)===index}function getNewMedia(apiClient,downloadCount){return console.log("[mediasync] Begin getNewMedia"),apiClient.getReadySyncItems(apiClient.deviceId()).then(function(jobItems){console.log("[mediasync] getReadySyncItems returned "+jobItems.length+" items");var p=Promise.resolve(),currentCount=downloadCount;return jobItems.forEach(function(jobItem){currentCount++<=10&&(p=p.then(function(){return function(jobItem,apiClient){console.log("[mediasync] Begin getNewItem");var libraryItem=jobItem.Item;return _servicelocator.itemRepository.getLibraryItem(libraryItem.ServerId,libraryItem.Id).then(function(existingItem){if(existingItem&&("queued"===existingItem.SyncStatus||"transferring"===existingItem.SyncStatus||"synced"===existingItem.SyncStatus)&&(console.log("[mediasync] getNewItem: getLibraryItem found existing item"),_localassetmanager.default.enableBackgroundCompletion()))return Promise.resolve();libraryItem.CanDelete=!0,libraryItem.CanDownload=!1,libraryItem.SupportsSync=!1,libraryItem.People=[],clearChapterImages(libraryItem),libraryItem.Studios=[],libraryItem.SpecialFeatureCount=null,libraryItem.LocalTrailerCount=null,libraryItem.RemoteTrailers=[];var localItem=createLocalItem(libraryItem,jobItem);return localItem.SyncStatus="queued",_servicelocator.itemRepository.updateLibraryItem(localItem.ServerId,localItem.Id,localItem).then(function(){return function(apiClient,jobItem,localItem){console.log("[mediasync] downloadMedia: start.");var url=apiClient.getUrl("Sync/JobItems/"+jobItem.SyncJobItemId+"/File",{api_key:apiClient.accessToken()});return function(localItem,jobItem){var libraryItem,parts;localItem.LocalPathParts||(libraryItem=localItem.Item,(parts=_localassetmanager.default.getDirectoryPath(libraryItem)).push(_localassetmanager.default.getLocalFileName(libraryItem,jobItem.OriginalFileName)),localItem.LocalPathParts=parts)}(localItem,jobItem),_localassetmanager.default.downloadFile(url,localItem).then(function(result){console.log("[mediasync] downloadMedia-downloadFile returned path: "+result.path);var localPath=result.path,libraryItem=localItem.Item;if(localPath&&libraryItem.MediaSources)for(var i=0;i<libraryItem.MediaSources.length;i++){var mediaSource=libraryItem.MediaSources[i];mediaSource.Path=localPath,mediaSource.Protocol="File",clearChapterImages(mediaSource),mediaSource.MediaStreams.forEach(function(stream){"Subtitle"!==stream.Type||stream.IsExternal||(stream.DeliveryMethod="Embed")})}return localItem.LocalPath=localPath,localItem.SyncStatus="transferring",_servicelocator.itemRepository.updateLibraryItem(localItem.ServerId,localItem.Id,localItem).then(function(){return function(apiClient,jobItem,localItem){return console.log("[mediasync] Begin afterMediaDownloaded"),function(apiClient,localItem){console.log("[mediasync] Begin getImages");var p=Promise.resolve(),libraryItem=localItem.Item,serverId=libraryItem.ServerId,mainImageTag=(libraryItem.ImageTags||{}).Primary||libraryItem.PrimaryImageTag,primaryImageItemId=libraryItem.PrimaryImageItemId||libraryItem.Id;primaryImageItemId&&mainImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,primaryImageItemId,libraryItem.Id,mainImageTag,"Primary").then(function(result){return localItem.PrimaryImageItemId=null,Promise.resolve(result)})}));var logoImageTag=(libraryItem.ImageTags||{}).Logo;libraryItem.Id&&logoImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.Id,libraryItem.Id,logoImageTag,"Logo")}));var artImageTag=(libraryItem.ImageTags||{}).Art;libraryItem.Id&&artImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.Id,libraryItem.Id,artImageTag,"Art")}));var bannerImageTag=(libraryItem.ImageTags||{}).Banner;libraryItem.Id&&bannerImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.Id,libraryItem.Id,bannerImageTag,"Banner")}));var thumbImageTag=(libraryItem.ImageTags||{}).Thumb;libraryItem.Id&&thumbImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.Id,libraryItem.Id,thumbImageTag,"Thumb")}));if(libraryItem.Id&&libraryItem.BackdropImageTags)for(var numBackdrops=Math.min(libraryItem.BackdropImageTags.length,MaxBackdrops),i=0;i<numBackdrops;i++)!function(){var index=i,backdropImageTag=libraryItem.BackdropImageTags[i];p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.Id,libraryItem.Id,backdropImageTag,"backdrop",index)})}();libraryItem.SeriesId&&libraryItem.SeriesPrimaryImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.SeriesId,libraryItem.SeriesId,libraryItem.SeriesPrimaryImageTag,"Primary")}));libraryItem.SeasonId&&(p=(p=libraryItem.SeasonPrimaryImageTag?p:p.then(function(){return apiClient.getItem(apiClient.getCurrentUserId(),libraryItem.SeasonId).then(function(seasonItem){return libraryItem.SeasonPrimaryImageTag=(seasonItem.ImageTags||{}).Primary,Promise.resolve()})})).then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.SeasonId,libraryItem.SeasonId,libraryItem.SeasonPrimaryImageTag,"Primary")}));libraryItem.AlbumId&&libraryItem.AlbumPrimaryImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.AlbumId,libraryItem.AlbumId,libraryItem.AlbumPrimaryImageTag,"Primary")}));libraryItem.ParentThumbItemId&&libraryItem.ParentThumbImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.ParentThumbItemId,libraryItem.ParentThumbItemId,libraryItem.ParentThumbImageTag,"Thumb")}));libraryItem.ParentPrimaryImageItemId&&libraryItem.ParentPrimaryImageTag&&(p=p.then(function(){return downloadImage(localItem,apiClient,serverId,libraryItem.ParentPrimaryImageItemId,libraryItem.ParentPrimaryImageItemId,libraryItem.ParentPrimaryImageTag,"Primary")}));return p.then(function(){return console.log("[mediasync] Finished getImages"),_servicelocator.itemRepository.updateLibraryItem(localItem.ServerId,localItem.Id,localItem)},function(err){return console.log("[mediasync] Error getImages: "+err.toString()),Promise.resolve()})}(apiClient,localItem).then(function(){return function(apiClient,jobItem,localItem){var files,mediaSource,p;return console.log("[mediasync] Begin getSubtitles"),jobItem.Item.MediaSources.length?(files=jobItem.AdditionalFiles.filter(function(f){return"Subtitles"===f.Type}),mediaSource=jobItem.Item.MediaSources[0],p=Promise.resolve(),files.forEach(function(file){p=p.then(function(){return function(file,apiClient,jobItem,localItem,mediaSource){console.log("[mediasync] Begin getItemSubtitle");var fileName,subtitleStream=mediaSource.MediaStreams.filter(function(m){return"Subtitle"===m.Type&&m.Index===file.Index})[0];return subtitleStream?(fileName=_localassetmanager.default.getSubtitleSaveFileName(localItem,jobItem.OriginalFileName,subtitleStream.Language,subtitleStream.IsForced,subtitleStream.IsHearingImpaired,subtitleStream.Codec),_localassetmanager.default.getItemFileSize(fileName).then(function(size){return 0<size?Promise.resolve():(size=apiClient.getUrl("Sync/JobItems/"+jobItem.SyncJobItemId+"/AdditionalFiles",{Name:file.Name,api_key:apiClient.accessToken()}),_localassetmanager.default.downloadSubtitles(size,fileName).then(function(subtitleResult){return localItem.AdditionalFiles&&localItem.AdditionalFiles.forEach(function(item){item.Name===file.Name&&(item.Path=subtitleResult.path)}),subtitleStream.Path=subtitleResult.path,subtitleStream.DeliveryMethod="External",_servicelocator.itemRepository.updateLibraryItem(localItem.ServerId,localItem.Id,localItem)}))})):(console.log("[mediasync] Cannot download subtitles because matching stream info was not found."),Promise.resolve())}(file,apiClient,jobItem,localItem,mediaSource)})}),p.then(function(){return console.log("[mediasync] Exit getSubtitles"),Promise.resolve()})):(console.log("[mediasync] Cannot download subtitles because video has no media source info."),Promise.resolve())}(apiClient,jobItem,localItem)})}(apiClient,jobItem,localItem).then(function(){return result.isComplete?(localItem.SyncStatus="synced",reportTransfer(apiClient,localItem)):Promise.resolve()},function(err){return console.log("[mediasync] downloadMedia: afterMediaDownloaded failed: "+err),Promise.reject(err)})},function(err){return console.log("[mediasync] downloadMedia: updateLibraryItem failed: "+err),Promise.reject(err)})},function(err){return console.log("[mediasync] downloadMedia: LocalAssetManager.downloadFile failed: "+err),Promise.reject(err)})}(apiClient,jobItem,localItem)})})}(jobItem,apiClient)}))}),p.then(function(){return console.log("[mediasync] Exit getNewMedia"),Promise.resolve()})},function(err){return console.error("[mediasync] getReadySyncItems: Failed: ",err),Promise.resolve()})}function createLocalItem(libraryItem,jobItem){console.log("[mediasync] Begin createLocalItem");libraryItem={Item:libraryItem,ItemId:libraryItem.Id,ServerId:libraryItem.ServerId,Id:libraryItem.Id};return jobItem&&(libraryItem.SyncJobItemId=jobItem.SyncJobItemId),console.log("[mediasync] End createLocalItem"),libraryItem}function downloadItem(apiClient,itemId){return apiClient.getItem(apiClient.getCurrentUserId(),itemId).then(function(downloadedItem){downloadedItem.CanDelete=!0,downloadedItem.CanDownload=!1,downloadedItem.SupportsSync=!1,downloadedItem.People=[],((downloadedItem.SpecialFeatureCount=null)==(_downloadedItem$Backd=downloadedItem.BackdropImageTags)?void 0:_downloadedItem$Backd.length)>MaxBackdrops&&(downloadedItem.BackdropImageTags.length=MaxBackdrops),downloadedItem.ParentBackdropImageTags=null,downloadedItem.ParentArtImageTag=null,downloadedItem.ParentLogoImageTag=null;var _downloadedItem$Backd,localItem=createLocalItem(downloadedItem,null);return _servicelocator.itemRepository.updateLibraryItem(localItem.ServerId,localItem.Id,localItem).then(function(){return Promise.resolve(localItem)},function(err){return console.error("[mediasync] downloadItem failed: "+err.toString()),Promise.resolve(null)})})}function clearChapterImages(obj){if(obj.Chapters)for(var i=0,length=obj.Chapters.length;i<length;i++)obj.Chapters[i].ImageTag=null}function downloadImage(localItem,apiClient,serverId,downloadFromItemId,downloadToItemId,imageTag,imageType,index){return index=index||0,_localassetmanager.default.hasImage(serverId,downloadToItemId,imageType,index).then(function(hasImage){return hasImage?(console.log("[mediasync] downloadImage - skip existing: "+downloadToItemId+" "+imageType+"_"+index.toString()),Promise.resolve()):(hasImage=400,hasImage=apiClient.getImageUrl(downloadFromItemId,{tag:imageTag,type:imageType,maxWidth:hasImage="backdrop"===imageType?null:hasImage}),console.log("[mediasync] downloadImage "+downloadToItemId+" "+imageType+"_"+index.toString()),_localassetmanager.default.downloadImage(localItem,hasImage,serverId,downloadToItemId,imageType,index).then(function(result){return Promise.resolve(result)},function(err){return console.log("[mediasync] Error downloadImage: "+err.toString()),Promise.resolve()}))},function(err){return console.log("[mediasync] Error downloadImage: "+err.toString()),Promise.resolve()})}_exports.default=function(){this.sync=function(apiClient,options){return console.log("[mediasync]************************************* Start sync (uwp/androidownloadmanager)"),console.log("[mediasync] options.syncCheckProgressOnly = "+(options.syncCheckProgressOnly||"false")),function(apiClient,options){return options.checkFileExistence?(console.log("[mediasync] Begin checkLocalFileExistence"),_servicelocator.itemRepository.getLibraryItemsBySyncStatus(apiClient.serverId(),["synced","error"]).then(function(items){var p=Promise.resolve();return items.forEach(function(completedItem){p=p.then(function(){return _localassetmanager.default.fileExists(completedItem.LocalPath).then(function(exists){return exists?Promise.resolve():_localassetmanager.default.removeLocalItem(completedItem).then(function(){return Promise.resolve()},function(){return Promise.resolve()})})})}),p})):Promise.resolve()}(apiClient,options).then(function(){return function(apiClient){return console.log("[mediasync] Begin processDownloadStatus"),_localassetmanager.default.resyncTransfers().then(function(){return _servicelocator.itemRepository.getLibraryItemsBySyncStatus(apiClient.serverId(),["transferring","queued"]).then(function(items){console.log("[mediasync] Begin processDownloadStatus getLibraryItemsBySyncStatus completed");var p=Promise.resolve(),cnt=0;return items.forEach(function(item){p=p.then(function(){return reportTransfer(apiClient,item)}),cnt++}),p.then(function(){return console.log("[mediasync] Exit processDownloadStatus. Items reported: "+cnt.toString()),Promise.resolve()})})})}(apiClient).then(function(){return _localassetmanager.default.getDownloadItemCount().then(function(downloadCount){return!0===options.syncCheckProgressOnly&&2<downloadCount?(console.log("[mediasync] exit due to syncCheckProgressOnly with downloadcount = "+downloadCount),console.log("[mediasync]************************************* Exit sync"),Promise.resolve()):function(apiClient){return console.log("[mediasync] Begin reportOfflineActions"),_servicelocator.userActionRepository.getByServerId(apiClient.serverId()).then(function(actions){return actions.length?apiClient.reportOfflineActions(actions).then(function(){return _servicelocator.userActionRepository.deleteUserActions(actions.map(mapToId)).then(function(){return console.log("[mediasync] Exit reportOfflineActions (actions reported and deleted.)"),Promise.resolve()})},function(err){return console.error("[mediasync] error on apiClient.reportOfflineActions: "+err.toString()),_servicelocator.userActionRepository.deleteUserActions(actions.map(mapToId))}):(console.log("[mediasync] Exit reportOfflineActions (no actions)"),Promise.resolve())})}(apiClient).then(function(){return getNewMedia(apiClient,downloadCount).then(function(){return syncData(apiClient).then(function(){return console.log("[mediasync]************************************* Exit sync"),Promise.resolve()})})})})})},function(err){console.error(err.toString())})}}});