EmbyCrackedClient/web/modules/localdatabase/itemrepository.js

1 line
8.5 KiB
JavaScript
Raw Permalink Normal View History

2025-06-25 11:46:04 +08:00
import idb from"./idbcore.js";let libraryDbVersion=3,databases={};function openLibraryDatabase(dbName){return new Promise(function(resolve,reject){if(dbName in databases)resolve(databases[dbName]);else{let request=indexedDB.open(dbName,libraryDbVersion);request.onerror=reject,request.onblocked=reject,request.onupgradeneeded=function(event){var db=request.result;event.oldVersion<1&&db.createObjectStore(dbName),event.oldVersion<3&&((db=request.transaction.objectStore(dbName)).createIndex("Index_ItemType","Item.Type"),db.createIndex("Index_SyncStatus","SyncStatus"))},request.onsuccess=function(event){let db=event.target.result;db.onversionchange=function(){db.close(),delete databases[dbName]},databases[dbName]=db,resolve(db)}}})}function getLibraryDb(serverId){return openLibraryDatabase("items_"+serverId)}function getLibrarytemTypes(serverId){return getLibraryDb(serverId).then(function(db){return idb.getDistinctndexKeys(db,"Index_ItemType")})}function getLibraryItemsByIds(serverId,ids){return getLibraryDb(serverId).then(function(db){return idb.getObjectsByKeys(db,ids).then(function(items){return items=items||[],(items=Array.isArray(items)?items:[items]).sort(function(a,b){a=ids.indexOf(a.Id),b=ids.indexOf(b.Id);return indexedDB.cmp(a,b)}),Promise.resolve(items)})})}function getLibraryItemPathsByIds(serverId,ids){return getLibraryItemsByIds(serverId,ids).then(function(items){items=items.reduce(function(result,item){var id_path;return item&&(id_path={ItemId:item.ItemId,LocalPath:""},item.LocalPath?id_path.LocalPath=item.LocalPath:item.Item&&item.Item.MediaSources&&item.Item.MediaSources.length&&(item=item.Item.MediaSources[0],id_path.LocalPath=item.StreamUrl||item.Path),result.push(id_path)),result},[]);return Promise.resolve(items)}).catch(function(error){return Promise.resolve([])})}function getLibraryItemsBySyncStatus(serverId,syncStati){return getLibraryDb(serverId).then(function(db){return idb.getObjectsByIndexKeys(db,"Index_SyncStatus",syncStati)})}function getLibraryItemsByType(serverId,itemTypes,options){return getLibraryDb(serverId).then(function(db){return idb.getObjectsByIndexKeys(db,"Index_ItemType",itemTypes)})}function getAllLibraryItems(serverId){return getLibraryDb(serverId).then(function(db){return idb.getAllObjects(db)})}function getLibraryItem(serverId,key){return getLibraryDb(serverId).then(function(db){return idb.getObjectByKey(db,key)})}function addLibraryItem(serverId,key,val){return getLibraryDb(serverId).then(function(db){return idb.addObject(db,key,val)})}function updateLibraryItem(serverId,key,val){return getLibraryDb(serverId).then(function(db){return idb.updateObject(db,key,val)})}function deleteLibraryItem(serverId,key){return getLibraryDb(serverId).then(function(db){return idb.deleteObject(db,key)})}function clearLibrary(serverId){return getLibraryDb(serverId).then(function(db){return idb.clearObjects(db)})}function getLibraryItems(serverId,options){let searchParentId=options.ParentId,seasonId=(searchParentId=normalizeId(searchParentId),normalizeId(options.SeasonId||options.seasonId)),seriesId=normalizeId(options.SeriesId||options.seriesId),albumIds=normalizeIdList(options.AlbumIds||options.albumIds),includeItemTypes=options.IncludeItemTypes?options.IncludeItemTypes.split(","):[],filters=options.Filters?options.Filters.split(","):[],mediaTypes=options.MediaTypes?options.MediaTypes.split(","):[],getPromise=(updateFiltersForTopLevelView(searchParentId,mediaTypes,includeItemTypes,options)&&(searchParentId=null),Promise.resolve());return searchParentId&&(getPromise=getLibraryItem(serverId,searchParentId).then(function(item){item&&item.Item&&"MusicAlbum"===item.Item.Type&&(albumIds.push(searchParentId),searchParentId=null,options.Recursive=!0,includeItemTypes.push("Audio"))})),(getPromise=includeItemTypes.length?getPromise.then(function(){var includeSet=Array.from(new Set(includeItemTypes));return includeItemTypes=[],getLibraryItemsByType(serverId,includeSet)}):getPromise.then(function(){return getAllLibraryItems(serverId)})).then(function(items){let itemsMap=new Map,subtreeIdSet=new Set;if(items.fo