show config at the launch of application.
[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     QStringList hostSplit = host.split(":");
119     QString ip   = hostSplit.at(0);
120     QString port = hostSplit.at(1);
121
122
123     socket->connectToHost(ip,port.toInt());
124
125     if (socket->waitForConnected(1000))
126         newItem.setIcon(QIcon::fromTheme("widgets_tickmark_list"));
127     else
128          newItem.setIcon(QIcon::fromTheme("statusarea_presence_busy_error"));
129
130     return newItem;
131
132
133 }
134
135
136
137 void AccountDialog::setAsyncItem(int row)  // EDIT THE ROW AFTER ASYNC FUNCTION FINISHED
138 {
139     QListWidgetItem newItem = mFuturWatcher->resultAt(row);
140     QListWidgetItem * item = ui->listWidget->item(row);
141
142     item->setIcon(newItem.icon());
143
144
145
146 }
147
148
149
150 void AccountDialog::edit()
151 {
152     QString currentIp = ui->listWidget->currentItem()->data(Qt::UserRole).toString();
153     QString currentKey = ui->listWidget->currentItem()->text();
154
155     NewAccountDialog *dialog = new NewAccountDialog(this);
156     dialog->edit(currentKey, currentIp);
157     dialog->exec();
158
159     load();
160 }
161
162 void AccountDialog::rem()
163 {
164     QString key = ui->listWidget->currentItem()->text();
165
166     QSettings settings;
167     settings.beginGroup("account");
168     settings.remove(key);
169     settings.endGroup();
170
171     load(); // On recharge les compte
172 }
173
174 void AccountDialog::use()
175 {
176     QString currentKey = ui->listWidget->currentItem()->text();
177     QSettings settings;
178     settings.setValue("config/currentKey", currentKey);
179     load();
180     emit accept();
181 }
182
183 void AccountDialog::enableUi()
184 {
185     ui->editButton->setEnabled(true);
186     ui->remButton->setEnabled(true);
187     ui->useButton->setEnabled(true);
188 }