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
1=== modified file 'app/ui/EpisodesPage.qml'
2--- app/ui/EpisodesPage.qml 2016-03-16 15:30:47 +0000
3+++ app/ui/EpisodesPage.qml 2016-03-17 15:08:31 +0000
4@@ -29,8 +29,6 @@
5 id: episodesPage
6
7 visible: false
8- title: i18n.tr("Podcast")
9- flickable: null
10
11 property string episodeName
12 property string episodeId
13@@ -47,81 +45,205 @@
14 tempGuid = downloader.downloadingGuid
15 }
16
17- head.contents: Label {
18- text: title
19- anchors.fill: parent
20- anchors.margins: units.gu(0.5)
21- verticalAlignment: Text.AlignVCenter
22-
23- textSize: Label.XLarge
24- fontSizeMode: Text.Fit
25-
26- maximumLineCount: 3
27- minimumPointSize: 8
28- elide: Text.Right
29- wrapMode: Text.WordWrap
30- }
31-
32- state: "default"
33- states: [
34- PageHeadState {
35- name: "default"
36- head: episodesPage.head
37+ header: standardHeader
38+
39+ PageHeader {
40+ id: standardHeader
41+ title: i18n.tr("Podcast")
42+ flickable: null
43+
44+ StyleHints {
45+ backgroundColor: podbird.appTheme.background
46+ }
47+
48+ trailingActionBar.actions: [
49+ Action {
50+ iconName: "search"
51+ text: i18n.tr("Search Episode")
52+ onTriggered: {
53+ episodesPage.header = searchHeader
54+ searchField.item.forceActiveFocus()
55+ }
56+ },
57+
58+ Action {
59+ text: i18n.tr("Unsubscribe")
60+ iconName: "system-log-out"
61+ onTriggered: {
62+ PopupUtils.open(confirmDeleteDialog, episodesPage);
63+ }
64+ }
65+ ]
66+ }
67+
68+ PageHeader {
69+ id: searchHeader
70+ visible: episodesPage.header === searchHeader
71+ flickable: null
72+
73+ leadingActionBar.actions: Action {
74+ iconName: "back"
75+ onTriggered: {
76+ episodeList.forceActiveFocus()
77+ episodesPage.header = standardHeader
78+ episodeList.positionViewAtBeginning()
79+ }
80+ }
81+
82+ StyleHints {
83+ backgroundColor: podbird.appTheme.background
84+ }
85+
86+ contents: Loader {
87+ id: searchField
88+ sourceComponent: episodesPage.header === searchHeader ? searchFieldComponent : undefined
89+ anchors.left: parent ? parent.left : undefined
90+ anchors.right: parent ? parent.right : undefined
91+ anchors.verticalCenter: parent ? parent.verticalCenter : undefined
92+ }
93+ }
94+
95+ PageHeader {
96+ id: selectionHeader
97+ visible: episodeList.ViewItems.selectMode
98+ // TRANSLATORS: This is the page title. Keep it short. Otherwise it will just be elided.
99+ title: i18n.tr("%1 item selected", "%1 items selected", episodeList.ViewItems.selectedIndices.length).arg(episodeList.ViewItems.selectedIndices.length)
100+
101+ onVisibleChanged: {
102+ if (visible) {
103+ episodesPage.header = selectionHeader
104+ }
105+ }
106+
107+ StyleHints {
108+ backgroundColor: podbird.appTheme.background
109+ }
110+
111+ leadingActionBar.actions: [
112+ Action {
113+ iconName: "back"
114+ text: i18n.tr("Back")
115+ onTriggered: {
116+ episodeList.closeSelection()
117+ }
118+ }
119+ ]
120+
121+ trailingActionBar {
122+ numberOfSlots: 6
123 actions: [
124 Action {
125- iconName: "search"
126- text: i18n.tr("Search Episode")
127- onTriggered: {
128- episodesPage.state = "search"
129- searchField.item.forceActiveFocus()
130- }
131- },
132-
133- Action {
134 iconName: "select"
135- text: i18n.tr("Mark all listened")
136- onTriggered: {
137- var db = Podcasts.init();
138- db.transaction(function (tx) {
139- tx.executeSql("UPDATE Episode SET listened=1 WHERE podcast=?", [episodeId]);
140- refreshModel();
141- });
142- }
143- },
144-
145- Action {
146- text: i18n.tr("Unsubscribe")
147+ text: i18n.tr("Mark Listened")
148+ enabled: episodeList.ViewItems.selectedIndices.length !== 0
149+ visible: episodesPage.mode !== "listened"
150+ onTriggered: {
151+ var db = Podcasts.init();
152+ db.transaction(function (tx) {
153+ for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
154+ var index = episodeList.ViewItems.selectedIndices[i]
155+ tx.executeSql("UPDATE Episode SET listened=1 WHERE guid=?", [episodeModel.get(index).guid]);
156+ }
157+ });
158+
159+ refreshModel();
160+ episodeList.closeSelection()
161+ }
162+ },
163+
164+ Action {
165+ iconName: "save"
166+ text: i18n.tr("Download episode(s)")
167+ enabled: episodeList.ViewItems.selectedIndices.length !== 0
168+ visible: episodesPage.mode !== "downloaded"
169+
170+ onTriggered: {
171+ var db = Podcasts.init();
172+ db.transaction(function (tx) {
173+ for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
174+ var index = episodeList.ViewItems.selectedIndices[i]
175+ if (!episodeModel.get(index).downloadedfile) {
176+ episodeModel.setProperty(index, "queued", 1)
177+ tx.executeSql("UPDATE Episode SET queued=1 WHERE guid = ?", [episodeModel.get(index).guid]);
178+ if (episodeModel.get(index).audiourl) {
179+ podbird.downloadEpisode(episodeModel.get(index).image, episodeModel.get(index).name, episodeModel.get(index).guid, episodeModel.get(index).audiourl)
180+ } else {
181+ console.log("[ERROR]: Invalid download url: " + episodeModel.get(index).audiourl)
182+ }
183+ }
184+ }
185+ });
186+
187+ refreshModel();
188+ episodeList.closeSelection()
189+ }
190+ },
191+
192+ Action {
193 iconName: "delete"
194- onTriggered: {
195- PopupUtils.open(confirmDeleteDialog, episodesPage);
196+ text: i18n.tr("Delete episode(s)")
197+ enabled: episodeList.ViewItems.selectedIndices.length !== 0
198+
199+ onTriggered: {
200+ var db = Podcasts.init();
201+ db.transaction(function (tx) {
202+ for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
203+ var index = episodeList.ViewItems.selectedIndices[i]
204+ if (episodeModel.get(index).downloadedfile) {
205+ fileManager.deleteFile(episodeModel.get(index).downloadedfile);
206+ tx.executeSql("UPDATE Episode SET downloadedfile = NULL WHERE guid = ?", [episodeModel.get(index).guid]);
207+ episodeModel.setProperty(index, "downloadedfile", "")
208+ }
209+ }
210+ });
211+
212+ refreshModel();
213+ episodeList.closeSelection()
214+ }
215+ },
216+
217+ Action {
218+ iconName: "like"
219+ text: i18n.tr("Favourite episode(s)")
220+ enabled: episodeList.ViewItems.selectedIndices.length !== 0
221+
222+ onTriggered: {
223+ var db = Podcasts.init();
224+ db.transaction(function (tx) {
225+ for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
226+ var index = episodeList.ViewItems.selectedIndices[i]
227+ if (!episodeModel.get(index).favourited) {
228+ tx.executeSql("UPDATE Episode SET favourited=1 WHERE guid=?", [episodeModel.get(index).guid])
229+ episodeModel.setProperty(index, "favourited", 1)
230+ }
231+ }
232+ });
233+
234+ refreshModel();
235+ episodeList.closeSelection()
236+ }
237+ },
238+
239+ Action {
240+ iconName: "add-to-playlist"
241+ text: i18n.tr("Add to queue")
242+ enabled: episodeList.ViewItems.selectedIndices.length !== 0
243+
244+ onTriggered: {
245+ for (var i=0; i<episodeList.ViewItems.selectedIndices.length; i++) {
246+ var index = episodeList.ViewItems.selectedIndices[i]
247+ if (episodeModel.get(index).audiourl) {
248+ var url = episodeModel.get(index).downloadedfile ? "file://" + episodeModel.get(index).downloadedfile : episodeModel.get(index).audiourl
249+ player.addEpisodeToQueue(episodeModel.get(index).guid, episodeModel.get(index).image, episodeModel.get(index).name, episodeModel.get(index).artist, url)
250+ }
251+ }
252+
253+ episodeList.closeSelection()
254 }
255 }
256-
257 ]
258- },
259-
260- PageHeadState {
261- name: "search"
262- head: episodesPage.head
263-
264- backAction: Action {
265- iconName: "back"
266- onTriggered: {
267- episodeList.forceActiveFocus()
268- episodesPage.state = "default"
269- episodeList.positionViewAtBeginning()
270- }
271- }
272-
273- contents: Loader {
274- id: searchField
275- sourceComponent: episodesPage.state === "search" ? searchFieldComponent : undefined
276- anchors.left: parent ? parent.left : undefined
277- anchors.right: parent ? parent.right : undefined
278- anchors.rightMargin: units.gu(2)
279- }
280 }
281- ]
282+ }
283
284 onVisibleChanged: {
285 if (!visible) {
286@@ -252,8 +374,8 @@
287 verticalCenterOffset: Qt.inputMethod.visible ? units.gu(4) : 0
288 }
289
290- sourceComponent: (episodesPage.state === "search" && sortedEpisodeModel.count === 0) ? emptyStateComponent
291- : undefined
292+ sourceComponent: (episodesPage.header === searchHeader && sortedEpisodeModel.count === 0) ? emptyStateComponent
293+ : undefined
294 }
295
296 Component {
297@@ -273,13 +395,16 @@
298 id: sortedEpisodeModel
299 model: episodeModel
300 filter.property: "name"
301- filter.pattern: episodesPage.state === "search" && searchField.status == Loader.Ready ? RegExp(searchField.item.text, "gi")
302- : RegExp("", "gi")
303+ filter.pattern: episodesPage.header === searchHeader && searchField.status == Loader.Ready ? RegExp(searchField.item.text, "gi")
304+ : RegExp("", "gi")
305 }
306
307 ListView {
308 id: episodeList
309
310+ signal clearSelection()
311+ signal closeSelection()
312+
313 Component.onCompleted: {
314 // FIXME: workaround for qtubuntu not returning values depending on the grid unit definition
315 // for Flickable.maximumFlickVelocity and Flickable.flickDeceleration
316@@ -288,7 +413,7 @@
317 flickDeceleration = flickDeceleration * scaleFactor;
318 }
319
320- anchors.fill: parent
321+ anchors { fill: parent; topMargin: episodesPage.header.height }
322 model: sortedEpisodeModel
323 clip: true
324
325@@ -298,8 +423,8 @@
326 id: coverArtContainer
327
328 width: episodesPage.width
329- visible: episodesPage.state !== "search" && sortedEpisodeModel.count !== 0
330- height: episodesPage.state !== "search" && sortedEpisodeModel.count !== 0 ? cover.height + units.gu(6) : 0
331+ visible: episodesPage.header !== searchHeader && sortedEpisodeModel.count !== 0
332+ height: episodesPage.header !== searchHeader && sortedEpisodeModel.count !== 0 ? cover.height + units.gu(6) : 0
333
334 Image {
335 id:cover
336@@ -549,11 +674,29 @@
337
338 onClicked: {
339 Haptics.play()
340- if (currentGuid !== model.guid) {
341- currentUrl = model.downloadedfile ? "file://" + model.downloadedfile : model.audiourl;
342- player.playEpisode(model.guid, model.image, model.name, model.artist, currentUrl)
343+ if (selectMode) {
344+ selected = !selected
345+ } else {
346+ if (currentGuid !== model.guid) {
347+ currentUrl = model.downloadedfile ? "file://" + model.downloadedfile : model.audiourl;
348+ player.playEpisode(model.guid, model.image, model.name, model.artist, currentUrl)
349+ }
350 }
351 }
352+
353+ onPressAndHold: {
354+ ListView.view.ViewItems.selectMode = !ListView.view.ViewItems.selectMode
355+ }
356+ }
357+
358+ onClearSelection: {
359+ ViewItems.selectedIndices = []
360+ }
361+
362+ onCloseSelection: {
363+ clearSelection()
364+ ViewItems.selectMode = false
365+ episodesPage.header = standardHeader
366 }
367
368 PullToRefresh {
369
370=== modified file 'app/ui/EpisodesTab.qml'
371--- app/ui/EpisodesTab.qml 2016-03-16 15:35:38 +0000
372+++ app/ui/EpisodesTab.qml 2016-03-17 15:08:31 +0000
373@@ -124,6 +124,8 @@
374 PageHeader {
375 id: selectionHeader
376 visible: episodeList.ViewItems.selectMode
377+ // TRANSLATORS: This is the page title. Keep it short. Otherwise it will just be elided.
378+ title: i18n.tr("%1 item selected", "%1 items selected", episodeList.ViewItems.selectedIndices.length).arg(episodeList.ViewItems.selectedIndices.length)
379
380 onVisibleChanged: {
381 if (visible) {
382
383=== modified file 'app/ui/PodcastsTab.qml'
384--- app/ui/PodcastsTab.qml 2016-03-17 02:19:48 +0000
385+++ app/ui/PodcastsTab.qml 2016-03-17 15:08:31 +0000
386@@ -228,7 +228,7 @@
387 leadingActions: ListItemActions {
388 actions: [
389 Action {
390- iconName: "delete"
391+ iconName: "system-log-out"
392 onTriggered: {
393 var db = Podcasts.init();
394 db.transaction(function (tx) {
395
396=== modified file 'po/podbird.nik90.pot'
397--- po/podbird.nik90.pot 2016-03-17 02:19:48 +0000
398+++ po/podbird.nik90.pot 2016-03-17 15:08:31 +0000
399@@ -8,7 +8,7 @@
400 msgstr ""
401 "Project-Id-Version: \n"
402 "Report-Msgid-Bugs-To: \n"
403-"POT-Creation-Date: 2016-03-17 07:43+0530\n"
404+"POT-Creation-Date: 2016-03-17 20:36+0530\n"
405 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
406 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
407 "Language-Team: LANGUAGE <LL@li.org>\n"
408@@ -22,8 +22,8 @@
409 msgid "Episodes"
410 msgstr ""
411
412-#: ../app/components/TabsList.qml:35
413-msgid "Add new podcast"
414+#: ../app/components/TabsList.qml:35 ../app/ui/SearchPage.qml:41
415+msgid "Add New Podcasts"
416 msgstr ""
417
418 #: ../app/components/TabsList.qml:43 ../app/ui/PodcastsTab.qml:42
419@@ -154,67 +154,96 @@
420 msgid "Dark"
421 msgstr ""
422
423-#: ../app/ui/EpisodesPage.qml:32
424+#: ../app/ui/EpisodesPage.qml:52
425 msgid "Podcast"
426 msgstr ""
427
428-#: ../app/ui/EpisodesPage.qml:73 ../app/ui/EpisodesTab.qml:62
429+#: ../app/ui/EpisodesPage.qml:62 ../app/ui/EpisodesTab.qml:62
430 msgid "Search Episode"
431 msgstr ""
432
433-#: ../app/ui/EpisodesPage.qml:82
434-msgid "Mark all listened"
435-msgstr ""
436-
437-#: ../app/ui/EpisodesPage.qml:93 ../app/ui/EpisodesPage.qml:184
438+#: ../app/ui/EpisodesPage.qml:70 ../app/ui/EpisodesPage.qml:306
439 #: ../app/ui/SearchPage.qml:275
440 msgid "Unsubscribe"
441 msgstr ""
442
443-#: ../app/ui/EpisodesPage.qml:136 ../app/ui/EpisodesTab.qml:120
444+#. TRANSLATORS: This is the page title. Keep it short. Otherwise it will just be elided.
445+#: ../app/ui/EpisodesPage.qml:110 ../app/ui/EpisodesTab.qml:128
446+#, qt-format
447+msgid "%1 item selected"
448+msgid_plural "%1 items selected"
449+msgstr[0] ""
450+msgstr[1] ""
451+
452+#: ../app/ui/EpisodesPage.qml:125 ../app/ui/EpisodesTab.qml:143
453+#: ../app/ui/NowPlayingPage.qml:42
454+msgid "Back"
455+msgstr ""
456+
457+#: ../app/ui/EpisodesPage.qml:137 ../app/ui/EpisodesTab.qml:155
458+msgid "Mark Listened"
459+msgstr ""
460+
461+#: ../app/ui/EpisodesPage.qml:156 ../app/ui/EpisodesTab.qml:173
462+msgid "Download episode(s)"
463+msgstr ""
464+
465+#: ../app/ui/EpisodesPage.qml:184 ../app/ui/EpisodesTab.qml:201
466+msgid "Delete episode(s)"
467+msgstr ""
468+
469+#: ../app/ui/EpisodesPage.qml:207 ../app/ui/EpisodesTab.qml:224
470+msgid "Favourite episode(s)"
471+msgstr ""
472+
473+#: ../app/ui/EpisodesPage.qml:229 ../app/ui/EpisodesTab.qml:270
474+msgid "Add to queue"
475+msgstr ""
476+
477+#: ../app/ui/EpisodesPage.qml:258 ../app/ui/EpisodesTab.qml:120
478 msgid "Search episode"
479 msgstr ""
480
481-#: ../app/ui/EpisodesPage.qml:181
482+#: ../app/ui/EpisodesPage.qml:303
483 msgid "Unsubscribe Confirmation"
484 msgstr ""
485
486-#: ../app/ui/EpisodesPage.qml:182
487+#: ../app/ui/EpisodesPage.qml:304
488 #, qt-format
489 msgid "Are you sure you want to unsubscribe from <b>%1</b>?"
490 msgstr ""
491
492-#: ../app/ui/EpisodesPage.qml:201 ../app/ui/SearchPage.qml:130
493+#: ../app/ui/EpisodesPage.qml:323 ../app/ui/SearchPage.qml:130
494 #: ../app/ui/SettingsPage.qml:83 ../app/ui/SettingsPage.qml:118
495 msgid "Cancel"
496 msgstr ""
497
498-#: ../app/ui/EpisodesPage.qml:223 ../app/ui/EpisodesTab.qml:405
499+#: ../app/ui/EpisodesPage.qml:345 ../app/ui/EpisodesTab.qml:407
500 msgid "Episode Description"
501 msgstr ""
502
503-#: ../app/ui/EpisodesPage.qml:235 ../app/ui/EpisodesTab.qml:417
504+#: ../app/ui/EpisodesPage.qml:357 ../app/ui/EpisodesTab.qml:419
505 #: ../app/ui/SearchPage.qml:179
506 msgid "Close"
507 msgstr ""
508
509-#: ../app/ui/EpisodesPage.qml:263
510+#: ../app/ui/EpisodesPage.qml:385
511 msgid "No episodes found"
512 msgstr ""
513
514-#: ../app/ui/EpisodesPage.qml:264
515+#: ../app/ui/EpisodesPage.qml:386
516 msgid "No episodes found matching the search term."
517 msgstr ""
518
519-#: ../app/ui/EpisodesPage.qml:378
520+#: ../app/ui/EpisodesPage.qml:503
521 msgid "Unheard"
522 msgstr ""
523
524-#: ../app/ui/EpisodesPage.qml:395
525+#: ../app/ui/EpisodesPage.qml:520
526 msgid "Listened"
527 msgstr ""
528
529-#: ../app/ui/EpisodesPage.qml:414
530+#: ../app/ui/EpisodesPage.qml:539
531 msgid "Downloaded"
532 msgstr ""
533
534@@ -230,83 +259,59 @@
535 msgid "Favourites"
536 msgstr ""
537
538-#: ../app/ui/EpisodesTab.qml:141 ../app/ui/NowPlayingPage.qml:42
539-msgid "Back"
540-msgstr ""
541-
542-#: ../app/ui/EpisodesTab.qml:153
543-msgid "Mark Listened"
544-msgstr ""
545-
546-#: ../app/ui/EpisodesTab.qml:171
547-msgid "Download episode(s)"
548-msgstr ""
549-
550-#: ../app/ui/EpisodesTab.qml:199
551-msgid "Delete episode(s)"
552-msgstr ""
553-
554-#: ../app/ui/EpisodesTab.qml:222
555-msgid "Favourite episode(s)"
556-msgstr ""
557-
558-#: ../app/ui/EpisodesTab.qml:245
559+#: ../app/ui/EpisodesTab.qml:247
560 msgid "Unfavourite episode(s)"
561 msgstr ""
562
563-#: ../app/ui/EpisodesTab.qml:268
564-msgid "Add to queue"
565-msgstr ""
566-
567-#: ../app/ui/EpisodesTab.qml:308
568+#: ../app/ui/EpisodesTab.qml:310
569 msgid "No New Episodes"
570 msgstr ""
571
572-#: ../app/ui/EpisodesTab.qml:310
573+#: ../app/ui/EpisodesTab.qml:312
574 msgid "No Downloaded Episodes"
575 msgstr ""
576
577-#: ../app/ui/EpisodesTab.qml:312
578+#: ../app/ui/EpisodesTab.qml:314
579 msgid "No Favourited Episodes"
580 msgstr ""
581
582-#: ../app/ui/EpisodesTab.qml:314
583+#: ../app/ui/EpisodesTab.qml:316
584 msgid "No Episodes Found"
585 msgstr ""
586
587-#: ../app/ui/EpisodesTab.qml:320
588+#: ../app/ui/EpisodesTab.qml:322
589 msgid "No more episodes to listen to!"
590 msgstr ""
591
592-#: ../app/ui/EpisodesTab.qml:322
593+#: ../app/ui/EpisodesTab.qml:324
594 msgid "No episodes have been downloaded for offline listening"
595 msgstr ""
596
597-#: ../app/ui/EpisodesTab.qml:324
598+#: ../app/ui/EpisodesTab.qml:326
599 msgid "No episodes have been favourited."
600 msgstr ""
601
602-#: ../app/ui/EpisodesTab.qml:326
603+#: ../app/ui/EpisodesTab.qml:328
604 msgid "No Episodes found matching the search term."
605 msgstr ""
606
607-#: ../app/ui/EpisodesTab.qml:456
608+#: ../app/ui/EpisodesTab.qml:458
609 msgid "Downloads in progress"
610 msgstr ""
611
612-#: ../app/ui/EpisodesTab.qml:496
613+#: ../app/ui/EpisodesTab.qml:498
614 msgid "Downloaded episodes"
615 msgstr ""
616
617-#: ../app/ui/EpisodesTab.qml:506
618+#: ../app/ui/EpisodesTab.qml:508
619 msgid "Today"
620 msgstr ""
621
622-#: ../app/ui/EpisodesTab.qml:510
623+#: ../app/ui/EpisodesTab.qml:512
624 msgid "Yesterday"
625 msgstr ""
626
627-#: ../app/ui/EpisodesTab.qml:514
628+#: ../app/ui/EpisodesTab.qml:516
629 msgid "Older"
630 msgstr ""
631
632@@ -368,10 +373,6 @@
633 msgstr[0] ""
634 msgstr[1] ""
635
636-#: ../app/ui/SearchPage.qml:41
637-msgid "Add New Podcasts"
638-msgstr ""
639-
640 #: ../app/ui/SearchPage.qml:63
641 msgid "Add Podcast"
642 msgstr ""
643@@ -569,10 +570,10 @@
644 msgid "Finish"
645 msgstr ""
646
647-#: /home/krnekhelesh/Development/reintroduce-add-podcast-tab-build/po/Podbird.desktop.in.h:1
648+#: /home/krnekhelesh/Development/fix-minor-episodes-page-build/po/Podbird.desktop.in.h:1
649 msgid "The chirpiest podcast manager for Ubuntu"
650 msgstr ""
651
652-#: /home/krnekhelesh/Development/reintroduce-add-podcast-tab-build/po/Podbird.desktop.in.h:2
653+#: /home/krnekhelesh/Development/fix-minor-episodes-page-build/po/Podbird.desktop.in.h:2
654 msgid "podcast;audio;itunes;broadcast;digital;stream;podcatcher;video;vodcast;"
655 msgstr ""

Subscribers

People subscribed via source and target branches