5b19fb6efe99cfa90ca1434e0fe6c190e16a32ad
[vlc-remote] / accountdialog.cpp
1 #include "accountdialog.h"
2 #include "ui_accountdialog.h"
3 #include "newaccountdialog.h"
4 #include <QDebug>
5 #include <QInputDialog>
6 #include <QSettings>
7 #include <QTcpSocket>
8 #include <QFuture>
9 #include <QtConcurrentMap>
10
11
12
13 QListWidgetItem asyncTestItem(const QListWidgetItem &item)
14 {
15
16     QListWidgetItem item2= item;
17     item2.setText("boby");
18
19     return item;
20
21 }
22
23
24
25
26 AccountDialog::AccountDialog(QWidget *parent) :
27         QDialog(parent),
28         ui(new Ui::AccountDialog)
29 {
30     ui->setupUi(this);
31
32     mFuturWatcher = new QFutureWatcher<QListWidgetItem>(this);
33     connect(mFuturWatcher,SIGNAL(resultReadyAt(int)),this,SLOT(setAsyncItem(int)));
34
35     connect(ui->addButton,SIGNAL(clicked()),this,SLOT(add()));
36     connect(ui->editButton,SIGNAL(clicked()),this,SLOT(edit()));
37     connect(ui->remButton,SIGNAL(clicked()),this,SLOT(rem()));
38     connect(ui->useButton,SIGNAL(clicked()),this,SLOT(use()));
39     connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(enableUi()));
40
41     load();
42
43 }
44
45 AccountDialog::~AccountDialog()
46 {
47     delete ui;
48 }
49
50 void AccountDialog::add()
51 {
52
53     NewAccountDialog *dialog = new NewAccountDialog(this);
54     dialog->exec();
55     load();
56 }
57 QString AccountDialog::currentIp()
58 {
59
60     QSettings settings;
61     QString useKey = settings.value("config/currentKey").toString();
62     QString useIp ;
63     if ( !useKey.isEmpty())
64         useIp = settings.value("account/"+useKey).toString();
65
66     else return QString();
67
68     return useIp;
69 }
70
71 void AccountDialog::load()
72 {
73     ui->editButton->setEnabled(false);
74     ui->remButton->setEnabled(false);
75     ui->useButton->setEnabled(false);
76     ui->listWidget->clear(); // tjr effacer , sinon on rajoute
77
78     QSettings settings;
79
80     QString useKey = settings.value("config/currentKey").toString();
81
82     QList <QListWidgetItem> asycItems;
83
84     settings.beginGroup("account");
85     foreach ( QString key, settings.allKeys())
86     {
87         QListWidgetItem * item = new QListWidgetItem;
88
89         item->setText(key);
90         item->setData(Qt::UserRole, settings.value(key));
91         if (useKey == key) {
92             QFont font = item->font();
93             font.setBold(true);
94             item->setFont(font);
95         }
96         ui->listWidget->addItem(item);
97         asycItems.append(*item);
98     }
99     settings.endGroup();    
100
101
102     // ... create and add in the list widget
103
104     //  QFuture<QListWidgetItem> itemFutur = QtConcurrent::mapped(asycItems, asyncTestItem);
105
106
107     mFuturWatcher->setFuture(QtConcurrent::mapped(asycItems, asyncTestItem));
108 }
109
110 QListWidgetItem AccountDialog::asyncTestItem(const QListWidgetItem& item)
111 {
112     //==========> NEED TO USE POINTER TO AVOID setAsyncItem! But I don't know how;..
113     QListWidgetItem newItem = item;
114
115     QTcpSocket * socket = new QTcpSocket;
116     QSettings settings;
117     QString host = settings.value("account/"+item.text()).toString();
118
119     if(host.contains(":"))
120     {
121         QStringList hostSplit = host.split(":");
122         QString ip   = hostSplit.at(0);
123         QString port = hostSplit.at(1);
124         socket->connectToHost(ip,port.toInt());
125     }
126
127     else
128         socket->connectToHost(host,8080);
129
130     if (socket->waitForConnected(1000))
131         newItem.setIcon(QIcon::fromTheme("widgets_tickmark_list"));
132     else
133         newItem.setIcon(QIcon::fromTheme("statusarea_presence_busy_error"));
134
135     return newItem;
136
137
138 }
139
140
141
142 void AccountDialog::setAsyncItem(int row)  // EDIT THE ROW AFTER ASYNC FUNCTION FINISHED
143 {
144     QListWidgetItem newItem = mFuturWatcher->resultAt(row);
145     QListWidgetItem * item = ui->listWidget->item(row);
146
147     item->setIcon(newItem.icon());
148
149
150
151 }
152
153
154
155 void AccountDialog::edit()
156 {
157     QString currentIp = ui->listWidget->currentItem()->data(Qt::UserRole).toString();
158     QString currentKey = ui->listWidget->currentItem()->text();
159
160     NewAccountDialog *dialog = new NewAccountDialog(this);
161     dialog->edit(currentKey, currentIp);
162     dialog->exec();
163
164     load();
165 }
166
167 void AccountDialog::rem()
168 {
169     QString key = ui->listWidget->currentItem()->text();
170
171     QSettings settings;
172     settings.beginGroup("account");
173     settings.remove(key);
174     settings.endGroup();
175
176     load(); // On recharge les compte
177 }
178
179 void AccountDialog::use()
180 {
181     QString currentKey = ui->listWidget->currentItem()->text();
182     QSettings settings;
183     settings.setValue("config/currentKey", currentKey);
184     load();
185     emit accept();
186 }
187
188 void AccountDialog::enableUi()
189 {
190     ui->editButton->setEnabled(true);
191     ui->remButton->setEnabled(true);
192     ui->useButton->setEnabled(true);
193 }