1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
This commit is contained in:
Luke Pulverenti 2017-01-27 18:07:14 -05:00
parent 82bcca376f
commit 8a6884abef
494 changed files with 256 additions and 120180 deletions

View file

@ -1,98 +1 @@
define(['localassetmanager', 'cameraRoll'], function (localAssetManager, cameraRoll) {
'use strict';
return function (connectionManager) {
var self = this;
self.uploadImages = function (server) {
return cameraRoll.getFiles().then(function (photos) {
if (!photos.length) {
return Promise.resolve();
}
var apiClient = connectionManager.getApiClient(server.Id);
return apiClient.getContentUploadHistory().then(function (uploadHistory) {
photos = getFilesToUpload(photos, uploadHistory);
console.log('Found ' + photos.length + ' files to upload');
return new Promise(function (resolve, reject) {
uploadNext(photos, 0, server, apiClient, resolve, reject);
});
}, function () {
return Promise.resolve();
});
});
};
function getFilesToUpload(files, uploadHistory) {
return files.filter(function (file) {
// Seeing some null entries for some reason
if (!file) {
return false;
}
return uploadHistory.FilesUploaded.filter(function (u) {
return getUploadId(file) === u.Id;
}).length === 0;
});
}
function getUploadId(file) {
return CryptoJS.SHA1(file + "1").toString();
}
function uploadNext(files, index, server, apiClient, resolve, reject) {
var length = files.length;
if (index >= length) {
resolve();
return;
}
uploadFile(files[index], apiClient).then(function () {
uploadNext(files, index + 1, server, apiClient, resolve, reject);
}, function () {
uploadNext(files, index + 1, server, apiClient, resolve, reject);
});
}
function uploadFile(file, apiClient) {
return new Promise(function (resolve, reject) {
require(['fileupload', "cryptojs-sha1"], function (FileUpload) {
var name = 'camera image ' + new Date().getTime();
var url = apiClient.getUrl('Devices/CameraUploads', {
DeviceId: apiClient.deviceId(),
Name: name,
Album: 'Camera Roll',
Id: getUploadId(file),
api_key: apiClient.accessToken()
});
console.log('Uploading file to ' + url);
new FileUpload().upload(file, name, url).then(resolve, reject);
});
});
}
};
});
define(["localassetmanager","cameraRoll"],function(localAssetManager,cameraRoll){"use strict";return function(connectionManager){function getFilesToUpload(files,uploadHistory){return files.filter(function(file){return!!file&&0===uploadHistory.FilesUploaded.filter(function(u){return getUploadId(file)===u.Id}).length})}function getUploadId(file){return CryptoJS.SHA1(file+"1").toString()}function uploadNext(files,index,server,apiClient,resolve,reject){var length=files.length;return index>=length?void resolve():void uploadFile(files[index],apiClient).then(function(){uploadNext(files,index+1,server,apiClient,resolve,reject)},function(){uploadNext(files,index+1,server,apiClient,resolve,reject)})}function uploadFile(file,apiClient){return new Promise(function(resolve,reject){require(["fileupload","cryptojs-sha1"],function(FileUpload){var name="camera image "+(new Date).getTime(),url=apiClient.getUrl("Devices/CameraUploads",{DeviceId:apiClient.deviceId(),Name:name,Album:"Camera Roll",Id:getUploadId(file),api_key:apiClient.accessToken()});console.log("Uploading file to "+url),(new FileUpload).upload(file,name,url).then(resolve,reject)})})}var self=this;self.uploadImages=function(server){return cameraRoll.getFiles().then(function(photos){if(!photos.length)return Promise.resolve();var apiClient=connectionManager.getApiClient(server.Id);return apiClient.getContentUploadHistory().then(function(uploadHistory){return photos=getFilesToUpload(photos,uploadHistory),console.log("Found "+photos.length+" files to upload"),new Promise(function(resolve,reject){uploadNext(photos,0,server,apiClient,resolve,reject)})},function(){return Promise.resolve()})})}}});

View file

