From 9d5fa936439a335c037116eff90517e66da03c93 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Sun, 2 Feb 2014 15:55:21 +0100 Subject: [PATCH] Common components: Episode List Model --- common/GPodderEpisodeListModel.qml | 63 ++++++++++++++++++++++++++++++ common/constants.js | 39 ++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 common/GPodderEpisodeListModel.qml create mode 100644 common/constants.js diff --git a/common/GPodderEpisodeListModel.qml b/common/GPodderEpisodeListModel.qml new file mode 100644 index 0000000..aef3528 --- /dev/null +++ b/common/GPodderEpisodeListModel.qml @@ -0,0 +1,63 @@ + +/** + * + * 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 +import 'constants.js' as Constants + +ListModel { + id: episodeListModel + + function loadEpisodes(podcast_id) { + py.call('main.load_episodes', [podcast_id], function (episodes) { + Util.updateModelFrom(episodeListModel, episodes); + }); + } + + property var connections: Connections { + target: py + + onDownloadProgress: { + Util.updateModelWith(episodeListModel, 'id', episode_id, + {'progress': progress}); + } + onPlaybackProgress: { + Util.updateModelWith(episodeListModel, 'id', episode_id, + {'playbackProgress': progress}); + } + onDownloaded: { + Util.updateModelWith(episodeListModel, 'id', episode_id, + {'progress': 0, 'downloadState': Constants.state.downloaded}); + } + onDeleted: { + Util.updateModelWith(episodeListModel, 'id', episode_id, + {'downloadState': Constants.state.deleted, 'isNew': false}); + } + onIsNewChanged: { + Util.updateModelWith(episodeListModel, 'id', episode_id, + {'isNew': is_new}); + } + onStateChanged: { + Util.updateModelWith(episodeListModel, 'id', episode_id, + {'downloadState': state}); + } + } +} diff --git a/common/constants.js b/common/constants.js new file mode 100644 index 0000000..28e3076 --- /dev/null +++ b/common/constants.js @@ -0,0 +1,39 @@ + +/** + * + * gPodder QML UI Reference Implementation + * Copyright (c) 2013, 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. + * + */ + +var layout = { + header: { + height: 100, /* page header height */ + }, +}; + +var colors = { + download: '#8ae234', /* download green */ + select: '#7f5785', /* gpodder dark purple */ + fresh: '#cf65de', /* gpodder purple */ + playback: '#729fcf', /* playback blue */ +}; + +var state = { + normal: 0, + downloaded: 1, + deleted: 2, +}; +