Improved encoding support for browsing and adding.
[vlc-remote] / accountdialog.cpp
index 4256d06..5b19fb6 100644 (file)
@@ -5,6 +5,23 @@
 #include <QInputDialog>
 #include <QSettings>
 #include <QTcpSocket>
+#include <QFuture>
+#include <QtConcurrentMap>
+
+
+
+QListWidgetItem asyncTestItem(const QListWidgetItem &item)
+{
+
+    QListWidgetItem item2= item;
+    item2.setText("boby");
+
+    return item;
+
+}
+
+
+
 
 AccountDialog::AccountDialog(QWidget *parent) :
         QDialog(parent),
@@ -12,6 +29,9 @@ AccountDialog::AccountDialog(QWidget *parent) :
 {
     ui->setupUi(this);
 
+    mFuturWatcher = new QFutureWatcher<QListWidgetItem>(this);
+    connect(mFuturWatcher,SIGNAL(resultReadyAt(int)),this,SLOT(setAsyncItem(int)));
+
     connect(ui->addButton,SIGNAL(clicked()),this,SLOT(add()));
     connect(ui->editButton,SIGNAL(clicked()),this,SLOT(edit()));
     connect(ui->remButton,SIGNAL(clicked()),this,SLOT(rem()));
@@ -34,6 +54,19 @@ void AccountDialog::add()
     dialog->exec();
     load();
 }
+QString AccountDialog::currentIp()
+{
+
+    QSettings settings;
+    QString useKey = settings.value("config/currentKey").toString();
+    QString useIp ;
+    if ( !useKey.isEmpty())
+        useIp = settings.value("account/"+useKey).toString();
+
+    else return QString();
+
+    return useIp;
+}
 
 void AccountDialog::load()
 {
@@ -43,25 +76,16 @@ void AccountDialog::load()
     ui->listWidget->clear(); // tjr effacer , sinon on rajoute
 
     QSettings settings;
-    settings.beginGroup("config");
-    QString useKey = settings.value("currentKey").toString();
-    settings.endGroup();
+
+    QString useKey = settings.value("config/currentKey").toString();
+
+    QList <QListWidgetItem> asycItems;
 
     settings.beginGroup("account");
     foreach ( QString key, settings.allKeys())
     {
         QListWidgetItem * item = new QListWidgetItem;
 
-        // ========> NEED TO USE QFUTUR
-        //        QString hostIp = settings.value(key).toString();
-        //        QTcpSocket * socket = new QTcpSocket(this);
-        //        socket->connectToHost(hostIp, 80);
-        //        if (socket->waitForConnected(1000))
-        //            item->setBackgroundColor(Qt::green);
-        //        else
-        //            item->setBackgroundColor(Qt::red);
-
-
         item->setText(key);
         item->setData(Qt::UserRole, settings.value(key));
         if (useKey == key) {
@@ -70,10 +94,64 @@ void AccountDialog::load()
             item->setFont(font);
         }
         ui->listWidget->addItem(item);
+        asycItems.append(*item);
     }
     settings.endGroup();    
+
+
+    // ... create and add in the list widget
+
+    //  QFuture<QListWidgetItem> itemFutur = QtConcurrent::mapped(asycItems, asyncTestItem);
+
+
+    mFuturWatcher->setFuture(QtConcurrent::mapped(asycItems, asyncTestItem));
 }
 
+QListWidgetItem AccountDialog::asyncTestItem(const QListWidgetItem& item)
+{
+    //==========> NEED TO USE POINTER TO AVOID setAsyncItem! But I don't know how;..
+    QListWidgetItem newItem = item;
+
+    QTcpSocket * socket = new QTcpSocket;
+    QSettings settings;
+    QString host = settings.value("account/"+item.text()).toString();
+
+    if(host.contains(":"))
+    {
+        QStringList hostSplit = host.split(":");
+        QString ip   = hostSplit.at(0);
+        QString port = hostSplit.at(1);
+        socket->connectToHost(ip,port.toInt());
+    }
+
+    else
+        socket->connectToHost(host,8080);
+
+    if (socket->waitForConnected(1000))
+        newItem.setIcon(QIcon::fromTheme("widgets_tickmark_list"));
+    else
+        newItem.setIcon(QIcon::fromTheme("statusarea_presence_busy_error"));
+
+    return newItem;
+
+
+}
+
+
+
+void AccountDialog::setAsyncItem(int row)  // EDIT THE ROW AFTER ASYNC FUNCTION FINISHED
+{
+    QListWidgetItem newItem = mFuturWatcher->resultAt(row);
+    QListWidgetItem * item = ui->listWidget->item(row);
+
+    item->setIcon(newItem.icon());
+
+
+
+}
+
+
+
 void AccountDialog::edit()
 {
     QString currentIp = ui->listWidget->currentItem()->data(Qt::UserRole).toString();
@@ -101,13 +179,10 @@ void AccountDialog::rem()
 void AccountDialog::use()
 {
     QString currentKey = ui->listWidget->currentItem()->text();
-
     QSettings settings;
-    settings.beginGroup("config");
-    settings.setValue("currentKey", currentKey);
-    settings.endGroup();
-
+    settings.setValue("config/currentKey", currentKey);
     load();
+    emit accept();
 }
 
 void AccountDialog::enableUi()