2
Copyright (C) 2010 Kai Dombrowe <just89@gmx.de>
4
This library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Lesser General Public
6
License as published by the Free Software Foundation; either
7
version 2.1 of the License, or (at your option) any later version.
9
This library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Lesser General Public License for more details.
14
You should have received a copy of the GNU Lesser General Public
15
License along with this library; if not, write to the Free Software
16
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24
#include <QtCore/QSettings>
30
class ConfigPrivate : public QSharedData {
32
ConfigPrivate(Config *cfg)
37
static bool titleSort(const Joschy::Video &video1, const Joschy::Video &video2)
39
return video1.title().toLower() < video2.title().toLower();
41
static bool categorySort(const Joschy::Video &video1, const Joschy::Video &video2)
43
return video1.category().toLower() < video2.category().toLower();
45
static bool descriptionSort(const Joschy::Video &video1, const Joschy::Video &video2)
47
return video1.description().toLower() < video2.description().toLower();
49
static bool publishedSort(const Joschy::Video &video1, const Joschy::Video &video2)
51
return video1.published() < video2.published();
53
static bool durationSort(const Joschy::Video &video1, const Joschy::Video &video2)
55
return video1.duration() < video2.duration();
57
static bool ratingSort(const Joschy::Video &video1, const Joschy::Video &video2)
59
return video1.rating() < video2.rating();
61
static bool viewCountSort(const Joschy::Video &video1, const Joschy::Video &video2)
63
return video1.viewCount() < video2.viewCount();
78
Config::Config(const QString &group, const QString &file)
79
: d(new ConfigPrivate(this))
88
Config::Config(const Joschy::Config ©)
97
: d(new ConfigPrivate(this))
112
Joschy::Config &Config::operator=(const Joschy::Config &rhs)
121
bool Config::operator==(const Joschy::Config &rhs) const
129
bool Config::operator!=(const Joschy::Config &rhs) const
137
bool Config::operator<(const Joschy::Config &rhs) const
145
bool Config::operator>(const Joschy::Config &rhs) const
153
bool Config::isValid() const
156
return (!d->file.isEmpty() && !d->group.isEmpty());
161
QString Config::group() const
169
QString Config::file() const
177
QList<Joschy::Video> Config::loadVideos() const
180
QList<Joschy::Video> videos;
187
void Config::setGroup(const QString &group)
195
void Config::setFile(const QString &file)
203
QString Config::createKey(const QString &k, const int &id) const
207
key.append(' '+QString::number(id));
213
void Config::saveVideos(const QList<Joschy::Video> &videos)
217
JOSCHY_DEBUG() << "Invalid cfg:" << d->file << d->group;
221
if (videos.isEmpty()) {
225
QSettings settings(d->file, QSettings::IniFormat);
226
settings.beginGroup(d->group);
229
foreach (const Joschy::Video &video, videos) {
230
foreach (const QString &propertyKey, video.propertys()) {
231
settings.setValue(createKey(propertyKey, count), video.property(propertyKey));
233
settings.setValue(createKey("PropertyKeys", count), video.propertys());
236
settings.setValue("VideoCount", count);
244
void Config::loadVideos(QList<Joschy::Video> *videos) const
248
JOSCHY_DEBUG() << "Invalid cfg:" << d->file << d->group;
252
QSettings settings(d->file, QSettings::IniFormat);
253
settings.beginGroup(d->group);
255
const int count = settings.value("VideoCount", 0).toInt();
256
for (int i = 0; i < count; i++) {
258
const QStringList keys = settings.value(createKey("PropertyKeys", i), QStringList()).toStringList();
259
foreach (const QString &propertyKey, keys) {
260
video.setProperty(propertyKey, settings.value(createKey(propertyKey, i)));
262
videos->append(video);
270
QList<Joschy::Video> Config::sortVideos(const QList<Joschy::Video> &videos,
271
const Joschy::Config::SortType &type)
274
QList<Joschy::Video> list = videos;
275
sortVideos(&list, type);
281
void Config::sortVideos(QList<Joschy::Video> *videos, const Joschy::Config::SortType &type)
285
case Config::SortByTitleType: qStableSort(videos->begin(), videos->end(), ConfigPrivate::titleSort); break;
286
case Config::SortByDescriptionType: qStableSort(videos->begin(), videos->end(), ConfigPrivate::descriptionSort); break;
287
case Config::SortByPublishedType: qStableSort(videos->begin(), videos->end(), ConfigPrivate::publishedSort); break;
288
case Config::SortByDurationType: qStableSort(videos->begin(), videos->end(), ConfigPrivate::durationSort); break;
289
case Config::SortByRatingType: qStableSort(videos->begin(), videos->end(), ConfigPrivate::ratingSort); break;
290
case Config::SortByViewCountType: qStableSort(videos->begin(), videos->end(), ConfigPrivate::viewCountSort); break;
291
case Config::SortByCategoryType: qStableSort(videos->begin(), videos->end(), ConfigPrivate::categorySort); break;
299
} // namespace Joschy