Splashscreen ad support. Wait dialog for ad click/browser start.
[qtmads] / src / qtmadsadwidget.cpp
index 22e56a9..aefde02 100644 (file)
 #include <QTimer>
 #include <QDir>
 #include <QPluginLoader>
+#include <QMessageBox>
+#include <QAbstractButton>
 
 #include "qtmadsservice.h"
-#include "qtmadsserviceinterface.h"
+#include "qtmadsserviceloaderinterface.h"
 
 QtmadsAdWidget::QtmadsAdWidget(QString serviceName, AdType defaultType, quint32 groupId, AdFit fitting, QWidget *parent)
     : type(defaultType), adFit(fitting), QWidget(parent)
 {
-       this->loadPlugin(serviceName);
+       this->loadServicePlugin(serviceName);
        this->service->initializeService(serviceName, groupId, defaultType);
 
     adTimer = 0;
+    msgBox = 0;
 }
 
 QtmadsAdWidget::~QtmadsAdWidget()
 {
     this->clearAd();
+    emit adStopped();
 }
 
 void QtmadsAdWidget::startAd(quint32 adChangeIntervalInSecs)
 {
     getNewAd();
-
+    qDebug() << "ee";
     if(0 != adChangeIntervalInSecs){
         if(adTimer == 0){
             adTimer = new QTimer(this);
-            connect(adTimer, SIGNAL(timeout()), this, SLOT(getNewAd()));
         }else{
+            if(adTimer->isSingleShot()){
+                disconnect(adTimer, SIGNAL(timeout()), this, SLOT(singleShotEnded()));
+            }else{
+                disconnect(adTimer, SIGNAL(timeout()), this, SLOT(getNewAd()));
+            }
             adTimer->stop();
         }
+        connect(adTimer, SIGNAL(timeout()), this, SLOT(getNewAd()));
+        adTimer->setSingleShot(false);
         adTimer->start(adChangeIntervalInSecs*1000);
     }
 }
 
+void QtmadsAdWidget::startSingleShotAd(quint32 durationInSecs)
+{
+    getNewAd();
+
+    if(0 != durationInSecs){
+        if(adTimer == 0){
+            adTimer = new QTimer(this);
+        }else{
+            if(adTimer->isSingleShot()){
+                disconnect(adTimer, SIGNAL(timeout()), this, SLOT(singleShotEnded()));
+            }else{
+                disconnect(adTimer, SIGNAL(timeout()), this, SLOT(getNewAd()));
+            }
+            adTimer->stop();
+        }
+        connect(adTimer, SIGNAL(timeout()), this, SLOT(singleShotEnded()));
+        adTimer->setSingleShot(true);
+        adTimer->start(durationInSecs*1000);
+    }
+}
+
 void QtmadsAdWidget::setAdType(AdType adType)
 {
     this->type = adType;
@@ -117,7 +148,15 @@ void QtmadsAdWidget::adRequestFailed()
 void QtmadsAdWidget::adClicked(const QUrl &url)
 {
     if(url.isValid()){
-        qDebug() << "Browser opened to urli: " << url.toString();
+        qDebug() << "Browser opened to url: " << url.toString();
+        if(msgBox == 0){
+            msgBox = new QMessageBox(QMessageBox::NoIcon, tr("Opening ad"),
+                    tr("Opening ad to browser..."), QMessageBox::Cancel, this);
+       }
+        // just fixed wait time for now..
+        startTimer(10000);
+        msgBox->exec();
+
         QDesktopServices::openUrl(url);
     }
 }
@@ -128,7 +167,26 @@ void QtmadsAdWidget::clearAd()
     type = noAd;
 }
 
-bool QtmadsAdWidget::loadPlugin(QString serviceName)
+void QtmadsAdWidget::singleShotEnded()
+{
+    qDebug() << "singleShotEnded()";
+    adTimer->stop();
+    delete adTimer;
+    adTimer = 0;
+
+    this->clearAd();
+    emit adStopped();
+}
+
+void QtmadsAdWidget::timerEvent(QTimerEvent *event)
+{
+    qDebug() << "timerEvent()";
+    this->killTimer(event->timerId());
+    if(msgBox)
+        msgBox->close();
+}
+
+bool QtmadsAdWidget::loadServicePlugin(QString serviceName)
 {
     bool pluginFound = false;
     QDir pluginsDir(qApp->applicationDirPath());
@@ -149,13 +207,14 @@ bool QtmadsAdWidget::loadPlugin(QString serviceName)
             QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
             QObject *plugin = pluginLoader.instance();
             if (plugin) {
-                QtmadsServiceInterface *plugLoader = qobject_cast<QtmadsServiceInterface *>(plugin);
+                QtmadsServiceLoaderInterface *plugLoader = qobject_cast<QtmadsServiceLoaderInterface *>(plugin);
                 this->service = plugLoader->loadService();
-                if (this->service)
+                if (this->service){
                     pluginFound = true;
-                else{
+                    qDebug() << "Plugin loaded";
+                }else{
                     qDebug() << "Plugin load failed: " << pluginLoader.errorString();
-                    }
+                }
                 plugLoader = 0;
                 delete plugin;
             }else{