blob: 1bd0c1ccc90ccf7b05140fe75bb34218ecb22bac [file] [log] [blame]
Jared Lindblom06405c42013-01-17 20:48:39 -08001/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
2/*
3 * Copyright (c) 2012-2013 University of California, Los Angeles
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Jared Lindblom <lindblom@cs.ucla.edu>
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -080019 * Alexander Afanasyev <alexander.afanasyev@ucla.edu>
20 * Zhenkai Zhu <zhenkai@cs.ucla.edu>
21 * Ilya Moiseenko <iliamo@ucla.edu>
Jared Lindblom06405c42013-01-17 20:48:39 -080022 */
23
24#include "chronosharegui.h"
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -080025
Alexander Afanasyev83a53002013-01-24 11:12:01 -080026#include "logging.h"
Alexander Afanasyev9ca444e2013-01-25 16:29:35 -080027#include "ccnx-wrapper.h"
Zhenkai Zhuf3ea97a2013-01-30 15:20:52 -080028#include <QValidator>
Alexander Afanasyev9ca444e2013-01-25 16:29:35 -080029
30#include <boost/make_shared.hpp>
31
32using namespace boost;
33using namespace Ccnx;
Jared Lindblom06405c42013-01-17 20:48:39 -080034
Alexander Afanasyev83a53002013-01-24 11:12:01 -080035INIT_LOGGER ("Gui");
36
37ChronoShareGui::ChronoShareGui(QWidget *parent)
Jared Lindblomc8ffd592013-01-25 00:00:30 -080038 : QDialog(parent)
Zhenkai Zhud5756312013-01-31 13:49:45 -080039 , m_watcher(0)
40 , m_dispatcher(0)
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -080041#ifdef ADHOC_SUPPORTED
42 , m_executor (1)
43#endif
Zhenkai Zhuaca6cb52013-02-24 23:34:03 -080044#ifdef SPARKLE_SUPPORTED
Zhenkai Zhubb170d42013-02-25 13:48:59 -080045 , m_autoUpdate(new SparkleAutoUpdate(tr("http://no-url.org")))
Zhenkai Zhuaca6cb52013-02-24 23:34:03 -080046#endif
Jared Lindblom06405c42013-01-17 20:48:39 -080047{
Jared Lindblomf4b900e2013-02-07 18:08:47 -080048 setWindowTitle("Settings");
Jared Lindblomc8ffd592013-01-25 00:00:30 -080049
Jared Lindblomd8b76ad2013-02-07 20:37:37 -080050 labelUsername = new QLabel("Username (hint: /<username>)");
Jared Lindblomc8ffd592013-01-25 00:00:30 -080051 labelSharedFolder = new QLabel("Shared Folder Name");
52 labelSharedFolderPath = new QLabel("Shared Folder Path");
Zhenkai Zhuf3ea97a2013-01-30 15:20:52 -080053
Zhenkai Zhud5756312013-01-31 13:49:45 -080054 QRegExp regex("(/[^/]+)+$");
Zhenkai Zhuf3ea97a2013-01-30 15:20:52 -080055 QValidator *prefixValidator = new QRegExpValidator(regex, this);
56
Jared Lindblomc8ffd592013-01-25 00:00:30 -080057 editUsername = new QLineEdit();
Zhenkai Zhuf3ea97a2013-01-30 15:20:52 -080058 editUsername->setValidator(prefixValidator);
59
60 QRegExp noPureWhiteSpace("^\\S+.*$");
61 QValidator *wsValidator = new QRegExpValidator(noPureWhiteSpace, this);
Jared Lindblomc8ffd592013-01-25 00:00:30 -080062 editSharedFolder = new QLineEdit();
Zhenkai Zhuf3ea97a2013-01-30 15:20:52 -080063 editSharedFolder->setValidator(wsValidator);
64
Jared Lindblomc8ffd592013-01-25 00:00:30 -080065 editSharedFolderPath = new QLineEdit();
66 editSharedFolderPath->setReadOnly(true);
67 QPalette pal = editSharedFolderPath->palette();
68 pal.setColor(QPalette::Active, QPalette::Base, pal.color(QPalette::Disabled, QPalette::Base));
69 editSharedFolderPath->setPalette(pal);
70 button = new QPushButton("Submit");
71 label = new QLabel();
72
73 connect(button, SIGNAL(clicked()), this, SLOT(changeSettings()));
74
75 mainLayout = new QVBoxLayout; //vertically
76 mainLayout->addWidget(labelUsername);
77 mainLayout->addWidget(editUsername);
78 mainLayout->addWidget(labelSharedFolder);
79 mainLayout->addWidget(editSharedFolder);
80 mainLayout->addWidget(labelSharedFolderPath);
81 mainLayout->addWidget(editSharedFolderPath);
82 mainLayout->addWidget(button);
83 mainLayout->addWidget(label);
84 setLayout(mainLayout);
85
Alexander Afanasyev83a53002013-01-24 11:12:01 -080086 // create actions that result from clicking a menu option
87 createActions();
Jared Lindblomb4032e22013-01-17 23:50:51 -080088
Alexander Afanasyev83a53002013-01-24 11:12:01 -080089 // create tray icon
90 createTrayIcon();
Jared Lindblomb4032e22013-01-17 23:50:51 -080091
Alexander Afanasyev83a53002013-01-24 11:12:01 -080092 // set icon image
93 setIcon();
Jared Lindblom06405c42013-01-17 20:48:39 -080094
Alexander Afanasyev83a53002013-01-24 11:12:01 -080095 // show tray icon
96 m_trayIcon->show();
Alexander Afanasyev9e5a4702013-01-24 13:15:23 -080097
98 // Dispatcher(const boost::filesystem::path &path, const std::string &localUserName, const Ccnx::Name &localPrefix,
99 // const std::string &sharedFolder, const boost::filesystem::path &rootDir,
100 // Ccnx::CcnxWrapperPtr ccnx, SchedulerPtr scheduler, int poolSize = 2);
101
Zhenkai Zhud5756312013-01-31 13:49:45 -0800102 // load settings
103 if(!loadSettings())
104 {
105 // prompt user to choose folder
106 openMessageBox("First Time Setup", "Please enter a username, shared folder name and choose the shared folder path on your local filesystem.");
107 viewSettings();
108 openFileDialog();
109 viewSettings();
110 }
111 else
112 {
113 startBackend();
114 }
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800115
116#ifdef ADHOC_SUPPORTED
117 m_executor.start ();
118#endif
Zhenkai Zhud5756312013-01-31 13:49:45 -0800119}
120
121void
122ChronoShareGui::startBackend()
123{
124 if (m_watcher != 0 && m_dispatcher != 0)
125 {
126 return;
127 }
128
Alexander Afanasyev9ca444e2013-01-25 16:29:35 -0800129 m_dispatcher = new Dispatcher (m_username.toStdString (), m_sharedFolderName.toStdString (),
130 m_dirPath.toStdString (), make_shared<CcnxWrapper> ());
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800131
132 // Alex: this **must** be here, otherwise m_dirPath will be uninitialized
Alexander Afanasyev9ca444e2013-01-25 16:29:35 -0800133 m_watcher = new FsWatcher (m_dirPath,
134 bind (&Dispatcher::Did_LocalFile_AddOrModify, m_dispatcher, _1),
Zhenkai Zhud1756272013-02-01 17:02:18 -0800135 bind (&Dispatcher::Did_LocalFile_Delete, m_dispatcher, _1));
Jared Lindblom06405c42013-01-17 20:48:39 -0800136}
137
138ChronoShareGui::~ChronoShareGui()
139{
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800140#ifdef ADHOC_SUPPORTED
141 m_executor.shutdown ();
142#endif
143
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800144 delete m_watcher; // stop filewatching ASAP
Alexander Afanasyev9ca444e2013-01-25 16:29:35 -0800145 delete m_dispatcher; // stop dispatcher ASAP, but after watcher (to prevent triggering callbacks on deleted object)
Alexander Afanasyev9e5a4702013-01-24 13:15:23 -0800146
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800147 // cleanup
148 delete m_trayIcon;
149 delete m_trayIconMenu;
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800150#ifdef ADHOC_SUPPORTED
151 delete m_wifiAction;
152#endif
Zhenkai Zhuaca6cb52013-02-24 23:34:03 -0800153#ifdef SPARKLE_SUPPORTED
154 delete m_autoUpdate;
Zhenkai Zhubb170d42013-02-25 13:48:59 -0800155 delete m_checkForUpdates;
Zhenkai Zhuaca6cb52013-02-24 23:34:03 -0800156#endif
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800157 delete m_openFolder;
158 delete m_viewSettings;
159 delete m_changeFolder;
160 delete m_quitProgram;
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800161
162 delete labelUsername;
163 delete labelSharedFolder;
164 delete editUsername;
165 delete editSharedFolder;
166 delete button;
167 delete label;
168 delete mainLayout;
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800169}
170
171void ChronoShareGui::openMessageBox(QString title, QString text)
172{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800173 QMessageBox messageBox(this);
174 messageBox.setWindowTitle(title);
175 messageBox.setText(text);
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800176
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800177 messageBox.setIconPixmap(QPixmap(":/images/friends-group-icon.png"));
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800178
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800179 messageBox.exec();
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800180}
181
182void ChronoShareGui::openMessageBox(QString title, QString text, QString infotext)
183{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800184 QMessageBox messageBox(this);
185 messageBox.setWindowTitle(title);
186 messageBox.setText(text);
187 messageBox.setInformativeText(infotext);
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800188
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800189 messageBox.setIconPixmap(QPixmap(":/images/friends-group-icon.png"));
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800190
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800191 messageBox.exec();
Jared Lindblom06405c42013-01-17 20:48:39 -0800192}
193
194void ChronoShareGui::createActions()
195{
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800196 _LOG_DEBUG ("Create actions");
197
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800198 // create the "open folder" action
199 m_openFolder = new QAction(tr("&Open Folder"), this);
200 connect(m_openFolder, SIGNAL(triggered()), this, SLOT(openSharedFolder()));
Jared Lindblom06405c42013-01-17 20:48:39 -0800201
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800202 // create the "view settings" action
203 m_viewSettings = new QAction(tr("&View Settings"), this);
204 connect(m_viewSettings, SIGNAL(triggered()), this, SLOT(viewSettings()));
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800205
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800206 // create the "change folder" action
207 m_changeFolder = new QAction(tr("&Change Folder"), this);
208 connect(m_changeFolder, SIGNAL(triggered()), this, SLOT(openFileDialog()));
Jared Lindblomb4032e22013-01-17 23:50:51 -0800209
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800210#ifdef ADHOC_SUPPORTED
211 // create "AdHoc Wifi" action
212 m_wifiAction = new QAction (tr("Enable AdHoc &WiFI"), m_trayIconMenu);
213 m_wifiAction->setChecked (false);
214 m_wifiAction->setCheckable (true);
215 connect (m_wifiAction, SIGNAL (toggled(bool)), this, SLOT(onAdHocChange(bool)));
216#endif
217
Zhenkai Zhuaca6cb52013-02-24 23:34:03 -0800218#ifdef SPARKLE_SUPPORTED
Zhenkai Zhubb170d42013-02-25 13:48:59 -0800219 m_checkForUpdates = new QAction (tr("Check For Updates"), this);
220 connect (m_checkForUpdates, SIGNAL(triggered()), this, SLOT(onCheckForUpdates()));
Zhenkai Zhuaca6cb52013-02-24 23:34:03 -0800221#endif
222
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800223 // create the "quit program" action
224 m_quitProgram = new QAction(tr("&Quit"), this);
225 connect(m_quitProgram, SIGNAL(triggered()), qApp, SLOT(quit()));
Jared Lindblom06405c42013-01-17 20:48:39 -0800226}
227
228void ChronoShareGui::createTrayIcon()
229{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800230 // create a new icon menu
231 m_trayIconMenu = new QMenu(this);
Jared Lindblom06405c42013-01-17 20:48:39 -0800232
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800233 // add actions to the menu
234 m_trayIconMenu->addAction(m_openFolder);
235 m_trayIconMenu->addSeparator();
236 m_trayIconMenu->addAction(m_viewSettings);
237 m_trayIconMenu->addAction(m_changeFolder);
238 m_trayIconMenu->addSeparator();
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800239 m_trayIconMenu->addAction(m_wifiAction);
240 m_trayIconMenu->addSeparator();
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800241 m_trayIconMenu->addAction(m_quitProgram);
Jared Lindblom06405c42013-01-17 20:48:39 -0800242
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800243 // create new tray icon
244 m_trayIcon = new QSystemTrayIcon(this);
Jared Lindblomb4032e22013-01-17 23:50:51 -0800245
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800246#ifdef ADHOC_SUPPORTED
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800247 // associate the menu with the tray icon
248 m_trayIcon->setContextMenu(m_trayIconMenu);
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800249#endif
Jared Lindblomb4032e22013-01-17 23:50:51 -0800250
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800251 // handle left click of icon
252 connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconClicked(QSystemTrayIcon::ActivationReason)));
Jared Lindblom06405c42013-01-17 20:48:39 -0800253}
254
Alexander Afanasyev85a4ba02013-02-24 16:30:17 -0800255void
256ChronoShareGui::onAdHocChange (bool state)
257{
258#ifdef ADHOC_SUPPORTED
259 if (m_wifiAction->isChecked ())
260 {
261 QMessageBox msgBox;
262 msgBox.setText ("WARNING: your WiFi will be disconnected");
263 msgBox.setIcon (QMessageBox::Warning);
264 msgBox.setInformativeText("AdHoc WiFi will disconnect your current WiFi.\n Are you sure that you are OK with that?");
265 msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
266 msgBox.setDefaultButton(QMessageBox::Cancel);
267 int ret = msgBox.exec();
268
269 if (ret == QMessageBox::Cancel)
270 {
271 m_wifiAction->setChecked (false);
272 }
273 else
274 {
275
276 m_wifiAction->setText (tr("Disable AdHoc WiFI"));
277
278 // create adhoc
279 m_executor.execute (Adhoc::CreateAdhoc);
280 }
281 }
282 else
283 {
284 m_wifiAction->setText (tr("Enable AdHoc WiFI"));
285
286 // disable adhoc
287 m_executor.execute (Adhoc::DestroyAdhoc);
288
289 // a trick in DestroyAdhoc ensures that WiFi will be reconnected to a default WiFi
290 }
291#endif
292}
293
Zhenkai Zhuaca6cb52013-02-24 23:34:03 -0800294#ifdef SPARKLE_SUPPORTED
295void
296ChronoShareGui::onCheckForUpdates()
297{
298 m_autoUpdate->checkForUpdates();
299}
300#endif
301
Jared Lindblom06405c42013-01-17 20:48:39 -0800302void ChronoShareGui::setIcon()
303{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800304 // set the icon image
305 m_trayIcon->setIcon(QIcon(":/images/friends-group-icon.png"));
Jared Lindblom06405c42013-01-17 20:48:39 -0800306}
307
308void ChronoShareGui::openSharedFolder()
309{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800310 // Alex: isn't there an OS-independent way in QT for this?
Jared Lindblomb4032e22013-01-17 23:50:51 -0800311
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800312 // tell Finder to open the shared folder
313 QStringList scriptArgs;
314 scriptArgs << QLatin1String("-e")
315 << QString::fromLatin1("tell application \"Finder\" to reveal POSIX file \"%1\"")
316 .arg(m_dirPath);
Jared Lindblomb4032e22013-01-17 23:50:51 -0800317
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800318 // execute the commands to make it happen
319 QProcess::execute(QLatin1String("/usr/bin/osascript"), scriptArgs);
Jared Lindblomb4032e22013-01-17 23:50:51 -0800320
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800321 // clear command arguments
322 scriptArgs.clear();
Jared Lindblomb4032e22013-01-17 23:50:51 -0800323
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800324 // tell Finder to appear
325 scriptArgs << QLatin1String("-e")
326 << QLatin1String("tell application \"Finder\" to activate");
327
328 // execute the commands to make it happen
329 QProcess::execute("/usr/bin/osascript", scriptArgs);
Jared Lindblom06405c42013-01-17 20:48:39 -0800330}
Jared Lindblomb4032e22013-01-17 23:50:51 -0800331
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800332void ChronoShareGui::changeSettings()
333{
334 if(!editUsername->text().isEmpty())
Zhenkai Zhuf3ea97a2013-01-30 15:20:52 -0800335 m_username = editUsername->text().trimmed();
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800336 else
337 editUsername->setText(m_username);
338
339 if(!editSharedFolder->text().isEmpty())
Zhenkai Zhuf3ea97a2013-01-30 15:20:52 -0800340 m_sharedFolderName = editSharedFolder->text().trimmed();
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800341 else
342 editSharedFolder->setText(m_sharedFolderName);
343
344 saveSettings();
345 this->hide();
Zhenkai Zhud5756312013-01-31 13:49:45 -0800346
347 startBackend();
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800348}
349
Jared Lindblomb4032e22013-01-17 23:50:51 -0800350void ChronoShareGui::openFileDialog()
351{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800352 // prompt user for new directory
353 QString tempPath = QFileDialog::getExistingDirectory(this, tr("Choose a new folder"),
Alexander Afanasyev9e5a4702013-01-24 13:15:23 -0800354 m_dirPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
355 QFileInfo qFileInfo (tempPath);
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800356
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800357 if(qFileInfo.isDir())
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800358 {
359 m_dirPath = tempPath;
360 editSharedFolderPath->setText(m_dirPath);
361 }
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800362 else
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800363 {
364 openMessageBox ("Error", "Not a valid folder, Ignoring.");
365 }
Jared Lindblomb4032e22013-01-17 23:50:51 -0800366
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800367 _LOG_DEBUG ("Selected path: " << m_dirPath.toStdString ());
Jared Lindblomb4032e22013-01-17 23:50:51 -0800368
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800369 // save settings
370 saveSettings();
Jared Lindblomb4032e22013-01-17 23:50:51 -0800371}
372
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800373void ChronoShareGui::trayIconClicked (QSystemTrayIcon::ActivationReason reason)
Jared Lindblomb4032e22013-01-17 23:50:51 -0800374{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800375 // if double clicked, open shared folder
376 if(reason == QSystemTrayIcon::DoubleClick)
Jared Lindblomb4032e22013-01-17 23:50:51 -0800377 {
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800378 openSharedFolder();
Jared Lindblomb4032e22013-01-17 23:50:51 -0800379 }
380}
381
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800382void ChronoShareGui::viewSettings()
Jared Lindblomb4032e22013-01-17 23:50:51 -0800383{
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800384 //simple for now
385 this->show();
Zhenkai Zhud5756312013-01-31 13:49:45 -0800386 this->raise();
387 this->activateWindow();
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800388}
389
390bool ChronoShareGui::loadSettings()
391{
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800392 bool successful = true;
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800393
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800394 // Load Settings
395 // QSettings settings(m_settingsFilePath, QSettings::NativeFormat);
396 QSettings settings (QSettings::NativeFormat, QSettings::UserScope, "irl.cs.ucla.edu", "ChronoShare");
Jared Lindblom5d7e51e2013-01-18 00:59:34 -0800397
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800398 // _LOG_DEBUG (lexical_cast<string> (settings.allKeys()));
399
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800400 if(settings.contains("username"))
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800401 {
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800402 m_username = settings.value("username", "admin").toString();
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800403 }
404 else
405 {
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800406 successful = false;
407 }
408
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800409 editUsername->setText(m_username);
410
411 if(settings.contains("sharedfoldername"))
412 {
413 m_sharedFolderName = settings.value("sharedfoldername", "shared").toString();
414 }
415 else
416 {
417 successful = false;
418 }
419
420 editSharedFolder->setText(m_sharedFolderName);
421
422 if(settings.contains("dirPath"))
423 {
424 m_dirPath = settings.value("dirPath", QDir::homePath()).toString();
425 }
426 else
427 {
428 successful = false;
429 }
430
431 editSharedFolderPath->setText(m_dirPath);
432
433 _LOG_DEBUG ("Found configured path: " << (successful ? m_dirPath.toStdString () : std::string("no")));
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800434
435 return successful;
Jared Lindblomb4032e22013-01-17 23:50:51 -0800436}
437
438void ChronoShareGui::saveSettings()
439{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800440 // Save Settings
441 // QSettings settings(m_settingsFilePath, QSettings::NativeFormat);
442 QSettings settings (QSettings::NativeFormat, QSettings::UserScope, "irl.cs.ucla.edu", "ChronoShare");
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800443
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800444 settings.setValue("dirPath", m_dirPath);
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800445 settings.setValue("username", m_username);
446 settings.setValue("sharedfoldername", m_sharedFolderName);
Jared Lindblomb4032e22013-01-17 23:50:51 -0800447}
448
449void ChronoShareGui::closeEvent(QCloseEvent* event)
450{
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800451 _LOG_DEBUG ("Close Event")
Jared Lindblomc8ffd592013-01-25 00:00:30 -0800452 this->hide();
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800453 event->ignore(); // don't let the event propagate to the base class
Jared Lindblomb4032e22013-01-17 23:50:51 -0800454}
Jared Lindblomdc845f02013-01-18 17:29:40 -0800455
456#if WAF
457#include "chronosharegui.moc"
458#include "chronosharegui.cpp.moc"
Alexander Afanasyev83a53002013-01-24 11:12:01 -0800459#endif