Podcast/js/database.js
2013-08-08 17:46:46 +02:00

104 lines
3.7 KiB
JavaScript

angular.module('podcasts.database', [])
.run(['dbBackend', function(dbBackend) {
var dbConfig = (function () {
//Create IndexedDB ObjectStore and Indexes via ixDbEz
dbBackend.createObjStore("feed", "id", true);
dbBackend.createIndex("feed", "ixUrl", "url", true);
dbBackend.createObjStore("feedItem", "id", true);
dbBackend.createIndex("feedItem", "ixGuid", "guid", true);
dbBackend.createIndex("feedItem", "ixFeedId", "feedId");
dbBackend.createIndex("feedItem", "ixQueued", "queued");
dbBackend.createObjStore("setting", "id", true);
dbBackend.createIndex("setting", "ixName", "name", true);
dbBackend.put("setting", {'name': "refreshInterval", 'value': "0"});
});
//Create or Open the local IndexedDB database via ixDbEz
dbBackend.startDB("podcastDb", 11, dbConfig, undefined, undefined, false);
}])
.value('dbBackend', ixDbEz)
.service('db', ['$q', '$rootScope', 'dbBackend', function($q, $rootScope, dbBackend) {
var _getOne = function(store, identifier) {
var deferred = $q.defer();
dbBackend.getCursor(store, function(ixDbCursorReq)
{
if(typeof ixDbCursorReq !== "undefined") {
ixDbCursorReq.onsuccess = function (e) {
var cursor = ixDbCursorReq.result || e.result;
if (cursor) {
$rootScope.$apply(deferred.resolve(cursor.value));
cursor.continue();
} else {
//TODO: not sure if this'll work, since it may both resolve and reject.
// May need to check if any were resolved or not first
// deferred.reject();
}
}
} else {
deferred.reject();
}
}, null, IDBKeyRange.only(identifier));
return deferred.promise;
};
function _get(store, range, indexName) {
var deferred = $q.defer(),
results = [];
dbBackend.getCursor(
store,
function(ixDbCursorReq) {
if(typeof ixDbCursorReq !== "undefined") {
ixDbCursorReq.onsuccess = function (e) {
var cursor = ixDbCursorReq.result || e.result;
if (cursor) {
results.push(cursor.value);
cursor.continue();
} else {
$rootScope.$apply(deferred.resolve(results));
}
}
} else {
deferred.reject();
}
},
function() {
deferred.reject();
},
range,
false,
indexName
);
return deferred.promise;
}
function _put(store, data, id) {
var deferred = $q.defer();
dbBackend.put(store, data, id, function(key) {
$rootScope.$apply(deferred.resolve(key));
}, function() {
deferred.reject();
});
return deferred.promise;
}
function _delete(store, id) {
dbBackend.delete(store, id);
}
return {
getOne: _getOne,
get: _get,
put: _put,
delete: _delete
};
}]);