2 * Copyright (c) 2009 Eetu Lehmusvuo.
4 * This file is part of QtMAds.
6 * QtMAds is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * QtMAds is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with QtMAds. If not, see <http://www.gnu.org/licenses/>.
23 #include "qtmadsadwidget.h"
25 #include <QApplication>
28 #include <QDesktopServices>
31 #include <QPluginLoader>
33 #include "qtmadsservice.h"
34 #include "qtmadsserviceinterface.h"
36 QtmadsAdWidget::QtmadsAdWidget(QString serviceName, AdType defaultType, quint32 groupId, AdFit fitting, QWidget *parent)
37 : type(defaultType), adFit(fitting), QWidget(parent)
39 this->loadPlugin(serviceName);
40 this->service->initializeService(serviceName, groupId, defaultType);
45 QtmadsAdWidget::~QtmadsAdWidget()
50 void QtmadsAdWidget::startAd(quint32 adChangeIntervalInSecs)
54 if(0 != adChangeIntervalInSecs){
56 adTimer = new QTimer(this);
57 connect(adTimer, SIGNAL(timeout()), this, SLOT(getNewAd()));
61 adTimer->start(adChangeIntervalInSecs*1000);
65 void QtmadsAdWidget::setAdType(AdType adType)
70 AdType QtmadsAdWidget::adType()
75 void QtmadsAdWidget::getNewAd()
77 qDebug() << "getNewAd()";
78 connect(service, SIGNAL(adRequestReady(QHash<QString, QVariant> &)),this, SLOT(adRequestSucceeded(QHash<QString, QVariant> &)));
79 connect(service, SIGNAL(adRequestFailed()),this, SLOT(adRequestFailed()));
81 QHash<QString, QVariant> adParams;
82 this->getAdAsHash(adParams);
83 this->service->getAd(adParams);
86 void QtmadsAdWidget::adRequestSucceeded(QHash<QString, QVariant> &ad)
88 qDebug() << "adRequestSucceeded()";
89 disconnect(service, SIGNAL(adRequestReady(QHash<QString, QVariant> &)),this, SLOT(adRequestSucceeded(QHash<QString, QVariant> &)));
90 disconnect(service, SIGNAL(adRequestFailed()),this, SLOT(adRequestFailed()));
92 ParseState adReady = parseWaiting;
97 if(adReady != parseFailed){
98 adReady = this->parseFromParameters(ad);
101 if(adReady == parseReady){
104 }else if(adReady == parseFailed){
109 void QtmadsAdWidget::adRequestFailed()
111 disconnect(service, SIGNAL(adRequestReady(QHash<QString, QVariant> &)),this, SLOT(adRequestSucceeded(QHash<QString, QVariant> &)));
112 disconnect(service, SIGNAL(adRequestFailed()),this, SLOT(adRequestFailed()));
117 void QtmadsAdWidget::adClicked(const QUrl &url)
120 qDebug() << "Browser opened to urli: " << url.toString();
121 QDesktopServices::openUrl(url);
125 void QtmadsAdWidget::clearAd()
131 bool QtmadsAdWidget::loadPlugin(QString serviceName)
133 bool pluginFound = false;
134 QDir pluginsDir(qApp->applicationDirPath());
135 #if defined(Q_OS_WIN)
136 if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
138 #elif defined(Q_OS_MAC)
139 if (pluginsDir.dirName() == "MacOS") {
145 pluginsDir.cd(PLUGINS_PATH);
146 foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
147 qDebug() << "path: " << pluginsDir.absoluteFilePath(fileName);
148 if(fileName.contains(serviceName) && !pluginFound){
149 QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
150 QObject *plugin = pluginLoader.instance();
152 QtmadsServiceInterface *plugLoader = qobject_cast<QtmadsServiceInterface *>(plugin);
153 this->service = plugLoader->loadService();
157 qDebug() << "Plugin load failed: " << pluginLoader.errorString();
162 qDebug() << "Plugin load failed: " << pluginLoader.errorString();
165 qDebug() << "not service";