@ -1,50 +1 @@
define([], function () {
'use strict';
function getValidFileName(path) {
// TODO
return path;
}
function getFullLocalPath(pathArray) {
// TODO
return pathArray.join('/');
}
function getPathFromArray(pathArray) {
// TODO
return pathArray.join('/');
}
function deleteFile(path) {
return Promise.resolve();
}
function deleteDirectory(path) {
return Promise.resolve();
}
function fileExists(path) {
return Promise.resolve();
}
function getItemFileSize(path) {
return Promise.resolve(0);
}
return {
getValidFileName: getValidFileName,
getFullLocalPath: getFullLocalPath,
getPathFromArray: getPathFromArray,
deleteFile: deleteFile,
deleteDirectory: deleteDirectory,
fileExists: fileExists,
getItemFileSize: getItemFileSize
};
});
define([],function(){"use strict";function getValidFileName(path){return path}function getFullLocalPath(pathArray){return pathArray.join("/")}function getPathFromArray(pathArray){return pathArray.join("/")}function deleteFile(path){return Promise.resolve()}function deleteDirectory(path){return Promise.resolve()}function fileExists(path){return Promise.resolve()}function getItemFileSize(path){return Promise.resolve(0)}return{getValidFileName:getValidFileName,getFullLocalPath:getFullLocalPath,getPathFromArray:getPathFromArray,deleteFile:deleteFile,deleteDirectory:deleteDirectory,fileExists:fileExists,getItemFileSize:getItemFileSize}});

View file

@ -1,114 +1 @@
define(['idb'], function () {
'use strict';
// Database name
var dbName = "items";
// Database version
var dbVersion = 1;
var dbPromise;
function setup() {
dbPromise = idb.open(dbName, dbVersion, function (upgradeDB) {
// Note: we don't use 'break' in this switch statement,
// the fall-through behaviour is what we want.
switch (upgradeDB.oldVersion) {
case 0:
upgradeDB.createObjectStore(dbName);
//case 1:
// upgradeDB.createObjectStore('stuff', { keyPath: '' });
}
}); //.then(db => console.log("DB opened!", db));
}
function getServerItemIds(serverId) {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).getAll(null, 10000).then(function (all) {
return all.filter(function (item) {
return item.ServerId === serverId;
}).map(function (item2) {
return item2.ItemId;
});
});
});
}
function getServerItemTypes(serverId, userId) {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).getAll(null, 10000).then(function (all) {
return all.filter(function (item) {
return item.ServerId === serverId && (item.UserIdsWithAccess == null || item.UserIdsWithAccess.contains(userId));
}).map(function (item2) {
return (item2.Item.Type || '').toLowerCase();
}).filter(filterDistinct);
});
});
}
function getServerIds(serverId) {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).getAll(null, 10000).then(function (all) {
return all.filter(function (item) {
return item.ServerId === serverId;
}).map(function (item2) {
return item2.Id;
});
});
});
}
function getAll() {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).getAll(null, 10000);
});
}
function get(key) {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).get(key);
});
}
function set(key, val) {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).put(val, key);
return tx.complete;
});
}
function remove(key) {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).delete(key);
return tx.complete;
});
}
function clear() {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).clear();
return tx.complete;
});
}
function filterDistinct(value, index, self) {
return self.indexOf(value) === index;
}
setup();
return {
get: get,
set: set,
remove: remove,
clear: clear,
getAll: getAll,
getServerItemIds: getServerItemIds,
getServerIds: getServerIds,
getServerItemTypes: getServerItemTypes
};
});
define(["idb"],function(){"use strict";function setup(){dbPromise=idb.open(dbName,dbVersion,function(upgradeDB){switch(upgradeDB.oldVersion){case 0:upgradeDB.createObjectStore(dbName)}})}function getServerItemIds(serverId){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).getAll(null,1e4).then(function(all){return all.filter(function(item){return item.ServerId===serverId}).map(function(item2){return item2.ItemId})})})}function getServerItemTypes(serverId,userId){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).getAll(null,1e4).then(function(all){return all.filter(function(item){return item.ServerId===serverId&&(null==item.UserIdsWithAccess||item.UserIdsWithAccess.contains(userId))}).map(function(item2){return(item2.Item.Type||"").toLowerCase()}).filter(filterDistinct)})})}function getServerIds(serverId){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).getAll(null,1e4).then(function(all){return all.filter(function(item){return item.ServerId===serverId}).map(function(item2){return item2.Id})})})}function getAll(){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).getAll(null,1e4)})}function get(key){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).get(key)})}function set(key,val){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).put(val,key),tx.complete})}function remove(key){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).delete(key),tx.complete})}function clear(){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).clear(),tx.complete})}function filterDistinct(value,index,self){return self.indexOf(value)===index}var dbPromise,dbName="items",dbVersion=1;return setup(),{get:get,set:set,remove:remove,clear:clear,getAll:getAll,getServerItemIds:getServerItemIds,getServerIds:getServerIds,getServerItemTypes:getServerItemTypes}});

View file

