bunch of cleanup

This commit is contained in:
Colin Frei 2013-02-03 13:58:28 +01:00
parent b67b763d89
commit d64c6b3f16
8 changed files with 82 additions and 16 deletions

View file

@ -38,6 +38,7 @@ function TopLinksCtrl($scope, feeds, feedItems, downloader) {
newFeedItem.date = 'Date'; newFeedItem.date = 'Date';
newFeedItem.description = 'Long Description<br /> with HTML <b>and stuff</b>'; newFeedItem.description = 'Long Description<br /> with HTML <b>and stuff</b>';
newFeedItem.audioUrl = 'http://example.com/1'; newFeedItem.audioUrl = 'http://example.com/1';
newFeedItem.queued = 1;
ixDbEz.put("feedItem", newFeedItem); ixDbEz.put("feedItem", newFeedItem);
@ -50,6 +51,7 @@ function TopLinksCtrl($scope, feeds, feedItems, downloader) {
newFeedItem.date = 'Date'; newFeedItem.date = 'Date';
newFeedItem.description = 'Second Long Description<br /> with HTML <b>and stuff</b>'; newFeedItem.description = 'Second Long Description<br /> with HTML <b>and stuff</b>';
newFeedItem.audioUrl = 'http://example.com/2'; newFeedItem.audioUrl = 'http://example.com/2';
newFeedItem.queued = 0;
ixDbEz.put("feedItem", newFeedItem); ixDbEz.put("feedItem", newFeedItem);
}; };
@ -66,9 +68,10 @@ function FeedCtrl($scope, $routeParams, feeds, pageSwitcher) {
pageSwitcher.setBack('feeds'); pageSwitcher.setBack('feeds');
} }
function QueueListCtrl($scope, $rootScope, $route, pageSwitcher, feedItems, feeds) { function QueueListCtrl($scope, $rootScope, pageSwitcher, feedItems, feeds, queueList) {
$scope.queue = []; $scope.queue = [];
feedItems.list($scope); queueList.init($scope);
feedItems.listQueue(queueList);
$scope.playItem = function(id) { $scope.playItem = function(id) {
feedItems.get(id, function(feedItem) { feedItems.get(id, function(feedItem) {
@ -116,7 +119,7 @@ function SettingsCtrl($scope, $route, settings, pageSwitcher) {
alert('already Installed'); alert('already Installed');
// Already installed // Already installed
} else { } else {
var manifestURL = "http://192.168.100.37/b2gPodcast/manifest.webapp"; var manifestURL = "http://localhost/b2gPodcast/package.manifest";
var installApp = navigator.mozApps.install(manifestURL); var installApp = navigator.mozApps.install(manifestURL);
installApp.onsuccess = function(data) { installApp.onsuccess = function(data) {
@ -183,7 +186,7 @@ function TopBarCtrl($scope, player, pageSwitcher)
}; };
} }
function InfoCtrl($scope) function InfoCtrl($scope, pageSwitcher)
{ {
pageSwitcher.change('info'); pageSwitcher.change('info');
} }

View file

@ -32,6 +32,21 @@ angular.module('podcasts.services', ['podcasts.database'])
} }
} }
}]) }])
.value('queueList', {
queue: [],
scope: null,
init: function(scope) {
this.scope = scope;
scope.queue = this.queue = [];
},
addToQueue: function(item) {
this.queue.push(item);
if (typeof this.scope !== "undefined") {
this.scope.$apply();
}
}
})
.service('feedItems', ['db', function(db) { .service('feedItems', ['db', function(db) {
return { return {
db: db, db: db,
@ -61,11 +76,49 @@ angular.module('podcasts.services', ['podcasts.database'])
newFeedItem.date = Date.parse(searchableXml.find('pubDate').text()); newFeedItem.date = Date.parse(searchableXml.find('pubDate').text());
newFeedItem.description = searchableXml.find('description').text(); newFeedItem.description = searchableXml.find('description').text();
newFeedItem.audioUrl = searchableXml.find('enclosure').attr('url'); newFeedItem.audioUrl = searchableXml.find('enclosure').attr('url');
newFeedItem.queued = 1;
this.db.put("feedItem", newFeedItem, undefined, function() { this.db.put("feedItem", newFeedItem, undefined, function() {
onSuccess(newFeedItem); onSuccess(newFeedItem);
}); });
}, },
getNextInQueue: function(feedItem) {
var tempQueueList = { queue: [], addToQueue: function(item) { this.queue.push(item); } };
var nextFeedItem = null;
this.listQueue(tempQueueList, function() {
var returnNextValue = false;
angular.forEach(tempQueueList.queue, function(key, value) {
if (returnNextValue) {
nextFeedItem = value;
returnNextValue = false;
}
if (feedItem.id === value.id) {
returnNextValue = true;
}
});
});
return nextFeedItem;
},
listQueue: function(queueList, done) {
this.db.getCursor("feedItem", function(ixDbCursorReq)
{
if(typeof ixDbCursorReq !== "undefined") {
ixDbCursorReq.onsuccess = function (e) {
var cursor = ixDbCursorReq.result || e.result;
if (cursor) {
queueList.addToQueue(cursor.value);
cursor.continue();
} else {
if (typeof done === 'function') {
done();
}
}
}
}
}, undefined, IDBKeyRange.only(1), undefined, 'ixQueued');
},
list: function($scope) { list: function($scope) {
this.db.getCursor("feedItem", function(ixDbCursorReq) this.db.getCursor("feedItem", function(ixDbCursorReq)
{ {
@ -210,7 +263,7 @@ angular.module('podcasts.services', ['podcasts.database'])
finishSave(newFeed); finishSave(newFeed);
}); });
}, function() { }, function() {
console.log('Could not fetch XML for feed, adding just URL for now'); console.error('Could not fetch XML for feed, adding just URL for now');
var newFeed = {}; var newFeed = {};
newFeed.url = url; newFeed.url = url;
@ -357,7 +410,6 @@ angular.module('podcasts.services', ['podcasts.database'])
} }
ngModel.$render = function() { ngModel.$render = function() {
console.log(ngModel);
if (ngModel.$modelValue.value !== '') { if (ngModel.$modelValue.value !== '') {
ngModel.$viewValue = ngModel.$modelValue.value; ngModel.$viewValue = ngModel.$modelValue.value;
} }
@ -446,6 +498,17 @@ angular.module('podcasts.services', ['podcasts.database'])
feedItem.position = Math.floor(event.target.currentTime); feedItem.position = Math.floor(event.target.currentTime);
db.put("feedItem", feedItem); db.put("feedItem", feedItem);
}); });
// TODO: add something here for when audio is done to remove from queue and go to next song
this.audio.bind('ended', function(event) {
feedItem.queued = 0;
feedItem.position = 0;
db.put("feedItem", feedItem);
// start next item
// get next item from queue
play(nextFeedItem, $scope);
});
}, },
pause: function() { pause: function() {
this.audio[0].pause(); this.audio[0].pause();
@ -497,7 +560,6 @@ angular.module('podcasts.services', ['podcasts.database'])
}, },
setBack: function(backPage) { setBack: function(backPage) {
this.backPage = backPage; this.backPage = backPage;
console.log(this);
}, },
getNextPage: function(current) { getNextPage: function(current) {
var nextPage, var nextPage,
@ -656,6 +718,7 @@ angular.module('podcasts.database', []).
ixDbEz.createObjStore("feedItem", "id", true); ixDbEz.createObjStore("feedItem", "id", true);
ixDbEz.createIndex("feedItem", "ixGuid", "guid", true); ixDbEz.createIndex("feedItem", "ixGuid", "guid", true);
ixDbEz.createIndex("feedItem", "ixFeedId", "feedId"); ixDbEz.createIndex("feedItem", "ixFeedId", "feedId");
ixDbEz.createIndex("feedItem", "ixQueued", "queued");
ixDbEz.createObjStore("setting", "id", true); ixDbEz.createObjStore("setting", "id", true);
ixDbEz.createIndex("setting", "ixName", "name", true); ixDbEz.createIndex("setting", "ixName", "name", true);
}); });

