EmbyCrackedClient/web/modules/sync/mediasync.js

1 line
19 KiB
JavaScript
Raw Normal View History

2025-06-25 11:46:04 +08:00
import{itemRepository,userActionRepository}from"./../common/servicelocator.js";import LocalAssetManager from"./../localdatabase/localassetmanager.js";let MaxBackdrops=1;function processDownloadStatus(apiClient,options){return console.log("[mediasync] Begin processDownloadStatus"),LocalAssetManager.resyncTransfers().then(function(){return itemRepository.getLibraryItemsBySyncStatus(apiClient.serverId(),["transferring","queued"]).then(function(items){console.log("[mediasync] Begin processDownloadStatus getLibraryItemsBySyncStatus completed");let 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()})})})}function reportTransfer(apiClient,item){return LocalAssetManager.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),itemRepository.updateLibraryItem(item.ServerId,item.Id,item).then(function(){return downloadParentItems(apiClient,item.Item)})},function(error){return console.error("[mediasync] Mediasync error on reportSyncJobItemTransferred",error),item.SyncStatus="error",itemRepository.updateLibraryItem(item.ServerId,item.Id,item)}):LocalAssetManager.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",itemRepository.updateLibraryItem(item.ServerId,item.Id,item))})},function(error){return console.error("[mediasync] reportTransfer: error on getItemFileSize. Deleting item.",error),LocalAssetManager.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 reportOfflineActions(apiClient){return console.log("[mediasync] Begin reportOfflineActions"),userActionRepository.getByServerId(apiClient.serverId()).then(function(actions){return actions.length?apiClient.reportOfflineActions(actions).then(function(){return 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()),userActionRepository.deleteUserActions(actions.map(mapToId))}):(console.log("[mediasync] Exit reportOfflineActions (no actions)"),Promise.resolve())})}function syncData(apiClient){console.log("[mediasync] Begin syncData");return 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 afterSyncData(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 removeObsoleteContainerItems(serverId){return 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});let requiredSeriesIds=items.filter(function(item){return"episode"===(item.Item.Type||"").toLowerCase()}).map(