git.iko.soy/maciek134/podphoenix
on main help sign in
Migrated to new PageHeader
commit76a9017ba943904879c2d0696f75724d273a32f9 authorNekhelesh Ramananthan <krnekhelesh@gmail.com> dateTue 23 Feb 2016, 20:27 (11 years ago) parenteffcf5e
7 files changed+446−306
app/components/TabsList.qml+42 app/podbird.qml−6 app/ui/PodcastsTab.qml+83−65 app/ui/SearchPage.qml+121−87 app/ui/SettingsPage.qml+24−1 app/ui/WhatsNewTab.qml+97−72 po/com.mikeasoft.podbird.pot+79−75
app/components/TabsList.qmlnew file+42
@@ -0,0 +1,42 @@
1+import QtQuick 2.4
2+import Ubuntu.Components 1.3
3+
4+ActionList {
5+ id: tabsList
6+
7+ property int currentTab: tabs.selectedTabIndex
8+
9+ children: [
10+ Action {
11+ text: i18n.tr("What's New")
12+ visible: currentTab !== 0
13+ onTriggered: {
14+ tabs.selectedTabIndex = 0
15+ }
16+ },
17+
18+ Action {
19+ text: i18n.tr("Podcasts")
20+ visible: currentTab !== 1
21+ onTriggered: {
22+ tabs.selectedTabIndex = 1
23+ }
24+ },
25+
26+ Action {
27+ text: i18n.tr("Add new podcasts")
28+ visible: currentTab !== 2
29+ onTriggered: {
30+ tabs.selectedTabIndex = 2
31+ }
32+ },
33+
34+ Action {
35+ text: i18n.tr("Settings")
36+ visible: currentTab !== 3
37+ onTriggered: {
38+ tabs.selectedTabIndex = 3
39+ }
40+ }
41+ ]
42+}
app/podbird.qml−6
@@ -254,8 +254,6 @@ MainView {
254254 Tab {
255255 id: podcastTab
256256
257− title: i18n.tr("Podcasts")
258−
259257 page: Loader {
260258 id: podcastPage
261259 parent: podcastTab
@@ -268,8 +266,6 @@ MainView {
268266 Tab {
269267 id: searchTab
270268
271− title: i18n.tr("Add New Podcasts")
272−
273269 // Dynamically load/unload the search tab as required
274270 page: Loader {
275271 parent: searchTab
@@ -283,8 +279,6 @@ MainView {
283279 Tab {
284280 id: settingsTab
285281
286− title: i18n.tr("Settings")
287−
288282 // Dynamically load/unload the settings tab as required
289283 page: Loader {
290284 parent: settingsTab
app/ui/PodcastsTab.qml+83−65
@@ -30,69 +30,82 @@ import "../components"
3030Page {
3131 id: podcastPage
3232
33− /*
34− #FIXME: The page flickable is to null instead of viewLoader.item since
35− it otherwise creates bug http://pad.lv/1446162 which can confuse a
36− new user.
37− */
38− flickable: null
39−
4033 property bool episodesUpdating: false;
4134
42− state: "default"
43− states: [
44− PageHeadState {
45− name: "default"
46− head: podcastPage.head
47− actions: [
48− Action {
49− iconName: "search"
50− text: i18n.tr("Search Podcast")
51− onTriggered: {
52− podcastPage.state = "search"
53− searchField.item.forceActiveFocus()
54− }
55− },
56− Action {
57− iconName: podbird.settings.showListView ? "view-grid-symbolic" : "view-list-symbolic"
58− text: podbird.settings.showListView ? i18n.tr("Grid View") : i18n.tr("List View")
59− onTriggered: {
60− podbird.settings.showListView = !podbird.settings.showListView
61− }
35+ TabsList {
36+ id: tabsList
37+ }
38+
39+ header: standardHeader
40+
41+ PageHeader {
42+ id: standardHeader
43+
44+ title: i18n.tr("Podcasts")
45+ visible: podcastPage.header === standardHeader
46+
47+ StyleHints {
48+ backgroundColor: podbird.appTheme.background
49+ }
50+
51+ leadingActionBar {
52+ numberOfSlots: 0
53+ actions: tabsList.actions
54+ }
55+
56+ trailingActionBar.actions: [
57+ Action {
58+ iconName: "search"
59+ text: i18n.tr("Search Podcast")
60+ onTriggered: {
61+ podcastPage.header = searchHeader
62+ searchField.item.forceActiveFocus()
6263 }
63− ]
64− },
65−
66− PageHeadState {
67− name: "search"
68− head: podcastPage.head
69− actions: [
70− Action {
71− iconName: "edit-clear"
72− text: i18n.tr("Cancel")
73− onTriggered: {
74− viewLoader.item.forceActiveFocus()
75− podcastPage.state = "default"
76− }
77− },
78− Action {
79− iconName: podbird.settings.showListView ? "view-grid-symbolic" : "view-list-symbolic"
80− text: podbird.settings.showListView ? i18n.tr("Grid View") : i18n.tr("List View")
81− onTriggered: {
82− podbird.settings.showListView = !podbird.settings.showListView
83− }
64+ },
65+ Action {
66+ iconName: podbird.settings.showListView ? "view-grid-symbolic" : "view-list-symbolic"
67+ text: podbird.settings.showListView ? i18n.tr("Grid View") : i18n.tr("List View")
68+ onTriggered: {
69+ podbird.settings.showListView = !podbird.settings.showListView
8470 }
85− ]
86−
87− contents: Loader {
88− id: searchField
89− sourceComponent: podcastPage.state === "search" ? searchFieldComponent : undefined
90− anchors.left: parent ? parent.left : undefined
91− anchors.right: parent ? parent.right : undefined
92− anchors.rightMargin: units.gu(2)
9371 }
72+ ]
73+ }
74+
75+ PageHeader {
76+ id: searchHeader
77+ visible: podcastPage.header === searchHeader
78+
79+ StyleHints {
80+ backgroundColor: podbird.appTheme.background
9481 }
95− ]
82+
83+ contents: Loader {
84+ id: searchField
85+ sourceComponent: podcastPage.header === searchHeader ? searchFieldComponent : undefined
86+ anchors.left: parent ? parent.left : undefined
87+ anchors.right: parent ? parent.right : undefined
88+ anchors.verticalCenter: parent.verticalCenter
89+ }
90+
91+ trailingActionBar.actions: [
92+ Action {
93+ iconName: "edit-clear"
94+ text: i18n.tr("Cancel")
95+ onTriggered: {
96+ viewLoader.item.forceActiveFocus()
97+ podcastPage.header = standardHeader
98+ }
99+ },
100+ Action {
101+ iconName: podbird.settings.showListView ? "view-grid-symbolic" : "view-list-symbolic"
102+ text: podbird.settings.showListView ? i18n.tr("Grid View") : i18n.tr("List View")
103+ onTriggered: {
104+ podbird.settings.showListView = !podbird.settings.showListView
105+ }
106+ }
107+ ]
108+ }
96109
97110 Component {
98111 id: searchFieldComponent
@@ -106,7 +119,7 @@ Page {
106119 if(visible) {
107120 refreshModel();
108121 } else {
109− state = "default";
122+ podcastPage.header = standardHeader;
110123 }
111124 }
112125
@@ -144,13 +157,18 @@ Page {
144157 id: sortedPodcastModel
145158 model: podcastModel
146159 filter.property: "name"
147− filter.pattern: podcastPage.state === "search" && searchField.status == Loader.Ready ? RegExp(searchField.item.text, "gi")
148− : RegExp("", "gi")
160+ filter.pattern: podcastPage.header === searchHeader && searchField.status == Loader.Ready ? RegExp(searchField.item.text, "gi")
161+ : RegExp("", "gi")
149162 }
150163
151164 Loader {
152165 id: viewLoader
153− anchors.fill: parent
166+ anchors {
167+ top: podcastPage.header.bottom
168+ left: parent.left
169+ right: parent.right
170+ bottom: parent.bottom
171+ }
154172 sourceComponent: podbird.settings.showListView ? listviewComponent : cardviewComponent
155173 }
156174
@@ -168,9 +186,9 @@ Page {
168186 secondaryText: model.episodeCount > 0 ? i18n.tr("%1 unheard episode", "%1 unheard episodes", model.episodeCount).arg(model.episodeCount)
169187 : ""
170188 onClicked: {
171− if(podcastPage.state === "search") {
189+ if(podcastPage.header === searchHeader) {
172190 cardView.forceActiveFocus()
173− podcastPage.state = "default"
191+ podcastPage.header = standardHeader
174192 }
175193 mainStack.push(Qt.resolvedUrl("EpisodesPage.qml"), {"episodeName": model.name, "episodeId": model.id, "episodeArtist": model.artist, "episodeImage": model.image, "mode": (model.episodeCount > 0 ? "unheard" : "listened")})
176194 }
@@ -233,9 +251,9 @@ Page {
233251 }
234252
235253 onClicked: {
236− if(podcastPage.state === "search") {
254+ if(podcastPage.header === searchHeader) {
237255 listView.forceActiveFocus()
238− podcastPage.state = "default"
256+ podcastPage.header = standardHeader
239257 }
240258 mainStack.push(Qt.resolvedUrl("EpisodesPage.qml"), {"episodeName": model.name, "episodeId": model.id, "episodeArtist": model.artist, "episodeImage": model.image, "mode": (model.episodeCount > 0 ? "unheard" : "listened")})
241259 }
app/ui/SearchPage.qml+121−87
@@ -21,7 +21,6 @@ import QtQuick.Layouts 1.1
2121import Ubuntu.Components 1.3
2222import QtQuick.LocalStorage 2.0
2323import Ubuntu.Components.Popups 1.0
24−import Ubuntu.Components.ListItems 1.0 as ListItem
2524import "../podcasts.js" as Podcasts
2625import "../components"
2726
@@ -30,91 +29,118 @@ Page {
3029
3130 property var xhr: new XMLHttpRequest;
3231
33− state: "default"
34− states: [
35− PageHeadState {
36− name: "default"
37− head: searchPage.head
38− actions: [
39− Action {
40− iconName: "search"
41− text: i18n.tr("Search Podcast")
42− onTriggered: {
43− searchPage.state = "search"
44− searchField.item.forceActiveFocus()
45− }
46− },
47−
48− Action {
49− text: i18n.tr("Add Podcast")
50− iconName: "add"
51− onTriggered: {
52− searchPage.state = "add"
53− feedUrlField.item.forceActiveFocus()
54− }
32+ TabsList {
33+ id: tabsList
34+ }
35+
36+ header: standardHeader
37+
38+ PageHeader {
39+ id: standardHeader
40+
41+ visible: searchPage.header === standardHeader
42+ title: i18n.tr("Add New Podcasts")
43+
44+ StyleHints {
45+ backgroundColor: podbird.appTheme.background
46+ }
47+
48+ leadingActionBar {
49+ numberOfSlots: 0
50+ actions: tabsList.actions
51+ }
52+
53+ trailingActionBar.actions: [
54+ Action {
55+ iconName: "search"
56+ text: i18n.tr("Search Podcast")
57+ onTriggered: {
58+ searchPage.header = searchHeader
59+ searchField.item.forceActiveFocus()
5560 }
56− ]
57− },
58−
59− PageHeadState {
60− name: "search"
61− head: searchPage.head
62− actions: [
63− Action {
64− iconName: "edit-clear"
65− text: i18n.tr("Cancel")
66− onTriggered: {
67− resultsView.forceActiveFocus()
68− searchResults.clear()
69− searchPage.state = "default"
70− }
61+ },
62+
63+ Action {
64+ text: i18n.tr("Add Podcast")
65+ iconName: "add"
66+ onTriggered: {
67+ searchPage.header = addHeader
68+ feedUrlField.item.forceActiveFocus()
7169 }
72− ]
73−
74− contents: Loader {
75− id: searchField
76− sourceComponent: searchPage.state === "search" ? searchFieldComponent : undefined
77− anchors.left: parent ? parent.left : undefined
78− anchors.right: parent ? parent.right : undefined
79− anchors.rightMargin: units.gu(2)
8070 }
81− },
82−
83− PageHeadState {
84− name: "add"
85− head: searchPage.head
86−
87− actions: [
88− Action {
89− iconName: "ok"
90− text: i18n.tr("Save Podcast")
91− onTriggered: {
92− resultsView.forceActiveFocus()
93− subscribeFromFeed(feedUrlField.item.text);
94− }
95− },
96− Action {
97− iconName: "edit-clear"
98− text: i18n.tr("Cancel")
99− onTriggered: {
100− resultsView.forceActiveFocus()
101− searchPage.state = "default"
102− }
103− }
104− ]
71+ ]
72+ }
73+
74+ PageHeader {
75+ id: searchHeader
76+
77+ visible: searchPage.header === searchHeader
78+
79+ StyleHints {
80+ backgroundColor: podbird.appTheme.background
81+ }
10582
106− contents: Loader {
107− id: feedUrlField
108− sourceComponent: searchPage.state === "add" ? feedUrlComponent : undefined
109− anchors.left: parent ? parent.left : undefined
110− anchors.right: parent ? parent.right : undefined
83+ contents: Loader {
84+ id: searchField
85+ sourceComponent: searchPage.header === searchHeader ? searchFieldComponent : undefined
86+ anchors.left: parent ? parent.left : undefined
87+ anchors.right: parent ? parent.right : undefined
88+ anchors.verticalCenter: parent.verticalCenter
89+ }
90+
91+ trailingActionBar.actions: [
92+ Action {
93+ iconName: "edit-clear"
94+ text: i18n.tr("Cancel")
95+ onTriggered: {
96+ resultsView.forceActiveFocus()
97+ searchResults.clear()
98+ searchPage.header = standardHeader
99+ }
111100 }
101+ ]
102+ }
103+
104+ PageHeader {
105+ id: addHeader
106+
107+ visible: searchPage.header === addHeader
108+
109+ StyleHints {
110+ backgroundColor: podbird.appTheme.background
112111 }
113− ]
112+
113+ contents: Loader {
114+ id: feedUrlField
115+ sourceComponent: searchPage.header === addHeader ? feedUrlComponent : undefined
116+ anchors.left: parent ? parent.left : undefined
117+ anchors.right: parent ? parent.right : undefined
118+ anchors.verticalCenter: parent.verticalCenter
119+ }
120+
121+ trailingActionBar.actions: [
122+ Action {
123+ iconName: "ok"
124+ text: i18n.tr("Save Podcast")
125+ onTriggered: {
126+ resultsView.forceActiveFocus()
127+ subscribeFromFeed(feedUrlField.item.text);
128+ }
129+ },
130+ Action {
131+ iconName: "edit-clear"
132+ text: i18n.tr("Cancel")
133+ onTriggered: {
134+ resultsView.forceActiveFocus()
135+ searchPage.header = standardHeader
136+ }
137+ }
138+ ]
139+ }
114140
115141 onVisibleChanged: {
116142 if(!visible) {
117− state = "default";
143+ searchPage.header = standardHeader;
118144 }
119145 }
120146
@@ -172,8 +198,8 @@ Page {
172198 verticalCenterOffset: Qt.inputMethod.visible ? units.gu(4) : 0
173199 }
174200
175− sourceComponent: searchPage.state === "default" ? emptyStateComponent : searchResults.count === 0 && searchPage.state === "search" ? emptyStateComponent
176− : undefined
201+ sourceComponent: searchPage.header === standardHeader ? emptyStateComponent : searchResults.count === 0 && searchPage.header === searchHeader ? emptyStateComponent
202+ : undefined
177203 }
178204
179205 Component {
@@ -181,10 +207,10 @@ Page {
181207 EmptyState {
182208 iconHeight: units.gu(12)
183209 iconWidth: units.gu(22)
184− iconSource: searchPage.state !== "search" ? Qt.resolvedUrl("../graphics/owlSearch.svg") : Qt.resolvedUrl("../graphics/notFound.svg")
185− title: searchPage.state !== "search" ? i18n.tr("Looking to add a new Podcast?") : i18n.tr("No Podcasts found")
186− subTitle: searchPage.state !== "search" ? i18n.tr("Click the 'magnifier' at the top to search or the 'plus' button to add by URL")
187− : i18n.tr("No podcasts found matching the search term.")
210+ iconSource: searchPage.header !== searchHeader ? Qt.resolvedUrl("../graphics/owlSearch.svg") : Qt.resolvedUrl("../graphics/notFound.svg")
211+ title: searchPage.header !== searchHeader ? i18n.tr("Looking to add a new Podcast?") : i18n.tr("No Podcasts found")
212+ subTitle: searchPage.header !== searchHeader ? i18n.tr("Click the 'magnifier' at the top to search or the 'plus' button to add by URL")
213+ : i18n.tr("No podcasts found matching the search term.")
188214 }
189215 }
190216
@@ -200,8 +226,16 @@ Page {
200226 }
201227
202228 model: searchResults
203− anchors.fill: parent
204− visible: searchPage.state !== "add"
229+
230+ anchors {
231+ top: searchPage.header.bottom
232+ left: parent.left
233+ right: parent.right
234+ bottom: parent.bottom
235+ }
236+
237+ clip: true
238+ visible: searchPage.header !== addHeader
205239
206240 footer: Item {
207241 width: parent.width
@@ -341,7 +375,7 @@ Page {
341375 if (xhr.readyState === XMLHttpRequest.DONE) {
342376 if (xhr.status < 200 || xhr.status > 299 || xhr.responseXML === null) {
343377 PopupUtils.open(subscribeFailedDialog);
344− searchPage.state = "add"
378+ searchPage.header = addHeader
345379 feedUrlField.item.text = feed
346380 return;
347381 }
@@ -371,7 +405,7 @@ Page {
371405 tabs.selectedTabIndex = 1;
372406 } else {
373407 PopupUtils.open(subscribeFailedDialog);
374− searchPage.state = "add"
408+ searchPage.header = addHeader
375409 feedUrlField.item.text = feed
376410 return;
377411 }
app/ui/SettingsPage.qml+24−1
@@ -24,10 +24,33 @@ import "../components"
2424Page {
2525 id: settingsPage
2626
27+ TabsList {
28+ id: tabsList
29+ }
30+
31+ header: PageHeader {
32+ title: i18n.tr("Settings")
33+
34+ StyleHints {
35+ backgroundColor: podbird.appTheme.background
36+ }
37+
38+ leadingActionBar {
39+ numberOfSlots: 0
40+ actions: tabsList.actions
41+ }
42+ }
43+
2744 Flickable {
2845 id: flickable
2946
30− anchors.fill: parent
47+ anchors {
48+ top: settingsPage.header.bottom
49+ left: parent.left
50+ right: parent.right
51+ bottom: parent.bottom
52+ }
53+
3154 contentHeight: settingsColumn.height + units.gu(8)
3255 contentWidth: parent.width
3356
app/ui/WhatsNewTab.qml+97−72
@@ -12,87 +12,104 @@ import "../components"
1212Tab {
1313 id: whatsNewTab
1414
15− title: i18n.tr("What's New")
16−
1715 property var today: new Date()
1816 property int dayToMs: 86400000
1917 property string tempGuid: "NULL"
2018 property bool episodesUpdating: false
2119
20+ TabsList {
21+ id: tabsList
22+ }
23+
2224 page: Page {
2325 id: whatsNewPage
2426
25− state: "default"
26− states: [
27− PageHeadState {
28− name: "default"
29− head: whatsNewPage.head
30− actions: [
31− Action {
32− iconName: "search"
33− text: i18n.tr("Search Episode")
34− onTriggered: {
35− whatsNewPage.state = "search"
36− searchField.item.forceActiveFocus()
37− }
38− },
39−
40− Action {
41− iconName: "select"
42− text: i18n.tr("Mark all listened")
43− onTriggered: {
44− var db = Podcasts.init();
45− db.transaction(function (tx) {
46− for (var i=0; i<whatsNewModel.count; i++) {
47− tx.executeSql("UPDATE Episode SET listened=1 WHERE guid=?", [whatsNewModel.get(i).guid]);
48− }
49− whatsNewModel.clear()
50− });
51− }
52− },
53−
54− Action {
55− iconName: "save"
56− text: i18n.tr("Download all")
57− onTriggered: {
58− var db = Podcasts.init();
59− db.transaction(function (tx) {
60− for (var i=0; i<whatsNewModel.count; i++) {
61− if (!whatsNewModel.get(i).downloadedfile) {
62− whatsNewModel.setProperty(i, "queued", 1)
63− tx.executeSql("UPDATE Episode SET queued=1 WHERE guid = ?", [whatsNewModel.get(i).guid]);
64− downloader.addDownload(whatsNewModel.get(i).guid, whatsNewModel.get(i).audiourl);
65− }
66− }
67− });
68− }
27+ header: standardHeader
28+
29+ PageHeader {
30+ id: standardHeader
31+ visible: whatsNewPage.header === standardHeader
32+ title: i18n.tr("What's New")
33+
34+ StyleHints {
35+ backgroundColor: podbird.appTheme.background
36+ }
37+
38+ leadingActionBar {
39+ numberOfSlots: 0
40+ actions: tabsList.actions
41+ }
42+
43+ trailingActionBar.actions: [
44+ Action {
45+ iconName: "search"
46+ text: i18n.tr("Search Episode")
47+ onTriggered: {
48+ whatsNewPage.header = searchHeader
49+ searchField.item.forceActiveFocus()
6950 }
70− ]
71− },
72−
73− PageHeadState {
74− name: "search"
75− head: whatsNewPage.head
76− actions: [
77− Action {
78− iconName: "edit-clear"
79− text: i18n.tr("Cancel")
80− onTriggered: {
81− episodeList.forceActiveFocus()
82− whatsNewPage.state = "default"
83− }
51+ },
52+
53+ Action {
54+ iconName: "select"
55+ text: i18n.tr("Mark all listened")
56+ onTriggered: {
57+ var db = Podcasts.init();
58+ db.transaction(function (tx) {
59+ for (var i=0; i<whatsNewModel.count; i++) {
60+ tx.executeSql("UPDATE Episode SET listened=1 WHERE guid=?", [whatsNewModel.get(i).guid]);
61+ }
62+ whatsNewModel.clear()
63+ });
64+ }
65+ },
66+
67+ Action {
68+ iconName: "save"
69+ text: i18n.tr("Download all")
70+ onTriggered: {
71+ var db = Podcasts.init();
72+ db.transaction(function (tx) {
73+ for (var i=0; i<whatsNewModel.count; i++) {
74+ if (!whatsNewModel.get(i).downloadedfile) {
75+ whatsNewModel.setProperty(i, "queued", 1)
76+ tx.executeSql("UPDATE Episode SET queued=1 WHERE guid = ?", [whatsNewModel.get(i).guid]);
77+ downloader.addDownload(whatsNewModel.get(i).guid, whatsNewModel.get(i).audiourl);
78+ }
79+ }
80+ });
8481 }
85− ]
86−
87− contents: Loader {
88− id: searchField
89− sourceComponent: whatsNewPage.state === "search" ? searchFieldComponent : undefined
90− anchors.left: parent ? parent.left : undefined
91− anchors.right: parent ? parent.right : undefined
92− anchors.rightMargin: units.gu(2)
9382 }
83+ ]
84+ }
85+
86+ PageHeader {
87+ id: searchHeader
88+ visible: whatsNewPage.header === searchHeader
89+
90+ StyleHints {
91+ backgroundColor: podbird.appTheme.background
9492 }
95− ]
93+
94+ contents: Loader {
95+ id: searchField
96+ sourceComponent: whatsNewPage.header === searchHeader ? searchFieldComponent : undefined
97+ anchors.left: parent ? parent.left : undefined
98+ anchors.right: parent ? parent.right : undefined
99+ anchors.verticalCenter: parent ? parent.verticalCenter : undefined
100+ }
101+
102+ trailingActionBar.actions: [
103+ Action {
104+ iconName: "edit-clear"
105+ text: i18n.tr("Cancel")
106+ onTriggered: {
107+ episodeList.forceActiveFocus()
108+ whatsNewPage.header = standardHeader
109+ }
110+ }
111+ ]
112+ }
96113
97114 Component {
98115 id: searchFieldComponent
@@ -145,7 +162,7 @@ Tab {
145162 if (downloader.downloadingGuid != "")
146163 tempGuid = downloader.downloadingGuid
147164 } else {
148− state = "default";
165+ whatsNewPage.header = standardHeader
149166 }
150167 }
151168
@@ -232,9 +249,17 @@ Tab {
232249 flickDeceleration = flickDeceleration * scaleFactor;
233250 }
234251
235− anchors.fill: parent
236− model: sortedEpisodeModel
252+ anchors {
253+ top: whatsNewPage.header.bottom
254+ left: parent.left
255+ right: parent.right
256+ bottom: parent.bottom
257+ }
237258
259+ clip: true
260+
261+ model: sortedEpisodeModel
262+ currentIndex: -1
238263 section.property: "diff"
239264 section.labelPositioning: ViewSection.InlineLabels
240265
po/com.mikeasoft.podbird.pot+79−75
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: \n"
1010"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2016-02-22 23:45+0530\n"
11+"POT-Creation-Date: 2016-02-24 00:52+0530\n"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,22 @@ msgstr ""
1818"Content-Transfer-Encoding: 8bit\n"
1919"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
2020
21+#: ../app/components/TabsList.qml:11 ../app/ui/WhatsNewTab.qml:32
22+msgid "What's New"
23+msgstr ""
24+
25+#: ../app/components/TabsList.qml:19 ../app/ui/PodcastsTab.qml:44
26+msgid "Podcasts"
27+msgstr ""
28+
29+#: ../app/components/TabsList.qml:27
30+msgid "Add new podcasts"
31+msgstr ""
32+
33+#: ../app/components/TabsList.qml:35 ../app/ui/SettingsPage.qml:32
34+msgid "Settings"
35+msgstr ""
36+
2137#: ../app/components/Walkthrough.qml:90
2238msgid "Skip"
2339msgstr ""
@@ -32,18 +48,6 @@ msgstr ""
3248msgid "No podcasts listened to today"
3349msgstr ""
3450
35−#: ../app/podbird.qml:257
36−msgid "Podcasts"
37−msgstr ""
38−
39−#: ../app/podbird.qml:271
40−msgid "Add New Podcasts"
41−msgstr ""
42−
43−#: ../app/podbird.qml:286
44−msgid "Settings"
45−msgstr ""
46−
4751#: ../app/podcasts.js:180
4852#, no-c-format, qt-format
4953msgid "%1 hr %2 min"
@@ -60,7 +64,7 @@ msgid "%1 min"
6064msgstr ""
6165
6266#. TRANSLATORS: About as in information about the app
63−#: ../app/settings/About.qml:25 ../app/ui/SettingsPage.qml:183
67+#: ../app/settings/About.qml:25 ../app/ui/SettingsPage.qml:206
6468msgid "About"
6569msgstr ""
6670
@@ -109,7 +113,7 @@ msgid_plural "%1 years"
109113msgstr[0] ""
110114msgstr[1] ""
111115
112−#: ../app/settings/Credits.qml:26 ../app/ui/SettingsPage.qml:194
116+#: ../app/settings/Credits.qml:26 ../app/ui/SettingsPage.qml:217
113117msgid "Credits"
114118msgstr ""
115119
@@ -145,17 +149,17 @@ msgid_plural "%1 episodes"
145149msgstr[0] ""
146150msgstr[1] ""
147151
148−#: ../app/settings/ThemeSetting.qml:27 ../app/ui/SettingsPage.qml:119
152+#: ../app/settings/ThemeSetting.qml:27 ../app/ui/SettingsPage.qml:142
149153msgid "Theme"
150154msgstr ""
151155
152156#. TRANSLATORS: Light Theme
153−#: ../app/settings/ThemeSetting.qml:34 ../app/ui/SettingsPage.qml:120
157+#: ../app/settings/ThemeSetting.qml:34 ../app/ui/SettingsPage.qml:143
154158msgid "Light"
155159msgstr ""
156160
157161#. TRANSLATORS: Dark Theme
158−#: ../app/settings/ThemeSetting.qml:36 ../app/ui/SettingsPage.qml:120
162+#: ../app/settings/ThemeSetting.qml:36 ../app/ui/SettingsPage.qml:143
159163msgid "Dark"
160164msgstr ""
161165
@@ -163,27 +167,27 @@ msgstr ""
163167msgid "Podcast"
164168msgstr ""
165169
166−#: ../app/ui/EpisodesPage.qml:75 ../app/ui/WhatsNewTab.qml:33
170+#: ../app/ui/EpisodesPage.qml:75 ../app/ui/WhatsNewTab.qml:46
167171msgid "Search Episode"
168172msgstr ""
169173
170−#: ../app/ui/EpisodesPage.qml:84 ../app/ui/WhatsNewTab.qml:42
174+#: ../app/ui/EpisodesPage.qml:84 ../app/ui/WhatsNewTab.qml:55
171175msgid "Mark all listened"
172176msgstr ""
173177
174178#: ../app/ui/EpisodesPage.qml:95 ../app/ui/EpisodesPage.qml:189
175−#: ../app/ui/SearchPage.qml:226
179+#: ../app/ui/SearchPage.qml:260
176180msgid "Unsubscribe"
177181msgstr ""
178182
179183#: ../app/ui/EpisodesPage.qml:112 ../app/ui/EpisodesPage.qml:206
180−#: ../app/ui/PodcastsTab.qml:72 ../app/ui/SearchPage.qml:65
181−#: ../app/ui/SearchPage.qml:98 ../app/ui/SettingsPage.qml:59
182−#: ../app/ui/SettingsPage.qml:93 ../app/ui/WhatsNewTab.qml:79
184+#: ../app/ui/PodcastsTab.qml:94 ../app/ui/SearchPage.qml:94
185+#: ../app/ui/SearchPage.qml:132 ../app/ui/SettingsPage.qml:82
186+#: ../app/ui/SettingsPage.qml:116 ../app/ui/WhatsNewTab.qml:105
183187msgid "Cancel"
184188msgstr ""
185189
186−#: ../app/ui/EpisodesPage.qml:141 ../app/ui/WhatsNewTab.qml:101
190+#: ../app/ui/EpisodesPage.qml:141 ../app/ui/WhatsNewTab.qml:118
187191msgid "Search episode"
188192msgstr ""
189193
@@ -196,12 +200,12 @@ msgstr ""
196200msgid "Are you sure you want to unsubscribe from <b>%1</b>?"
197201msgstr ""
198202
199−#: ../app/ui/EpisodesPage.qml:228 ../app/ui/WhatsNewTab.qml:203
203+#: ../app/ui/EpisodesPage.qml:228 ../app/ui/WhatsNewTab.qml:220
200204msgid "Episode Description"
201205msgstr ""
202206
203−#: ../app/ui/EpisodesPage.qml:240 ../app/ui/SearchPage.qml:155
204−#: ../app/ui/WhatsNewTab.qml:215
207+#: ../app/ui/EpisodesPage.qml:240 ../app/ui/SearchPage.qml:181
208+#: ../app/ui/WhatsNewTab.qml:232
205209msgid "Close"
206210msgstr ""
207211
@@ -241,194 +245,194 @@ msgstr ""
241245msgid "+%1s"
242246msgstr ""
243247
244−#: ../app/ui/PodcastsTab.qml:50 ../app/ui/SearchPage.qml:41
245−#: ../app/ui/SearchPage.qml:137
248+#: ../app/ui/PodcastsTab.qml:59 ../app/ui/SearchPage.qml:56
249+#: ../app/ui/SearchPage.qml:163
246250msgid "Search Podcast"
247251msgstr ""
248252
249−#: ../app/ui/PodcastsTab.qml:58 ../app/ui/PodcastsTab.qml:80
253+#: ../app/ui/PodcastsTab.qml:67 ../app/ui/PodcastsTab.qml:102
250254msgid "Grid View"
251255msgstr ""
252256
253−#: ../app/ui/PodcastsTab.qml:58 ../app/ui/PodcastsTab.qml:80
257+#: ../app/ui/PodcastsTab.qml:67 ../app/ui/PodcastsTab.qml:102
254258msgid "List View"
255259msgstr ""
256260
257−#: ../app/ui/PodcastsTab.qml:101
261+#: ../app/ui/PodcastsTab.qml:114
258262msgid "Search podcast"
259263msgstr ""
260264
261−#: ../app/ui/PodcastsTab.qml:133
265+#: ../app/ui/PodcastsTab.qml:146
262266msgid "No Podcast Subscriptions"
263267msgstr ""
264268
265−#: ../app/ui/PodcastsTab.qml:133
269+#: ../app/ui/PodcastsTab.qml:146
266270msgid "No Podcasts Found"
267271msgstr ""
268272
269−#: ../app/ui/PodcastsTab.qml:134
273+#: ../app/ui/PodcastsTab.qml:147
270274msgid ""
271275"You haven't subscribed to any podcasts yet, visit the 'Find New Podcasts' "
272276"page to add some."
273277msgstr ""
274278
275−#: ../app/ui/PodcastsTab.qml:135 ../app/ui/SearchPage.qml:187
279+#: ../app/ui/PodcastsTab.qml:148 ../app/ui/SearchPage.qml:213
276280msgid "No podcasts found matching the search term."
277281msgstr ""
278282
279−#: ../app/ui/PodcastsTab.qml:168 ../app/ui/PodcastsTab.qml:211
283+#: ../app/ui/PodcastsTab.qml:186 ../app/ui/PodcastsTab.qml:229
280284#, qt-format
281285msgid "%1 unheard episode"
282286msgid_plural "%1 unheard episodes"
283287msgstr[0] ""
284288msgstr[1] ""
285289
286−#: ../app/ui/SearchPage.qml:49
290+#: ../app/ui/SearchPage.qml:42
291+msgid "Add New Podcasts"
292+msgstr ""
293+
294+#: ../app/ui/SearchPage.qml:64
287295msgid "Add Podcast"
288296msgstr ""
289297
290−#: ../app/ui/SearchPage.qml:90
298+#: ../app/ui/SearchPage.qml:124
291299msgid "Save Podcast"
292300msgstr ""
293301
294−#: ../app/ui/SearchPage.qml:125
302+#: ../app/ui/SearchPage.qml:151
295303msgid "Feed URL"
296304msgstr ""
297305
298−#: ../app/ui/SearchPage.qml:152
306+#: ../app/ui/SearchPage.qml:178
299307msgid "Unable to subscribe"
300308msgstr ""
301309
302−#: ../app/ui/SearchPage.qml:153
310+#: ../app/ui/SearchPage.qml:179
303311msgid "Please check the URL and try again"
304312msgstr ""
305313
306−#: ../app/ui/SearchPage.qml:185
314+#: ../app/ui/SearchPage.qml:211
307315msgid "Looking to add a new Podcast?"
308316msgstr ""
309317
310−#: ../app/ui/SearchPage.qml:185
318+#: ../app/ui/SearchPage.qml:211
311319msgid "No Podcasts found"
312320msgstr ""
313321
314−#: ../app/ui/SearchPage.qml:186
322+#: ../app/ui/SearchPage.qml:212
315323msgid ""
316324"Click the 'magnifier' at the top to search or the 'plus' button to add by URL"
317325msgstr ""
318326
319327#. TRANSLATORS: The first argument here is the date of when the podcast was last updated followed by
320328#. the podcast description.
321−#: ../app/ui/SearchPage.qml:222
329+#: ../app/ui/SearchPage.qml:256
322330#, qt-format
323331msgid ""
324332"Last Updated: %1\n"
325333"%2"
326334msgstr ""
327335
328−#: ../app/ui/SearchPage.qml:226
336+#: ../app/ui/SearchPage.qml:260
329337msgid "Subscribe"
330338msgstr ""
331339
332−#: ../app/ui/SearchPage.qml:297
340+#: ../app/ui/SearchPage.qml:331
333341msgid "Not Available"
334342msgstr ""
335343
336344#. TRANSLATORS: This strings refers to the seeking of the episode playback. Users can set how far they
337345#. want to seek forward when pressing on this button.
338−#: ../app/ui/SettingsPage.qml:40 ../app/ui/SettingsPage.qml:130
346+#: ../app/ui/SettingsPage.qml:63 ../app/ui/SettingsPage.qml:153
339347msgid "Skip forward"
340348msgstr ""
341349
342−#: ../app/ui/SettingsPage.qml:47 ../app/ui/SettingsPage.qml:81
343−#: ../app/ui/SettingsPage.qml:131 ../app/ui/SettingsPage.qml:138
350+#: ../app/ui/SettingsPage.qml:70 ../app/ui/SettingsPage.qml:104
351+#: ../app/ui/SettingsPage.qml:154 ../app/ui/SettingsPage.qml:161
344352#, qt-format
345353msgid "%1 seconds"
346354msgstr ""
347355
348−#: ../app/ui/SettingsPage.qml:51 ../app/ui/SettingsPage.qml:85
356+#: ../app/ui/SettingsPage.qml:74 ../app/ui/SettingsPage.qml:108
349357msgid "Ok"
350358msgstr ""
351359
352360#. TRANSLATORS: This strings refers to the seeking of the episode playback. Users can set how far they
353361#. want to seek backward when pressing on this button.
354−#: ../app/ui/SettingsPage.qml:74 ../app/ui/SettingsPage.qml:137
362+#: ../app/ui/SettingsPage.qml:97 ../app/ui/SettingsPage.qml:160
355363msgid "Skip back"
356364msgstr ""
357365
358366#. TRANSLATORS: Shortened form of "Miscellaneous" which is shown to denote other setting options
359367#. that doesn't fit into any other category.
360−#: ../app/ui/SettingsPage.qml:114
368+#: ../app/ui/SettingsPage.qml:137
361369msgid "General Settings"
362370msgstr ""
363371
364−#: ../app/ui/SettingsPage.qml:125
372+#: ../app/ui/SettingsPage.qml:148
365373msgid "Playback Settings"
366374msgstr ""
367375
368−#: ../app/ui/SettingsPage.qml:143
376+#: ../app/ui/SettingsPage.qml:166
369377msgid "Podcast Episode Settings"
370378msgstr ""
371379
372−#: ../app/ui/SettingsPage.qml:149
380+#: ../app/ui/SettingsPage.qml:172
373381msgid "Automatically delete old episodes"
374382msgstr ""
375383
376−#: ../app/ui/SettingsPage.qml:151
384+#: ../app/ui/SettingsPage.qml:174
377385msgid ""
378386"Delete episodes that are older than a given number of days for each podcast"
379387msgstr ""
380388
381−#: ../app/ui/SettingsPage.qml:163
389+#: ../app/ui/SettingsPage.qml:186
382390msgid "Automatically download new episodes"
383391msgstr ""
384392
385−#: ../app/ui/SettingsPage.qml:165
393+#: ../app/ui/SettingsPage.qml:188
386394msgid "Default number of new episodes to download for each podcast"
387395msgstr ""
388396
389397#. TRANSLATORS: Shortened form of "Miscellaneous" which is shown to denote other setting options
390398#. that doesn't fit into any other category.
391−#: ../app/ui/SettingsPage.qml:177
399+#: ../app/ui/SettingsPage.qml:200
392400msgid "Misc."
393401msgstr ""
394402
395−#: ../app/ui/SettingsPage.qml:204
403+#: ../app/ui/SettingsPage.qml:227
396404msgid "Report Bug"
397405msgstr ""
398406
399−#: ../app/ui/WhatsNewTab.qml:15
400−msgid "What's New"
401−msgstr ""
402−
403−#: ../app/ui/WhatsNewTab.qml:56
407+#: ../app/ui/WhatsNewTab.qml:69
404408msgid "Download all"
405409msgstr ""
406410
407−#: ../app/ui/WhatsNewTab.qml:125
411+#: ../app/ui/WhatsNewTab.qml:142
408412msgid "No New Episodes"
409413msgstr ""
410414
411−#: ../app/ui/WhatsNewTab.qml:125
415+#: ../app/ui/WhatsNewTab.qml:142
412416msgid "No Episodes Found"
413417msgstr ""
414418
415−#: ../app/ui/WhatsNewTab.qml:126
419+#: ../app/ui/WhatsNewTab.qml:143
416420msgid "No more episodes to listen to!"
417421msgstr ""
418422
419−#: ../app/ui/WhatsNewTab.qml:126
423+#: ../app/ui/WhatsNewTab.qml:143
420424msgid "No Episodes found matching the search term."
421425msgstr ""
422426
423−#: ../app/ui/WhatsNewTab.qml:256
427+#: ../app/ui/WhatsNewTab.qml:281
424428msgid "Today"
425429msgstr ""
426430
427−#: ../app/ui/WhatsNewTab.qml:260
431+#: ../app/ui/WhatsNewTab.qml:285
428432msgid "Yesterday"
429433msgstr ""
430434
431−#: ../app/ui/WhatsNewTab.qml:264
435+#: ../app/ui/WhatsNewTab.qml:289
432436msgid "Older"
433437msgstr ""
434438