View file

@ -4870,7 +4870,8 @@ function $InterpolateProvider() {
}]; }];
} }
var URL_MATCH = /^([^:]+):\/\/(\w+:{0,1}\w*@)?([\w\.-]*)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/, // Colin: adjusted URL_MATCH to support curly braces in packaged apps app://{asdf-fda-asdf} url format
var URL_MATCH = /^([^:]+):\/\/(\w+:{0,1}\w*@)?([\w\.{}-]*)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,
PATH_MATCH = /^([^\?#]*)?(\?([^#]*))?(#(.*))?$/, PATH_MATCH = /^([^\?#]*)?(\?([^#]*))?(#(.*))?$/,
HASH_MATCH = PATH_MATCH, HASH_MATCH = PATH_MATCH,
DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};

View file

@ -304,9 +304,6 @@ var ixDbEz = (function () {
// skipSync - (optional) If true, skips all data synchronization in ixDbSync for a single transaction. // skipSync - (optional) If true, skips all data synchronization in ixDbSync for a single transaction.
//********************************************************************************************************* //*********************************************************************************************************
function Put_(objectStoreName, value, key, onSuccess, onError, skipSync) { function Put_(objectStoreName, value, key, onSuccess, onError, skipSync) {
console.log(objectStoreName);
console.log(value);
console.log(key);
if (ixDb) { if (ixDb) {
//The database is being created or upgraded, re-run when completed. //The database is being created or upgraded, re-run when completed.
if(ixDbVersionTansaction) { if(ixDbVersionTansaction) {

View file

@ -3,9 +3,9 @@
"version": "0.0.1", "version": "0.0.1",
"description": "Podcast Manager for Firefox OS", "description": "Podcast Manager for Firefox OS",
"icons": { "icons": {
"128": "/b2gPodcast/blaIcon128.png" "128": "/blaIcon128.png"
}, },
"launch_path": "/b2gPodcast/index.html", "launch_path": "/index.html",
"developer": { "developer": {
"name": "Colin Frei", "name": "Colin Frei",
"url": "http://colinfrei.com" "url": "http://colinfrei.com"

View file

@ -1,5 +1,5 @@
{ {
"name": "Podcast", "name": "Podcast",
"package_path": "http://192.168.100.37/b2gPodcast/package.zip", "package_path": "http://labs.colinfrei.com/package.zip",
"version": "1.0" "version": "1.0"
} }

View file

@ -17,9 +17,11 @@
<option value="0">none</option> <option value="0">none</option>
</select> </select>
</div> </div>
<h3>Description</h3>
<div> <div>
{{ feed.summary }} {{ feed.summary }}
</div> </div>
<h3>Episodes</h3>
<div ng-repeat="item in feed.items | orderBy:'date'" class="listItem"> <div ng-repeat="item in feed.items | orderBy:'date'" class="listItem">
<div class="playButton" style="width: 50px; float: right;"> <div class="playButton" style="width: 50px; float: right;">
<span ng-click="playItem(item.id)"><i ng-class="{hasAudio: item.audio}" class="icon-play"></i></span> <span ng-click="playItem(item.id)"><i ng-class="{hasAudio: item.audio}" class="icon-play"></i></span>

View file

@ -1,4 +1,4 @@
<div id="queueList" pull-to-refresh> <div id="queueList" pull-to-refresh="pull-to-refresh">
<div id="scroller"> <div id="scroller">
<div id="pullDown"> <div id="pullDown">
<span class="pullDownIcon"></span><span class="pullDownLabel">Pull down to refresh...</span> <span class="pullDownIcon"></span><span class="pullDownLabel">Pull down to refresh...</span>
@ -12,7 +12,7 @@
{{ feedItem.date | timeAgo }} {{ feedItem.date | timeAgo }}
</div> </div>
</div> </div>
<div ng-show="queue.length < 1" class="pullDownMessage"> <div ng-hide="queue.length" class="pullDownMessage">
<i class="icon-arrow-down"></i> Pull down to refresh. <i class="icon-arrow-down"></i> Pull down to refresh.
</div> </div>
</div> </div>