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.description = 'Long Description<br /> with HTML <b>and stuff</b>';
newFeedItem.audioUrl = 'http://example.com/1';
newFeedItem.queued = 1;
ixDbEz.put("feedItem", newFeedItem);
@ -50,6 +51,7 @@ function TopLinksCtrl($scope, feeds, feedItems, downloader) {
newFeedItem.date = 'Date';
newFeedItem.description = 'Second Long Description<br /> with HTML <b>and stuff</b>';
newFeedItem.audioUrl = 'http://example.com/2';
newFeedItem.queued = 0;
ixDbEz.put("feedItem", newFeedItem);
};
@ -66,9 +68,10 @@ function FeedCtrl($scope, $routeParams, feeds, pageSwitcher) {
pageSwitcher.setBack('feeds');
}
function QueueListCtrl($scope, $rootScope, $route, pageSwitcher, feedItems, feeds) {
function QueueListCtrl($scope, $rootScope, pageSwitcher, feedItems, feeds, queueList) {
$scope.queue = [];
feedItems.list($scope);
queueList.init($scope);
feedItems.listQueue(queueList);
$scope.playItem = function(id) {
feedItems.get(id, function(feedItem) {
@ -116,7 +119,7 @@ function SettingsCtrl($scope, $route, settings, pageSwitcher) {
alert('already Installed');
// Already installed
} else {
var manifestURL = "http://192.168.100.37/b2gPodcast/manifest.webapp";
var manifestURL = "http://localhost/b2gPodcast/package.manifest";
var installApp = navigator.mozApps.install(manifestURL);
installApp.onsuccess = function(data) {
@ -183,7 +186,7 @@ function TopBarCtrl($scope, player, pageSwitcher)
};
}
function InfoCtrl($scope)
function InfoCtrl($scope, pageSwitcher)
{
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) {
return {
db: db,
@ -61,11 +76,49 @@ angular.module('podcasts.services', ['podcasts.database'])
newFeedItem.date = Date.parse(searchableXml.find('pubDate').text());
newFeedItem.description = searchableXml.find('description').text();
newFeedItem.audioUrl = searchableXml.find('enclosure').attr('url');
newFeedItem.queued = 1;
this.db.put("feedItem", newFeedItem, undefined, function() {
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) {
this.db.getCursor("feedItem", function(ixDbCursorReq)
{
@ -210,7 +263,7 @@ angular.module('podcasts.services', ['podcasts.database'])
finishSave(newFeed);
});
}, 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 = {};
newFeed.url = url;
@ -357,7 +410,6 @@ angular.module('podcasts.services', ['podcasts.database'])
}
ngModel.$render = function() {
console.log(ngModel);
if (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);
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() {
this.audio[0].pause();
@ -497,7 +560,6 @@ angular.module('podcasts.services', ['podcasts.database'])
},
setBack: function(backPage) {
this.backPage = backPage;
console.log(this);
},
getNextPage: function(current) {
var nextPage,
@ -656,6 +718,7 @@ angular.module('podcasts.database', []).
ixDbEz.createObjStore("feedItem", "id", true);
ixDbEz.createIndex("feedItem", "ixGuid", "guid", true);
ixDbEz.createIndex("feedItem", "ixFeedId", "feedId");
ixDbEz.createIndex("feedItem", "ixQueued", "queued");
ixDbEz.createObjStore("setting", "id", 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 = /^([^\?#]*)?(\?([^#]*))?(#(.*))?$/,
HASH_MATCH = PATH_MATCH,
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.
//*********************************************************************************************************
function Put_(objectStoreName, value, key, onSuccess, onError, skipSync) {
console.log(objectStoreName);
console.log(value);
console.log(key);
if (ixDb) {
//The database is being created or upgraded, re-run when completed.
if(ixDbVersionTansaction) {

View file

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

View file

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

View file

@ -17,9 +17,11 @@
<option value="0">none</option>
</select>
</div>
<h3>Description</h3>
<div>
{{ feed.summary }}
</div>
<h3>Episodes</h3>
<div ng-repeat="item in feed.items | orderBy:'date'" class="listItem">
<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>

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="pullDown">
<span class="pullDownIcon"></span><span class="pullDownLabel">Pull down to refresh...</span>
@ -12,7 +12,7 @@
{{ feedItem.date | timeAgo }}
</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.
</div>
</div>