Merge lp:~nik90/podbird/add-episodes-batch-actions into lp:podbird/devel

Proposed by Nekhelesh Ramananthan
Status: Merged
Merged at revision: 138
Proposed branch: lp:~nik90/podbird/add-episodes-batch-actions
Merge into: lp:podbird/devel
Diff against target: 655 lines (+291/-145)
4 files modified
app/ui/EpisodesPage.qml (+222/-79)
app/ui/EpisodesTab.qml (+2/-0)
app/ui/PodcastsTab.qml (+1/-1)
po/podbird.nik90.pot (+66/-65)
To merge this branch: bzr merge lp:~nik90/podbird/add-episodes-batch-actions
Reviewer Review Type Date Requested Status
Podbird Developers Pending
Review via email: mp+289381@code.launchpad.net

Description of the change

- Added "%1 items selected" title during multi-select mode to make it more clear
- Changed Podcast remove icon to unsubscribe (used by telegram)
- Added batch actions to episodes page
- Converted episodes page to use PageHeader

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'app/ui/EpisodesPage.qml'
--- app/ui/EpisodesPage.qml 2016-03-16 15:30:47 +0000
+++ app/ui/EpisodesPage.qml 2016-03-17 15:08:31 +0000
@@ -29,8 +29,6 @@
29 id: episodesPage29 id: episodesPage
3030
31 visible: false31 visible: false
32 title: i18n.tr("Podcast")
33 flickable: null
3432
35 property string episodeName33 property string episodeName
36 property string episodeId34 property string episodeId
@@ -47,81 +45,205 @@
47 tempGuid = downloader.downloadingGuid45 tempGuid = downloader.downloadingGuid
48 }46 }
4947
50 head.contents: Label {48 header: standardHeader
51 text: title49
52 anchors.fill: parent50 PageHeader {
53 anchors.margins: units.gu(0.5)51 id: standardHeader
54 verticalAlignment: Text.AlignVCenter52 title: i18n.tr("Podcast")
5553 flickable: null
56 textSize: Label.XLarge54
57 fontSizeMode: Text.Fit55 StyleHints {
5856 backgroundColor: podbird.appTheme.background
59 maximumLineCount: 357 }
60 minimumPointSize: 858
61 elide: Text.Right59 trailingActionBar.actions: [
62 wrapMode: Text.WordWrap60 Action {
63 }61 iconName: "search"
6462 text: i18n.tr("Search Episode")
65 state: "default"63 onTriggered: {
66 states: [64 episodesPage.header = searchHeader
67 PageHeadState {65 searchField.item.forceActiveFocus()
68 name: "default"66 }
69 head: episodesPage.head67 },
68
69 Action {
70 text: i18n.tr("Unsubscribe")
71 iconName: "system-log-out"
72 onTriggered: {
73 PopupUtils.open(confirmDeleteDialog, episodesPage);
74 }
75 }
76 ]
77 }
78
79 PageHeader {
80 id: searchHeader
81 visible: episodesPage.header === searchHeader
82 flickable: null
83
84 leadingActionBar.actions: Action {
85 iconName: "back"
86 onTriggered: {
87 episodeList.forceActiveFocus()
88 episodesPage.header = standardHeader
89 episodeList.positionViewAtBeginning()
90 }
91 }
92
93 StyleHints {
94 backgroundColor: podbird.appTheme.background
95 }
96
97 contents: Loader {
98 id: searchField
99 sourceComponent: episodesPage.header === searchHeader ? searchFieldComponent : undefined
100 anchors.left: parent ? parent.left : undefined
101 anchors.right: parent ? parent.right : undefined
102 anchors.verticalCenter: parent ? parent.verticalCenter : undefined
103 }
104 }
105
106 PageHeader {
107 id: selectionHeader
108 visible: episodeList.ViewItems.selectMode
109 // TRANSLATORS: This is the page title. Keep it short. Otherwise it will just be elided.
110 title: i18n.tr("%1 item selected", "%1 items selected", episodeList.ViewItems.selectedIndices.length).arg(episodeList.ViewItems.selectedIndices.length)
111
112 onVisibleChanged: {
113 if (visible) {
114 episodesPage.header = selectionHeader
115 }
116 }
117
118 StyleHints {
119 backgroundColor: podbird.appTheme.background
120 }
121
122 leadingActionBar.actions: [
123 Action {
124 iconName: "back"
125 text: i18n.tr("Back")
126 onTriggered: {
127 episodeList.closeSelection()
128 }
129 }
130 ]
131
132 trailingActionBar {
133 numberOfSlots: 6
70 actions: [134 actions: [
71 Action {135 Action {
72 iconName: "search"
73 text: i18n.tr("Search Episode")
74 onTriggered: {
75 episodesPage.state = "search"
76 searchField.item.forceActiveFocus()
77 }
78 },
79
80 Action {
81 iconName: "select"136 iconName: "select"
82 text: i18n.tr("Mark all listened")137 text: i18n.tr("Mark Listened")
83 onTriggered: {138 enabled: episodeList.ViewItems.selectedIndices.length !== 0
84 var db = Podcasts.init();139 visible: episodesPage.mode !== "listened"
85 db.transaction(function (tx) {140 onTriggered: {
86 tx.executeSql("UPDATE Episode SET listened=1 WHERE podcast=?", [episodeId]);141 var db = Podcasts.init();
87 refreshModel();142 db.transaction(function (tx) {
88 });143 for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
89 }144 var index = episodeList.ViewItems.selectedIndices[i]
90 },145 tx.executeSql("UPDATE Episode SET listened=1 WHERE guid=?", [episodeModel.get(index).guid]);
91146 }
92 Action {147 });
93 text: i18n.tr("Unsubscribe")148
149 refreshModel();
150 episodeList.closeSelection()
151 }
152 },
153
154 Action {
155 iconName: "save"
156 text: i18n.tr("Download episode(s)")
157 enabled: episodeList.ViewItems.selectedIndices.length !== 0
158 visible: episodesPage.mode !== "downloaded"
159
160 onTriggered: {
161 var db = Podcasts.init();
162 db.transaction(function (tx) {
163 for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
164 var index = episodeList.ViewItems.selectedIndices[i]
165 if (!episodeModel.get(index).downloadedfile) {
166 episodeModel.setProperty(index, "queued", 1)
167 tx.executeSql("UPDATE Episode SET queued=1 WHERE guid = ?", [episodeModel.get(index).guid]);
168 if (episodeModel.get(index).audiourl) {
169 podbird.downloadEpisode(episodeModel.get(index).image, episodeModel.get(index).name, episodeModel.get(index).guid, episodeModel.get(index).audiourl)
170 } else {
171 console.log("[ERROR]: Invalid download url: " + episodeModel.get(index).audiourl)
172 }
173 }
174 }
175 });
176
177 refreshModel();
178 episodeList.closeSelection()
179 }
180 },
181
182 Action {
94 iconName: "delete"183 iconName: "delete"
95 onTriggered: {184 text: i18n.tr("Delete episode(s)")
96 PopupUtils.open(confirmDeleteDialog, episodesPage);185 enabled: episodeList.ViewItems.selectedIndices.length !== 0
186
187 onTriggered: {
188 var db = Podcasts.init();
189 db.transaction(function (tx) {
190 for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
191 var index = episodeList.ViewItems.selectedIndices[i]
192 if (episodeModel.get(index).downloadedfile) {
193 fileManager.deleteFile(episodeModel.get(index).downloadedfile);
194 tx.executeSql("UPDATE Episode SET downloadedfile = NULL WHERE guid = ?", [episodeModel.get(index).guid]);
195 episodeModel.setProperty(index, "downloadedfile", "")
196 }
197 }
198 });
199
200 refreshModel();
201 episodeList.closeSelection()
202 }
203 },
204
205 Action {
206 iconName: "like"
207 text: i18n.tr("Favourite episode(s)")
208 enabled: episodeList.ViewItems.selectedIndices.length !== 0
209
210 onTriggered: {
211 var db = Podcasts.init();
212 db.transaction(function (tx) {
213 for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
214 var index = episodeList.ViewItems.selectedIndices[i]
215 if (!episodeModel.get(index).favourited) {
216 tx.executeSql("UPDATE Episode SET favourited=1 WHERE guid=?", [episodeModel.get(index).guid])
217 episodeModel.setProperty(index, "favourited", 1)
218 }
219 }
220 });
221
222 refreshModel();
223 episodeList.closeSelection()
224 }
225 },
226
227 Action {
228 iconName: "add-to-playlist"
229 text: i18n.tr("Add to queue")
230 enabled: episodeList.ViewItems.selectedIndices.length !== 0
231
232 onTriggered: {
233 for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
234 var index = episodeList.ViewItems.selectedIndices[i]
235 if (episodeModel.get(index).audiourl) {
236 var url = episodeModel.get(index).downloadedfile ? "file://" + episodeModel.get(index).downloadedfile : episodeModel.get(index).audiourl
237 player.addEpisodeToQueue(episodeModel.get(index).guid, episodeModel.get(index).image, episodeModel.get(index).name, episodeModel.get(index).artist, url)
238 }
239 }
240
241 episodeList.closeSelection()
97 }242 }
98 }243 }
99
100 ]244 ]
101 },
102
103 PageHeadState {
104 name: "search"
105 head: episodesPage.head
106
107 backAction: Action {
108 iconName: "back"
109 onTriggered: {
110 episodeList.forceActiveFocus()
111 episodesPage.state = "default"
112 episodeList.positionViewAtBeginning()
113 }
114 }
115
116 contents: Loader {
117 id: searchField
118 sourceComponent: episodesPage.state === "search" ? searchFieldComponent : undefined
119 anchors.left: parent ? parent.left : undefined
120 anchors.right: parent ? parent.right : undefined
121 anchors.rightMargin: units.gu(2)
122 }
123 }245 }
124 ]246 }
125247
126 onVisibleChanged: {248 onVisibleChanged: {
127 if (!visible) {249 if (!visible) {
@@ -252,8 +374,8 @@
252 verticalCenterOffset: Qt.inputMethod.visible ? units.gu(4) : 0374 verticalCenterOffset: Qt.inputMethod.visible ? units.gu(4) : 0
253 }375 }
254376
255 sourceComponent: (episodesPage.state === "search" && sortedEpisodeModel.count === 0) ? emptyStateComponent377 sourceComponent: (episodesPage.header === searchHeader && sortedEpisodeModel.count === 0) ? emptyStateComponent
256 : undefined378 : undefined
257 }379 }
258380
259 Component {381 Component {
@@ -273,13 +395,16 @@
273 id: sortedEpisodeModel395 id: sortedEpisodeModel
274 model: episodeModel396 model: episodeModel
275 filter.property: "name"397 filter.property: "name"
276 filter.pattern: episodesPage.state === "search" && searchField.status == Loader.Ready ? RegExp(searchField.item.text, "gi")398 filter.pattern: episodesPage.header === searchHeader && searchField.status == Loader.Ready ? RegExp(searchField.item.text, "gi")
277 : RegExp("", "gi")399 : RegExp("", "gi")
278 }400 }
279401
280 ListView {402 ListView {
281 id: episodeList403 id: episodeList
282404
405 signal clearSelection()
406 signal closeSelection()
407
283 Component.onCompleted: {408 Component.onCompleted: {
284 // FIXME: workaround for qtubuntu not returning values depending on the grid unit definition409 // FIXME: workaround for qtubuntu not returning values depending on the grid unit definition
285 // for Flickable.maximumFlickVelocity and Flickable.flickDeceleration410 // for Flickable.maximumFlickVelocity and Flickable.flickDeceleration
@@ -288,7 +413,7 @@
288 flickDeceleration = flickDeceleration * scaleFactor;413 flickDeceleration = flickDeceleration * scaleFactor;
289 }414 }
290415
291 anchors.fill: parent416 anchors { fill: parent; topMargin: episodesPage.header.height }
292 model: sortedEpisodeModel417 model: sortedEpisodeModel
293 clip: true418 clip: true
294419
@@ -298,8 +423,8 @@
298 id: coverArtContainer423 id: coverArtContainer
299424
300 width: episodesPage.width425 width: episodesPage.width
301 visible: episodesPage.state !== "search" && sortedEpisodeModel.count !== 0426 visible: episodesPage.header !== searchHeader && sortedEpisodeModel.count !== 0
302 height: episodesPage.state !== "search" && sortedEpisodeModel.count !== 0 ? cover.height + units.gu(6) : 0427 height: episodesPage.header !== searchHeader && sortedEpisodeModel.count !== 0 ? cover.height + units.gu(6) : 0
303428
304 Image {429 Image {
305 id:cover430 id:cover
@@ -549,11 +674,29 @@
549674
550 onClicked: {675 onClicked: {
551 Haptics.play()676 Haptics.play()
552 if (currentGuid !== model.guid) {677 if (selectMode) {
553 currentUrl = model.downloadedfile ? "file://" + model.downloadedfile : model.audiourl;678 selected = !selected
554 player.playEpisode(model.guid, model.image, model.name, model.artist, currentUrl)679 } else {
680 if (currentGuid !== model.guid) {
681 currentUrl = model.downloadedfile ? "file://" + model.downloadedfile : model.audiourl;
682 player.playEpisode(model.guid, model.image, model.name, model.artist, currentUrl)
683 }
555 }684 }
556 }685 }
686
687 onPressAndHold: {
688 ListView.view.ViewItems.selectMode = !ListView.view.ViewItems.selectMode
689 }
690 }
691
692 onClearSelection: {
693 ViewItems.selectedIndices = []
694 }
695
696 onCloseSelection: {
697 clearSelection()
698 ViewItems.selectMode = false
699 episodesPage.header = standardHeader
557 }700 }
558701
559 PullToRefresh {702 PullToRefresh {
560703
=== modified file 'app/ui/EpisodesTab.qml'
--- app/ui/EpisodesTab.qml 2016-03-16 15:35:38 +0000
+++ app/ui/EpisodesTab.qml 2016-03-17 15:08:31 +0000
@@ -124,6 +124,8 @@
124 PageHeader {124 PageHeader {
125 id: selectionHeader125 id: selectionHeader
126 visible: episodeList.ViewItems.selectMode126 visible: episodeList.ViewItems.selectMode
127 // TRANSLATORS: This is the page title. Keep it short. Otherwise it will just be elided.
128 title: i18n.tr("%1 item selected", "%1 items selected", episodeList.ViewItems.selectedIndices.length).arg(episodeList.ViewItems.selectedIndices.length)
127129
128 onVisibleChanged: {130 onVisibleChanged: {
129 if (visible) {131 if (visible) {
130132
=== modified file 'app/ui/PodcastsTab.qml'
--- app/ui/PodcastsTab.qml 2016-03-17 02:19:48 +0000
+++ app/ui/PodcastsTab.qml 2016-03-17 15:08:31 +0000
@@ -228,7 +228,7 @@
228 leadingActions: ListItemActions {228 leadingActions: ListItemActions {
229 actions: [229 actions: [
230 Action {230 Action {
231 iconName: "delete"231 iconName: "system-log-out"
232 onTriggered: {232 onTriggered: {
233 var db = Podcasts.init();233 var db = Podcasts.init();
234 db.transaction(function (tx) {234 db.transaction(function (tx) {
235235
=== modified file 'po/podbird.nik90.pot'
--- po/podbird.nik90.pot 2016-03-17 02:19:48 +0000
+++ po/podbird.nik90.pot 2016-03-17 15:08:31 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: \n"9"Project-Id-Version: \n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2016-03-17 07:43+0530\n"11"POT-Creation-Date: 2016-03-17 20:36+0530\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,8 +22,8 @@
22msgid "Episodes"22msgid "Episodes"
23msgstr ""23msgstr ""
2424
25#: ../app/components/TabsList.qml:3525#: ../app/components/TabsList.qml:35 ../app/ui/SearchPage.qml:41
26msgid "Add new podcast"26msgid "Add New Podcasts"
27msgstr ""27msgstr ""
2828
29#: ../app/components/TabsList.qml:43 ../app/ui/PodcastsTab.qml:4229#: ../app/components/TabsList.qml:43 ../app/ui/PodcastsTab.qml:42
@@ -154,67 +154,96 @@
154msgid "Dark"154msgid "Dark"
155msgstr ""155msgstr ""
156156
157#: ../app/ui/EpisodesPage.qml:32157#: ../app/ui/EpisodesPage.qml:52
158msgid "Podcast"158msgid "Podcast"
159msgstr ""159msgstr ""
160160
161#: ../app/ui/EpisodesPage.qml:73 ../app/ui/EpisodesTab.qml:62161#: ../app/ui/EpisodesPage.qml:62 ../app/ui/EpisodesTab.qml:62
162msgid "Search Episode"162msgid "Search Episode"
163msgstr ""163msgstr ""
164164
165#: ../app/ui/EpisodesPage.qml:82165#: ../app/ui/EpisodesPage.qml:70 ../app/ui/EpisodesPage.qml:306
166msgid "Mark all listened"
167msgstr ""
168
169#: ../app/ui/EpisodesPage.qml:93 ../app/ui/EpisodesPage.qml:184
170#: ../app/ui/SearchPage.qml:275166#: ../app/ui/SearchPage.qml:275
171msgid "Unsubscribe"167msgid "Unsubscribe"
172msgstr ""168msgstr ""
173169
174#: ../app/ui/EpisodesPage.qml:136 ../app/ui/EpisodesTab.qml:120170#. TRANSLATORS: This is the page title. Keep it short. Otherwise it will just be elided.
171#: ../app/ui/EpisodesPage.qml:110 ../app/ui/EpisodesTab.qml:128
172#, qt-format
173msgid "%1 item selected"
174msgid_plural "%1 items selected"
175msgstr[0] ""
176msgstr[1] ""
177
178#: ../app/ui/EpisodesPage.qml:125 ../app/ui/EpisodesTab.qml:143
179#: ../app/ui/NowPlayingPage.qml:42
180msgid "Back"
181msgstr ""
182
183#: ../app/ui/EpisodesPage.qml:137 ../app/ui/EpisodesTab.qml:155
184msgid "Mark Listened"
185msgstr ""
186
187#: ../app/ui/EpisodesPage.qml:156 ../app/ui/EpisodesTab.qml:173
188msgid "Download episode(s)"
189msgstr ""
190
191#: ../app/ui/EpisodesPage.qml:184 ../app/ui/EpisodesTab.qml:201
192msgid "Delete episode(s)"
193msgstr ""
194
195#: ../app/ui/EpisodesPage.qml:207 ../app/ui/EpisodesTab.qml:224
196msgid "Favourite episode(s)"
197msgstr ""
198
199#: ../app/ui/EpisodesPage.qml:229 ../app/ui/EpisodesTab.qml:270
200msgid "Add to queue"
201msgstr ""
202
203#: ../app/ui/EpisodesPage.qml:258 ../app/ui/EpisodesTab.qml:120
175msgid "Search episode"204msgid "Search episode"
176msgstr ""205msgstr ""
177206
178#: ../app/ui/EpisodesPage.qml:181207#: ../app/ui/EpisodesPage.qml:303
179msgid "Unsubscribe Confirmation"208msgid "Unsubscribe Confirmation"
180msgstr ""209msgstr ""
181210
182#: ../app/ui/EpisodesPage.qml:182211#: ../app/ui/EpisodesPage.qml:304
183#, qt-format212#, qt-format
184msgid "Are you sure you want to unsubscribe from <b>%1</b>?"213msgid "Are you sure you want to unsubscribe from <b>%1</b>?"
185msgstr ""214msgstr ""
186215
187#: ../app/ui/EpisodesPage.qml:201 ../app/ui/SearchPage.qml:130216#: ../app/ui/EpisodesPage.qml:323 ../app/ui/SearchPage.qml:130
188#: ../app/ui/SettingsPage.qml:83 ../app/ui/SettingsPage.qml:118217#: ../app/ui/SettingsPage.qml:83 ../app/ui/SettingsPage.qml:118
189msgid "Cancel"218msgid "Cancel"
190msgstr ""219msgstr ""
191220
192#: ../app/ui/EpisodesPage.qml:223 ../app/ui/EpisodesTab.qml:405221#: ../app/ui/EpisodesPage.qml:345 ../app/ui/EpisodesTab.qml:407
193msgid "Episode Description"222msgid "Episode Description"
194msgstr ""223msgstr ""
195224
196#: ../app/ui/EpisodesPage.qml:235 ../app/ui/EpisodesTab.qml:417225#: ../app/ui/EpisodesPage.qml:357 ../app/ui/EpisodesTab.qml:419
197#: ../app/ui/SearchPage.qml:179226#: ../app/ui/SearchPage.qml:179
198msgid "Close"227msgid "Close"
199msgstr ""228msgstr ""
200229
201#: ../app/ui/EpisodesPage.qml:263230#: ../app/ui/EpisodesPage.qml:385
202msgid "No episodes found"231msgid "No episodes found"
203msgstr ""232msgstr ""
204233
205#: ../app/ui/EpisodesPage.qml:264234#: ../app/ui/EpisodesPage.qml:386
206msgid "No episodes found matching the search term."235msgid "No episodes found matching the search term."
207msgstr ""236msgstr ""
208237
209#: ../app/ui/EpisodesPage.qml:378238#: ../app/ui/EpisodesPage.qml:503
210msgid "Unheard"239msgid "Unheard"
211msgstr ""240msgstr ""
212241
213#: ../app/ui/EpisodesPage.qml:395242#: ../app/ui/EpisodesPage.qml:520
214msgid "Listened"243msgid "Listened"
215msgstr ""244msgstr ""
216245
217#: ../app/ui/EpisodesPage.qml:414246#: ../app/ui/EpisodesPage.qml:539
218msgid "Downloaded"247msgid "Downloaded"
219msgstr ""248msgstr ""
220249
@@ -230,83 +259,59 @@
230msgid "Favourites"259msgid "Favourites"
231msgstr ""260msgstr ""
232261
233#: ../app/ui/EpisodesTab.qml:141 ../app/ui/NowPlayingPage.qml:42262#: ../app/ui/EpisodesTab.qml:247
234msgid "Back"
235msgstr ""
236
237#: ../app/ui/EpisodesTab.qml:153
238msgid "Mark Listened"
239msgstr ""
240
241#: ../app/ui/EpisodesTab.qml:171
242msgid "Download episode(s)"
243msgstr ""
244
245#: ../app/ui/EpisodesTab.qml:199
246msgid "Delete episode(s)"
247msgstr ""
248
249#: ../app/ui/EpisodesTab.qml:222
250msgid "Favourite episode(s)"
251msgstr ""
252
253#: ../app/ui/EpisodesTab.qml:245
254msgid "Unfavourite episode(s)"263msgid "Unfavourite episode(s)"
255msgstr ""264msgstr ""
256265
257#: ../app/ui/EpisodesTab.qml:268266#: ../app/ui/EpisodesTab.qml:310
258msgid "Add to queue"
259msgstr ""
260
261#: ../app/ui/EpisodesTab.qml:308
262msgid "No New Episodes"267msgid "No New Episodes"
263msgstr ""268msgstr ""
264269
265#: ../app/ui/EpisodesTab.qml:310270#: ../app/ui/EpisodesTab.qml:312
266msgid "No Downloaded Episodes"271msgid "No Downloaded Episodes"
267msgstr ""272msgstr ""
268273
269#: ../app/ui/EpisodesTab.qml:312274#: ../app/ui/EpisodesTab.qml:314
270msgid "No Favourited Episodes"275msgid "No Favourited Episodes"
271msgstr ""276msgstr ""
272277
273#: ../app/ui/EpisodesTab.qml:314278#: ../app/ui/EpisodesTab.qml:316
274msgid "No Episodes Found"279msgid "No Episodes Found"
275msgstr ""280msgstr ""
276281
277#: ../app/ui/EpisodesTab.qml:320282#: ../app/ui/EpisodesTab.qml:322
278msgid "No more episodes to listen to!"283msgid "No more episodes to listen to!"
279msgstr ""284msgstr ""
280285
281#: ../app/ui/EpisodesTab.qml:322286#: ../app/ui/EpisodesTab.qml:324
282msgid "No episodes have been downloaded for offline listening"287msgid "No episodes have been downloaded for offline listening"
283msgstr ""288msgstr ""
284289
285#: ../app/ui/EpisodesTab.qml:324290#: ../app/ui/EpisodesTab.qml:326
286msgid "No episodes have been favourited."291msgid "No episodes have been favourited."
287msgstr ""292msgstr ""
288293
289#: ../app/ui/EpisodesTab.qml:326294#: ../app/ui/EpisodesTab.qml:328
290msgid "No Episodes found matching the search term."295msgid "No Episodes found matching the search term."
291msgstr ""296msgstr ""
292297
293#: ../app/ui/EpisodesTab.qml:456298#: ../app/ui/EpisodesTab.qml:458
294msgid "Downloads in progress"299msgid "Downloads in progress"
295msgstr ""300msgstr ""
296301
297#: ../app/ui/EpisodesTab.qml:496302#: ../app/ui/EpisodesTab.qml:498
298msgid "Downloaded episodes"303msgid "Downloaded episodes"
299msgstr ""304msgstr ""
300305
301#: ../app/ui/EpisodesTab.qml:506306#: ../app/ui/EpisodesTab.qml:508
302msgid "Today"307msgid "Today"
303msgstr ""308msgstr ""
304309
305#: ../app/ui/EpisodesTab.qml:510310#: ../app/ui/EpisodesTab.qml:512
306msgid "Yesterday"311msgid "Yesterday"
307msgstr ""312msgstr ""
308313
309#: ../app/ui/EpisodesTab.qml:514314#: ../app/ui/EpisodesTab.qml:516
310msgid "Older"315msgid "Older"
311msgstr ""316msgstr ""
312317
@@ -368,10 +373,6 @@
368msgstr[0] ""373msgstr[0] ""
369msgstr[1] ""374msgstr[1] ""
370375
371#: ../app/ui/SearchPage.qml:41
372msgid "Add New Podcasts"
373msgstr ""
374
375#: ../app/ui/SearchPage.qml:63376#: ../app/ui/SearchPage.qml:63
376msgid "Add Podcast"377msgid "Add Podcast"
377msgstr ""378msgstr ""
@@ -569,10 +570,10 @@
569msgid "Finish"570msgid "Finish"
570msgstr ""571msgstr ""
571572
572#: /home/krnekhelesh/Development/reintroduce-add-podcast-tab-build/po/Podbird.desktop.in.h:1573#: /home/krnekhelesh/Development/fix-minor-episodes-page-build/po/Podbird.desktop.in.h:1
573msgid "The chirpiest podcast manager for Ubuntu"574msgid "The chirpiest podcast manager for Ubuntu"
574msgstr ""575msgstr ""
575576
576#: /home/krnekhelesh/Development/reintroduce-add-podcast-tab-build/po/Podbird.desktop.in.h:2577#: /home/krnekhelesh/Development/fix-minor-episodes-page-build/po/Podbird.desktop.in.h:2
577msgid "podcast;audio;itunes;broadcast;digital;stream;podcatcher;video;vodcast;"578msgid "podcast;audio;itunes;broadcast;digital;stream;podcatcher;video;vodcast;"
578msgstr ""579msgstr ""

Subscribers

People subscribed via source and target branches