git.iko.soy/maciek134/podphoenix
on main help sign in
Merged devel rev 122
commitf268267bdb16601b5a922c85c0b4ea6158660a7e authorNekhelesh Ramananthan <krnekhelesh@gmail.com> dateSat 19 Mar 2016, 03:09 (11 years ago) parent52030c9
3 files changed+97−18
app/podcasts.js+10−8 app/ui/EpisodesPage.qml+16−2 app/ui/EpisodesTab.qml+71−8
app/podcasts.js+10−8
@@ -21,17 +21,18 @@ function init() {
2121
2222 db.transaction(function(tx) {
2323 tx.executeSql('CREATE TABLE IF NOT EXISTS Podcast(artist TEXT, name TEXT, description TEXT, feed TEXT, image TEXT, lastupdate TIMESTAMP)');
24− tx.executeSql('CREATE TABLE IF NOT EXISTS Episode(guid TEXT, podcast INTEGER, name TEXT, subtitle TEXT, description TEXT, duration INTEGER, audiourl TEXT, downloadedfile TEXT, published TIMESTAMP, queued BOOLEAN, listened BOOLEAN, position INTEGER, FOREIGN KEY(podcast) REFERENCES Podcast(rowid))');
24+ tx.executeSql('CREATE TABLE IF NOT EXISTS Episode(guid TEXT, podcast INTEGER, name TEXT, subtitle TEXT, description TEXT, duration INTEGER, audiourl TEXT, downloadedfile TEXT, published TIMESTAMP, queued BOOLEAN, listened BOOLEAN, favourited BOOLEAN, position INTEGER, FOREIGN KEY(podcast) REFERENCES Podcast(rowid))');
2525 });
2626
2727 /*
28− Schema Upgrade to v1.1 which adds a new queued boolean variable which is needed to track the queued status
29− of a episode properly.
28+ Schema Upgrade to v1.2 which adds a new favourited boolean variable which is needed to track the favourite status
29+ of an episode.
3030 */
31− if (db.version == "1.0") {
32− db.changeVersion("1.0", "1.1", function(tx) {
33− tx.executeSql('ALTER TABLE Episode ADD queued BOOLEAN');
34− tx.executeSql('UPDATE Episode SET queued=0');
31+ if (db.version != "1.2") {
32+ console.log("Upgrading database from %1 -> v1.2".arg(db.version))
33+ db.changeVersion(db.version, "1.2", function(tx) {
34+ tx.executeSql('ALTER TABLE Episode ADD favourited BOOLEAN');
35+ tx.executeSql('UPDATE Episode SET favourited=?', [false]);
3536 });
3637 }
3738
@@ -110,13 +111,14 @@ function updateEpisodes(refreshModel) {
110111 db.transaction(function(tx2) {
111112 var ers = tx2.executeSql("SELECT rowid FROM Episode WHERE guid=?", [track.guid]);
112113 if (ers.rows.length === 0) {
113− tx2.executeSql("INSERT INTO Episode(podcast, name, description, audiourl, guid, listened, queued, duration, published) VALUES(?, ?, ? , ?, ?, ?, ?, ?, ?)", [pid,
114+ tx2.executeSql("INSERT INTO Episode(podcast, name, description, audiourl, guid, listened, queued, favourited, duration, published) VALUES(?, ?, ? , ?, ?, ?, ?, ?, ?, ?)", [pid,
114115 track.name,
115116 track.description,
116117 track.audiourl,
117118 track.guid,
118119 false,
119120 false,
121+ false,
120122 track.duration,
121123 track.published]);
122124 }
app/ui/EpisodesPage.qml+16−2
@@ -522,6 +522,20 @@ Page {
522522 }
523523 },
524524
525+ Action {
526+ iconName: model.favourited ? "unlike" : "like"
527+ onTriggered: {
528+ var db = Podcasts.init();
529+ db.transaction(function (tx) {
530+ if (model.favourited)
531+ tx.executeSql("UPDATE Episode SET favourited=0 WHERE guid=?", [model.guid])
532+ else
533+ tx.executeSql("UPDATE Episode SET favourited=1 WHERE guid=?", [model.guid])
534+ refreshModel();
535+ });
536+ }
537+ },
538+
525539 Action {
526540 iconName: "info"
527541 onTriggered: {
@@ -581,10 +595,10 @@ Page {
581595 for(i = 0; i < rs.rows.length; i++) {
582596 episode = rs.rows.item(i);
583597 if (!episode.listened) {
584− episodeModel.insert(newCount, {"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : img, "artist" : artist, "audiourl" : episode.audiourl, "queued": episode.queued});
598+ episodeModel.insert(newCount, {"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : img, "artist" : artist, "audiourl" : episode.audiourl, "queued": episode.queued, "favourited": episode.favourited});
585599 newCount++;
586600 } else {
587− episodeModel.insert(i,{"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : img, "artist" : artist, "audiourl" : episode.audiourl, "queued": episode.queued});
601+ episodeModel.insert(i,{"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : img, "artist" : artist, "audiourl" : episode.audiourl, "queued": episode.queued, "favourited": episode.favourited});
588602 }
589603 }
590604 });
app/ui/EpisodesTab.qml+71−8
@@ -132,7 +132,7 @@ Tab {
132132 selectedSectionColor: podbird.appTheme.focusText
133133 }
134134
135− model: [i18n.tr("What's New"), i18n.tr("Downloaded")]
135+ model: [i18n.tr("What's New"), i18n.tr("Downloaded"), i18n.tr("Favourites")]
136136 onSelectedIndexChanged: {
137137 refreshModel();
138138 }
@@ -192,8 +192,30 @@ Tab {
192192 id: emptyStateComponent
193193 EmptyState {
194194 icon.source: episodesModel.count === 0 ? Qt.resolvedUrl("../graphics/owlSearch.svg") : Qt.resolvedUrl("../graphics/notFound.svg")
195− title: episodesModel.count === 0 ? i18n.tr("No New Episodes") : i18n.tr("No Episodes Found")
196− subTitle: episodesModel.count === 0 ? i18n.tr("No more episodes to listen to!") : i18n.tr("No Episodes found matching the search term.")
195+ title: {
196+ if (episodesModel.count === 0 && episodesPage.header === standardHeader) {
197+ if (episodesPageHeaderSections.selectedIndex === 0)
198+ return i18n.tr("No New Episodes")
199+ else if (episodesPageHeaderSections.selectedIndex === 1)
200+ return i18n.tr("No Downloaded Episodes")
201+ else if (episodesPageHeaderSections.selectedIndex === 2)
202+ return i18n.tr("No Favourited Episodes")
203+ } else {
204+ return i18n.tr("No Episodes Found")
205+ }
206+ }
207+ subTitle: {
208+ if (episodesModel.count === 0 && episodesPage.header === standardHeader) {
209+ if (episodesPageHeaderSections.selectedIndex === 0)
210+ return i18n.tr("No more episodes to listen to!")
211+ else if (episodesPageHeaderSections.selectedIndex === 1)
212+ return i18n.tr("No episodes have been downloaded for offline listening")
213+ else if (episodesPageHeaderSections.selectedIndex === 2)
214+ return i18n.tr("No episodes have been favourited.")
215+ } else {
216+ return i18n.tr("No Episodes found matching the search term.")
217+ }
218+ }
197219 }
198220 }
199221
@@ -440,7 +462,7 @@ Tab {
440462 else {
441463 tx.executeSql("UPDATE Episode SET listened=1 WHERE guid=?", [model.guid])
442464 episodesModel.setProperty(model.index, "listened", 1)
443− if (episodesPage.head.sections.selectedIndex === 0) {
465+ if (episodesPageHeaderSections.selectedIndex === 0) {
444466 episodesModel.remove(model.index, 1)
445467 }
446468 }
@@ -448,6 +470,26 @@ Tab {
448470 }
449471 },
450472
473+ Action {
474+ iconName: model.favourited ? "unlike" : "like"
475+ onTriggered: {
476+ var db = Podcasts.init();
477+ db.transaction(function (tx) {
478+ if (model.favourited) {
479+ tx.executeSql("UPDATE Episode SET favourited=0 WHERE guid=?", [model.guid])
480+ episodesModel.setProperty(model.index, "favourited", 0)
481+ if (episodesPageHeaderSections.selectedIndex === 2) {
482+ episodesModel.remove(model.index, 1)
483+ }
484+ }
485+ else {
486+ tx.executeSql("UPDATE Episode SET favourited=1 WHERE guid=?", [model.guid])
487+ episodesModel.setProperty(model.index, "favourited", 1)
488+ }
489+ });
490+ }
491+ },
492+
451493 Action {
452494 iconName: "info"
453495 onTriggered: {
@@ -515,13 +557,13 @@ Tab {
515557 diff = Math.floor((today - episode.published)/dayToMs)
516558 if (diff < 7 && !episode.listened) {
517559 if (diff < 1) {
518− episodesModel.insert(todayCount, {"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "diff": "Today"})
560+ episodesModel.insert(todayCount, {"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "favourited": episode.favourited, "diff": "Today"})
519561 todayCount++;
520562 } else if (diff < 2) {
521− episodesModel.insert(todayCount + yesterdayCount, {"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "diff": "Yesterday"})
563+ episodesModel.insert(todayCount + yesterdayCount, {"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "favourited": episode.favourited, "diff": "Yesterday"})
522564 yesterdayCount++;
523565 } else {
524− episodesModel.append({"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "diff": "Older"})
566+ episodesModel.append({"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "favourited": episode.favourited, "diff": "Older"})
525567 }
526568 } else if (diff >= 7){
527569 break
@@ -545,7 +587,28 @@ Tab {
545587 for (j=0; j < rs2.rows.length; j++) {
546588 episode = rs2.rows.item(j)
547589 if (episode.downloadedfile) {
548− episodesModel.append({"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "diff": "Null"})
590+ episodesModel.append({"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "favourited": episode.favourited, "diff": "Null"})
591+ }
592+ }
593+
594+ if (podcast.lastupdate === null && !episodesUpdating) {
595+ updateEpisodesDatabase();
596+ }
597+ }
598+ });
599+ }
600+
601+ // Episode Model for the favourites view
602+ else if (episodesPageHeaderSections.selectedIndex === 2) {
603+ db.transaction(function (tx) {
604+ var rs = tx.executeSql("SELECT rowid, * FROM Podcast ORDER BY name ASC");
605+ for (i=0; i < rs.rows.length; i++) {
606+ var podcast = rs.rows.item(i);
607+ var rs2 = tx.executeSql("SELECT rowid, * FROM Episode WHERE podcast=? ORDER BY published DESC", [rs.rows.item(i).rowid]);
608+ for (j=0; j < rs2.rows.length; j++) {
609+ episode = rs2.rows.item(j)
610+ if (episode.favourited) {
611+ episodesModel.append({"guid" : episode.guid, "listened" : episode.listened, "published": episode.published, "name" : episode.name, "description" : episode.description, "duration" : episode.duration, "position" : episode.position, "downloadedfile" : episode.downloadedfile, "image" : podcast.image, "artist" : podcast.artist, "audiourl" : episode.audiourl, "queued": episode.queued, "favourited": episode.favourited, "diff": "Null"})
549612 }
550613 }
551614