@ -1,46 +1 @@
define(['appSettings', 'connectionManager'], function (appSettings, connectionManager) {
'use strict';
var syncPromise;
return {
sync: function (options) {
if (syncPromise) {
return syncPromise;
}
return new Promise(function (resolve, reject) {
require(['multiserversync'], function (MultiServerSync) {
options = options || {};
options.cameraUploadServers = appSettings.cameraUploadServers();
syncPromise = new MultiServerSync(connectionManager).sync(options).then(function () {
syncPromise = null;
resolve();
}, function () {
syncPromise = null;
reject();
});
});
});
},
getSyncStatus: function () {
if (syncPromise != null) {
return 'Syncing';
}
return 'Idle';
}
};
});
define(["appSettings","connectionManager"],function(appSettings,connectionManager){"use strict";var syncPromise;return{sync:function(options){return syncPromise?syncPromise:new Promise(function(resolve,reject){require(["multiserversync"],function(MultiServerSync){options=options||{},options.cameraUploadServers=appSettings.cameraUploadServers(),syncPromise=new MultiServerSync(connectionManager).sync(options).then(function(){syncPromise=null,resolve()},function(){syncPromise=null,reject()})})})},getSyncStatus:function(){return null!=syncPromise?"Syncing":"Idle"}}});

File diff suppressed because one or more lines are too long

View file

@ -1,42 +1 @@
define(['serversync'], function (ServerSync) {
'use strict';
function syncNext(connectionManager, servers, index, options, resolve, reject) {
var length = servers.length;
if (index >= length) {
resolve();
return;
}
var server = servers[index];
console.log("Creating ServerSync to server: " + server.Id);
new ServerSync(connectionManager).sync(server, options).then(function () {
syncNext(connectionManager, servers, index + 1, options, resolve, reject);
}, function () {
syncNext(connectionManager, servers, index + 1, options, resolve, reject);
});
}
return function (connectionManager) {
var self = this;
self.sync = function (options) {
return new Promise(function (resolve, reject) {
var servers = connectionManager.getSavedServers();
syncNext(connectionManager, servers, 0, options, resolve, reject);
});
};
};
});
define(["serversync"],function(ServerSync){"use strict";function syncNext(connectionManager,servers,index,options,resolve,reject){var length=servers.length;if(index>=length)return void resolve();var server=servers[index];console.log("Creating ServerSync to server: "+server.Id),new ServerSync(connectionManager).sync(server,options).then(function(){syncNext(connectionManager,servers,index+1,options,resolve,reject)},function(){syncNext(connectionManager,servers,index+1,options,resolve,reject)})}return function(connectionManager){var self=this;self.sync=function(options){return new Promise(function(resolve,reject){var servers=connectionManager.getSavedServers();syncNext(connectionManager,servers,0,options,resolve,reject)})}}});

View file

@ -1,49 +1 @@
define(['localassetmanager'], function (localAssetManager) {
'use strict';
function syncNext(users, index, resolve, reject, apiClient, server) {
var length = users.length;
if (index >= length) {
resolve();
return;
}
var onFinish = function () {
syncNext(users, index + 1, resolve, reject, apiClient, server);
};
syncUser(users[index], apiClient).then(onFinish, onFinish);
}
function syncUser(user, apiClient) {
return apiClient.getOfflineUser(user.Id).then(function (result) {
return localAssetManager.saveOfflineUser(result);
}, function () {
// TODO: We should only delete if there's a 401 response
return localAssetManager.deleteOfflineUser(user.Id).catch(function () {
return Promise.resolve();
});
});
}
return function offlineUserSync() {
var self = this;
self.sync = function (apiClient, server) {
return new Promise(function (resolve, reject) {
var users = server.Users || [];
syncNext(users, 0, resolve, reject, apiClient, server);
});
};
};
});
define(["localassetmanager"],function(localAssetManager){"use strict";function syncNext(users,index,resolve,reject,apiClient,server){var length=users.length;if(index>=length)return void resolve();var onFinish=function(){syncNext(users,index+1,resolve,reject,apiClient,server)};syncUser(users[index],apiClient).then(onFinish,onFinish)}function syncUser(user,apiClient){return apiClient.getOfflineUser(user.Id).then(function(result){return localAssetManager.saveOfflineUser(result)},function(){return localAssetManager.deleteOfflineUser(user.Id).catch(function(){return Promise.resolve()})})}return function(){var self=this;self.sync=function(apiClient,server){return new Promise(function(resolve,reject){var users=server.Users||[];syncNext(users,0,resolve,reject,apiClient,server)})}}});

View file

