@@ -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