104 lines
3.7 KiB
JavaScript
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': 20000});
|
|
});
|
|
|
|
//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
|
|
};
|
|
}]);
|