@ -1,110 +1 @@
define([], function () {
'use strict';
return function (connectionManager) {
var self = this;
self.sync = function (server, options) {
if (!server.AccessToken && !server.ExchangeToken) {
console.log('Skipping sync to server ' + server.Id + ' because there is no saved authentication information.');
return Promise.resolve();
}
var connectionOptions = {
updateDateLastAccessed: false,
enableWebSocket: false,
reportCapabilities: false,
enableAutomaticBitrateDetection: false
};
return connectionManager.connectToServer(server, connectionOptions).then(function (result) {
if (result.State === MediaBrowser.ConnectionState.SignedIn) {
return performSync(server, options);
} else {
console.log('Unable to connect to server id: ' + server.Id);
return Promise.reject();
}
}, function (err) {
console.log('Unable to connect to server id: ' + server.Id);
throw err;
});
};
function performSync(server, options) {
console.log("ServerSync.performSync to server: " + server.Id);
options = options || {};
var uploadPhotos = options.uploadPhotos !== false;
if (options.cameraUploadServers && options.cameraUploadServers.indexOf(server.Id) === -1) {
uploadPhotos = false;
}
var pr = syncOfflineUsers(server, options);
return pr.then(function () {
if (uploadPhotos) {
return uploadContent(server, options);
}
return Promise.resolve();
}).then(function () {
return syncMedia(server, options);
});
}
function syncOfflineUsers(server, options) {
if (options.syncOfflineUsers === false) {
return Promise.resolve();
}
return new Promise(function (resolve, reject) {
require(['offlineusersync'], function (OfflineUserSync) {
var apiClient = connectionManager.getApiClient(server.Id);
new OfflineUserSync().sync(apiClient, server).then(resolve, reject);
});
});
}
function uploadContent(server, options) {
return new Promise(function (resolve, reject) {
require(['contentuploader'], function (contentuploader) {
uploader = new ContentUploader(connectionManager);
uploader.uploadImages(server).then(resolve, reject);
});
});
}
function syncMedia(server, options) {
return new Promise(function (resolve, reject) {
require(['mediasync'], function (MediaSync) {
var apiClient = connectionManager.getApiClient(server.Id);
new MediaSync().sync(apiClient, server, options).then(resolve, reject);
});
});
}
};
});
define([],function(){"use strict";return function(connectionManager){function performSync(server,options){console.log("ServerSync.performSync to server: "+server.Id),options=options||{};var uploadPhotos=options.uploadPhotos!==!1;options.cameraUploadServers&&options.cameraUploadServers.indexOf(server.Id)===-1&&(uploadPhotos=!1);var pr=syncOfflineUsers(server,options);return pr.then(function(){return uploadPhotos?uploadContent(server,options):Promise.resolve()}).then(function(){return syncMedia(server,options)})}function syncOfflineUsers(server,options){return options.syncOfflineUsers===!1?Promise.resolve():new Promise(function(resolve,reject){require(["offlineusersync"],function(OfflineUserSync){var apiClient=connectionManager.getApiClient(server.Id);(new OfflineUserSync).sync(apiClient,server).then(resolve,reject)})})}function uploadContent(server,options){return new Promise(function(resolve,reject){require(["contentuploader"],function(contentuploader){uploader=new ContentUploader(connectionManager),uploader.uploadImages(server).then(resolve,reject)})})}function syncMedia(server,options){return new Promise(function(resolve,reject){require(["mediasync"],function(MediaSync){var apiClient=connectionManager.getApiClient(server.Id);(new MediaSync).sync(apiClient,server,options).then(resolve,reject)})})}var self=this;self.sync=function(server,options){if(!server.AccessToken&&!server.ExchangeToken)return console.log("Skipping sync to server "+server.Id+" because there is no saved authentication information."),Promise.resolve();var connectionOptions={updateDateLastAccessed:!1,enableWebSocket:!1,reportCapabilities:!1,enableAutomaticBitrateDetection:!1};return connectionManager.connectToServer(server,connectionOptions).then(function(result){return result.State===MediaBrowser.ConnectionState.SignedIn?performSync(server,options):(console.log("Unable to connect to server id: "+server.Id),Promise.reject())},function(err){throw console.log("Unable to connect to server id: "+server.Id),err})}}});

View file

