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