diff --git a/common/GPodderCore.qml b/common/GPodderCore.qml index 1511ea9..53f061b 100644 --- a/common/GPodderCore.qml +++ b/common/GPodderCore.qml @@ -33,6 +33,9 @@ Python { signal deleted(int episode_id) signal isNewChanged(int episode_id, bool is_new) signal stateChanged(int episode_id, int state) + signal podcastListChanged() + signal updatingPodcast(int podcast_id) + signal updatedPodcast(var podcast) Component.onCompleted: { setHandler('hello', function (version, copyright) { @@ -47,6 +50,9 @@ Python { setHandler('deleted', py.deleted); setHandler('is-new-changed', py.isNewChanged); setHandler('state-changed', py.stateChanged); + setHandler('podcast-list-changed', py.podcastListChanged); + setHandler('updating-podcast', py.updatingPodcast); + setHandler('updated-podcast', py.updatedPodcast); var path = Qt.resolvedUrl('../..').substr('file://'.length); addImportPath(path); diff --git a/common/GPodderPodcastListModel.qml b/common/GPodderPodcastListModel.qml new file mode 100644 index 0000000..4d75ce7 --- /dev/null +++ b/common/GPodderPodcastListModel.qml @@ -0,0 +1,60 @@ + +/** + * + * gPodder QML UI Reference Implementation + * Copyright (c) 2013, 2014, Thomas Perl + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + */ + +import QtQuick 2.0 + +import 'util.js' as Util + +ListModel { + id: podcastListModel + + function reload() { + py.call('main.load_podcasts', [], function (podcasts) { + Util.updateModelFrom(podcastListModel, podcasts); + }); + } + + property var connections: Connections { + target: py + + onPodcastListChanged: { + podcastListModel.reload(); + } + + onUpdatingPodcast: { + for (var i=0; i