83
84
id: directoryButtons
86
anchors.bottomMargin: Config.listItemHeight
89
visible: parent.height > 200
90
anchors.centerIn: parent
91
spacing: Config.largeSpacing * 3
94
source: 'artwork/directory-toplist.png'
97
property string modelData: 'http://gpodder.org/directory/toplist.xml'
100
searchResultsListModel.source = item;
106
anchors.top: parent.bottom
107
anchors.horizontalCenter: parent.horizontalCenter
115
source: 'artwork/directory-examples.png'
118
property string modelData: controller.myGpoEnabled?('http://' + controller.myGpoUsername + ':' + controller.myGpoPassword + '@gpodder.net/subscriptions/' + controller.myGpoUsername + '.xml'):('http://gpodder.org/directory/examples.xml')
121
searchResultsListModel.source = item;
127
anchors.top: parent.bottom
128
anchors.horizontalCenter: parent.horizontalCenter
131
text: controller.myGpoEnabled?_('My gpodder.net'):_('Examples')
85
visible: topBar.visible
93
topMargin: Config.smallSpacing
96
model: ListModel { id: directoryButtonsModel }
98
function doAction(action) {
99
if (action === 'toplist') {
100
searchResultsListModel.loadJson('https://gpodder.net/toplist/50.json');
102
} else if (action === 'mygpo') {
103
if (controller.myGpoEnabled) {
104
searchResultsListModel.loadJson('https://' + controller.myGpoUsername + ':' + controller.myGpoPassword + '@gpodder.net/subscriptions/' + controller.myGpoUsername + '.json');
107
} else if (action === 'suggestions') {
108
if (controller.myGpoEnabled) {
109
searchResultsListModel.loadJson('https://' + controller.myGpoUsername + ':' + controller.myGpoPassword + '@gpodder.net/suggestions/50.json');
113
// Assume action is a URL
114
searchResultsListModel.loadJson(action);
119
Component.onCompleted: {
123
function reloadOptions() {
124
directoryButtonsModel.clear();
125
directoryButtonsModel.append({label: _('Most-subscribed on gpodder.net'), action: 'toplist'});
127
if (controller.myGpoEnabled) {
128
directoryButtonsModel.append({label: _('Your subscriptions on gpodder.net'), action: 'mygpo'});
129
directoryButtonsModel.append({label: _('Recommended by gpodder.net for you'), action: 'suggestions'});
132
var result = new XMLHttpRequest();
133
result.onreadystatechange = function() {
134
if (result.readyState == XMLHttpRequest.DONE) {
135
var data = JSON.parse(result.responseText);
136
data.sort(function (a, b) {
137
// Sort by usage count, descending
138
return b.usage - a.usage;
140
for (var i=0; i<data.length; i++) {
141
directoryButtonsModel.append({label: data[i].tag, action: 'https://gpodder.net/api/2/tag/' + data[i].tag + '/50.json'});
145
result.open('GET', 'https://gpodder.net/api/2/tags/50.json');
149
delegate: SelectableItem {
150
property variant modelData: undefined
158
verticalCenter: parent.verticalCenter
159
margins: Config.smallSpacing
162
elide: Text.ElideRight
166
directoryButtons.doAction(action);
172
flickable: directoryButtons
138
173
visible: directoryButtons.visible
139
anchors.right: parent.right
140
anchors.bottom: parent.bottom
141
anchors.margins: Config.largeSpacing
144
text: '<em>' + _('powered by gpodder.net') + '</em>'
150
180
anchors.fill: parent
151
anchors.topMargin: -50
181
anchors.topMargin: (width > height || status == DialogStatus.Closed) ? 0 : -50 // see bug 1915
153
183
acceptButtonText: _('Subscribe')
154
184
rejectButtonText: _('Cancel')
166
196
property variant selectedIndices: []
168
opacity: (searchResultsListModel.status == XmlListModel.Ready)?1:0
198
opacity: searchResultsListModel.loaded ? 1 : 0
169
199
Behavior on opacity { PropertyAnimation { } }
171
201
anchors.fill: parent
173
model: SearchResultsListModel {
174
204
id: searchResultsListModel
176
function searchFor(query) {
177
console.log('Searching for: ' + query)
178
source = 'http://gpodder.net/search.xml?q=' + query
179
console.log('new source:' + source)
205
property bool loaded: false
207
function search(query) {
208
loadJson('https://gpodder.net/search.json?q=' + query);
211
function loadJson(url) {
213
searchResultsListModel.loaded = false;
215
var result = new XMLHttpRequest();
216
result.onreadystatechange = function() {
217
if (result.readyState == XMLHttpRequest.DONE) {
218
var data = JSON.parse(result.responseText);
219
data.sort(function (a, b) {
220
// Sort by subscriber count, descending
221
return b.subscribers - a.subscribers;
223
for (var i=0; i<data.length; i++) {
224
searchResultsListModel.append(data[i]);
226
searchResultsListModel.loaded = true;
230
result.open('GET', url);