@ -1,23 +1 @@
define(['filerepository'], function (filerepository) {
'use strict';
function downloadFile(url, folderName, localPath) {
return Promise.resolve();
}
function downloadSubtitles(url, folderName, localItem) {
return Promise.resolve('');
}
function downloadImage(url, folderName, serverId, itemId, imageTag) {
return Promise.resolve(false);
}
return {
downloadFile: downloadFile,
downloadSubtitles: downloadSubtitles,
downloadImage: downloadImage
};
});
define(["filerepository"],function(filerepository){"use strict";function downloadFile(url,folderName,localPath){return Promise.resolve()}function downloadSubtitles(url,folderName,localItem){return Promise.resolve("")}function downloadImage(url,folderName,serverId,itemId,imageTag){return Promise.resolve(!1)}return{downloadFile:downloadFile,downloadSubtitles:downloadSubtitles,downloadImage:downloadImage}});

View file

@ -1,82 +1 @@
define(['idb'], function () {
'use strict';
// Database name
var dbName = "useractions";
// Database version
var dbVersion = 1;
var dbPromise;
function setup() {
dbPromise = idb.open(dbName, dbVersion, function (upgradeDB) {
// Note: we don't use 'break' in this switch statement,
// the fall-through behaviour is what we want.
switch (upgradeDB.oldVersion) {
case 0:
upgradeDB.createObjectStore(dbName);
//case 1:
// upgradeDB.createObjectStore('stuff', { keyPath: '' });
}
}); //.then(db => console.log("DB opened!", db));
}
function getByServerId(serverId) {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).getAll(null, 1000).then(function (all) {
return all.filter(function (item) {
return item.ServerId === serverId;
});
});
});
}
function getAll() {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).getAll(null, 10000);
});
}
function get(key) {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).get(key);
});
}
function set(key, val) {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).put(val, key);
return tx.complete;
});
}
function remove(key) {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).delete(key);
return tx.complete;
});
}
function clear() {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).clear(key);
return tx.complete;
});
}
setup();
return {
get: get,
set: set,
remove: remove,
clear: clear,
getAll: getAll,
getByServerId: getByServerId
};
});
define(["idb"],function(){"use strict";function setup(){dbPromise=idb.open(dbName,dbVersion,function(upgradeDB){switch(upgradeDB.oldVersion){case 0:upgradeDB.createObjectStore(dbName)}})}function getByServerId(serverId){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).getAll(null,1e3).then(function(all){return all.filter(function(item){return item.ServerId===serverId})})})}function getAll(){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).getAll(null,1e4)})}function get(key){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).get(key)})}function set(key,val){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).put(val,key),tx.complete})}function remove(key){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).delete(key),tx.complete})}function clear(){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).clear(key),tx.complete})}var dbPromise,dbName="useractions",dbVersion=1;return setup(),{get:get,set:set,remove:remove,clear:clear,getAll:getAll,getByServerId:getByServerId}});

View file

@ -1,71 +1 @@
define(['idb'], function () {
'use strict';
// Database name
var dbName = "users";
// Database version
var dbVersion = 1;
var dbPromise;
function setup() {
dbPromise = idb.open(dbName, dbVersion, function (upgradeDB) {
// Note: we don't use 'break' in this switch statement,
// the fall-through behaviour is what we want.
switch (upgradeDB.oldVersion) {
case 0:
upgradeDB.createObjectStore(dbName);
//case 1:
// upgradeDB.createObjectStore('stuff', { keyPath: '' });
}
}); //.then(db => console.log("DB opened!", db));
}
function getAll() {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).getAll(null, 10000);
});
}
function get(key) {
return dbPromise.then(function (db) {
return db.transaction(dbName).objectStore(dbName).get(key);
});
}
function set(key, val) {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).put(val, key);
return tx.complete;
});
}
function remove(key) {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).delete(key);
return tx.complete;
});
}
function clear() {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
tx.objectStore(dbName).clear(key);
return tx.complete;
});
}
setup();
return {
get: get,
set: set,
remove: remove,
clear: clear,
getAll: getAll
};
});
define(["idb"],function(){"use strict";function setup(){dbPromise=idb.open(dbName,dbVersion,function(upgradeDB){switch(upgradeDB.oldVersion){case 0:upgradeDB.createObjectStore(dbName)}})}function getAll(){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).getAll(null,1e4)})}function get(key){return dbPromise.then(function(db){return db.transaction(dbName).objectStore(dbName).get(key)})}function set(key,val){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).put(val,key),tx.complete})}function remove(key){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).delete(key),tx.complete})}function clear(){return dbPromise.then(function(db){var tx=db.transaction(dbName,"readwrite");return tx.objectStore(dbName).clear(key),tx.complete})}var dbPromise,dbName="users",dbVersion=1;return setup(),{get:get,set:set,remove:remove,clear:clear,getAll:getAll}});