2007-11-14 22:18:48 -05:00
|
|
|
/****************************************************************
|
|
|
|
* RetroShare QT Gui is distributed under the following license:
|
|
|
|
*
|
|
|
|
* Copyright (C) 2006, crypton
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
|
|
|
****************************************************************/
|
|
|
|
|
|
|
|
#include <QObject>
|
2010-07-23 14:52:58 -04:00
|
|
|
#include <QMessageBox>
|
2007-11-14 22:18:48 -05:00
|
|
|
#include <rshare.h>
|
2010-08-31 16:00:49 -04:00
|
|
|
#ifndef MINIMAL_RSGUI
|
2010-06-08 17:38:36 -04:00
|
|
|
#include "gui/MainWindow.h"
|
|
|
|
#include "gui/PeersDialog.h"
|
|
|
|
#include "gui/SearchDialog.h"
|
|
|
|
#include "gui/TransfersDialog.h"
|
|
|
|
#include "gui/MessagesDialog.h"
|
|
|
|
#include "gui/SharedFilesDialog.h"
|
2010-08-31 16:00:49 -04:00
|
|
|
#include "gui/NetworkDialog.h"
|
2010-08-28 15:50:38 -04:00
|
|
|
#include "gui/chat/PopupChatDialog.h"
|
2010-08-31 16:00:49 -04:00
|
|
|
#endif // MINIMAL_RSGUI
|
2010-06-08 17:38:36 -04:00
|
|
|
#include "gui/MessengerWindow.h"
|
|
|
|
#include "gui/StartDialog.h"
|
|
|
|
#include "gui/GenCertDialog.h"
|
|
|
|
#include "gui/settings/rsharesettings.h"
|
2010-09-10 14:38:46 -04:00
|
|
|
#include "gui/settings/RsharePeerSettings.h"
|
2010-06-08 17:38:36 -04:00
|
|
|
#include "gui/connect/ConfCertDialog.h"
|
2010-07-17 19:19:43 -04:00
|
|
|
#include "idle/idle.h"
|
2010-09-14 13:47:11 -04:00
|
|
|
#include "gui/common/Emoticons.h"
|
2007-11-14 22:18:48 -05:00
|
|
|
|
|
|
|
/*** WINDOWS DON'T LIKE THIS - REDEFINES VER numbers.
|
|
|
|
#include <gui/qskinobject/qskinobject.h>
|
|
|
|
****/
|
|
|
|
|
2008-08-15 15:03:50 -04:00
|
|
|
#include <util/stringutil.h>
|
2010-08-06 05:40:23 -04:00
|
|
|
#include <retroshare/rsinit.h>
|
|
|
|
#include <retroshare/rsiface.h>
|
2009-12-30 20:34:23 -05:00
|
|
|
#include "gui/notifyqt.h"
|
2007-11-14 22:18:48 -05:00
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
|
|
|
|
QStringList args = char_array_to_stringlist(argv+1, argc-1);
|
|
|
|
|
|
|
|
Q_INIT_RESOURCE(images);
|
|
|
|
|
|
|
|
rsiface = NULL;
|
|
|
|
|
2010-07-18 07:43:39 -04:00
|
|
|
NotifyQt *notify = NotifyQt::Create();
|
2009-11-05 14:38:10 -05:00
|
|
|
createRsIface(*notify);
|
|
|
|
createRsControl(*rsiface, *notify);
|
|
|
|
|
2007-11-14 22:18:48 -05:00
|
|
|
/* RetroShare Core Objects */
|
2009-02-08 09:30:28 -05:00
|
|
|
RsInit::InitRsConfig();
|
|
|
|
bool okStart = RsInit::InitRetroShare(argc, argv);
|
2010-05-20 17:53:27 -04:00
|
|
|
|
2010-06-14 09:32:13 -04:00
|
|
|
/* create global settings object
|
|
|
|
path maybe wrong, when no profile exist
|
|
|
|
in this case it can be use only for default values */
|
2010-05-20 17:53:27 -04:00
|
|
|
RshareSettings::Create ();
|
|
|
|
|
2008-09-18 11:15:09 -04:00
|
|
|
/*
|
|
|
|
Function RsConfigMinimised is not available in SVN, so I commented it out.
|
2008-06-14 09:24:22 -04:00
|
|
|
bool startMinimised = RsConfigStartMinimised(config);
|
2008-09-18 11:15:09 -04:00
|
|
|
*/
|
2007-11-14 22:18:48 -05:00
|
|
|
|
2009-05-09 09:38:46 -04:00
|
|
|
//bool startMinimized = false;
|
2007-11-14 22:18:48 -05:00
|
|
|
|
|
|
|
/* Setup The GUI Stuff */
|
|
|
|
Rshare rshare(args, argc, argv,
|
2009-07-30 17:48:54 -04:00
|
|
|
QString::fromStdString(RsInit::RsConfigDirectory()));
|
2007-11-14 22:18:48 -05:00
|
|
|
|
|
|
|
/* Login Dialog */
|
|
|
|
if (!okStart)
|
|
|
|
{
|
2009-02-08 09:30:28 -05:00
|
|
|
/* check for existing Certificate */
|
|
|
|
std::string userName;
|
|
|
|
|
|
|
|
StartDialog *sd = NULL;
|
2007-11-14 22:18:48 -05:00
|
|
|
bool genCert = false;
|
2009-07-30 17:48:54 -04:00
|
|
|
std::list<std::string> accountIds;
|
|
|
|
if (RsInit::getAccountIds(accountIds) && (accountIds.size() > 0))
|
2007-11-14 22:18:48 -05:00
|
|
|
{
|
2009-02-08 09:30:28 -05:00
|
|
|
sd = new StartDialog();
|
|
|
|
sd->show();
|
2007-11-14 22:18:48 -05:00
|
|
|
|
2009-02-08 09:30:28 -05:00
|
|
|
while(sd -> isVisible())
|
|
|
|
{
|
|
|
|
rshare.processEvents();
|
2007-11-14 22:18:48 -05:00
|
|
|
#ifdef WIN32
|
2009-02-08 09:30:28 -05:00
|
|
|
Sleep(10);
|
2007-11-14 22:18:48 -05:00
|
|
|
#else // __LINUX__
|
2009-02-08 09:30:28 -05:00
|
|
|
usleep(10000);
|
2007-11-14 22:18:48 -05:00
|
|
|
#endif
|
2009-02-08 09:30:28 -05:00
|
|
|
}
|
2007-11-14 22:18:48 -05:00
|
|
|
|
2009-02-08 09:30:28 -05:00
|
|
|
/* if we're logged in */
|
|
|
|
genCert = sd->requestedNewCert();
|
2010-05-02 09:12:46 -04:00
|
|
|
delete (sd);
|
2007-11-14 22:18:48 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2009-02-08 09:30:28 -05:00
|
|
|
genCert = true;
|
2007-11-14 22:18:48 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
if (genCert)
|
|
|
|
{
|
2010-05-02 09:12:46 -04:00
|
|
|
GenCertDialog gd;
|
|
|
|
gd.exec ();
|
2007-11-14 22:18:48 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-04-08 11:51:10 -04:00
|
|
|
|
|
|
|
std::string preferredId, gpgId, gpgName, gpgEmail, sslName;
|
|
|
|
RsInit::getPreferedAccountId(preferredId);
|
|
|
|
|
|
|
|
if (RsInit::getAccountDetails(preferredId,
|
|
|
|
gpgId, gpgName, gpgEmail, sslName))
|
|
|
|
{
|
|
|
|
RsInit::SelectGPGAccount(gpgId);
|
|
|
|
}
|
|
|
|
|
|
|
|
// true: note auto-login is active
|
2010-07-01 16:30:36 -04:00
|
|
|
int retVal = RsInit::LockAndLoadCertificates(true);
|
|
|
|
switch(retVal)
|
|
|
|
{
|
|
|
|
case 0: break;
|
|
|
|
case 1: QMessageBox::warning( 0,
|
|
|
|
QObject::tr("Multiple instances"),
|
|
|
|
QObject::tr("Another RetroShare using the same profile is "
|
|
|
|
"already running on your system. Please close "
|
|
|
|
"that instance first") );
|
|
|
|
return 1;
|
|
|
|
case 2: QMessageBox::critical( 0,
|
|
|
|
QObject::tr("Multiple instances"),
|
|
|
|
QObject::tr("An unexpected error occurred when Retroshare"
|
|
|
|
"tried to acquire the single instance lock") );
|
|
|
|
return 1;
|
|
|
|
case 3: QMessageBox::critical( 0,
|
|
|
|
QObject::tr("Login Failure"),
|
|
|
|
QObject::tr("Maybe password is wrong") );
|
|
|
|
return 1;
|
|
|
|
default: std::cerr << "StartDialog::loadCertificates() unexpected switch value " << retVal << std::endl;
|
|
|
|
}
|
2007-11-14 22:18:48 -05:00
|
|
|
}
|
|
|
|
|
2009-07-30 17:48:54 -04:00
|
|
|
rsicontrol->StartupRetroShare();
|
2007-11-14 22:18:48 -05:00
|
|
|
|
2010-06-14 09:32:13 -04:00
|
|
|
/* recreate global settings object, now with correct path */
|
|
|
|
RshareSettings::Create ();
|
2010-09-10 14:38:46 -04:00
|
|
|
RsharePeerSettings::Create();
|
2010-06-14 09:32:13 -04:00
|
|
|
|
2010-08-31 16:00:49 -04:00
|
|
|
#ifdef MINIMAL_RSGUI
|
|
|
|
MessengerWindow::showYourself();
|
2010-09-05 18:15:50 -04:00
|
|
|
|
|
|
|
rshare.setQuitOnLastWindowClosed(true);
|
2010-08-31 16:00:49 -04:00
|
|
|
#else
|
2010-09-14 13:47:11 -04:00
|
|
|
Emoticons::load();
|
|
|
|
|
2010-05-02 20:09:55 -04:00
|
|
|
MainWindow *w = MainWindow::Create ();
|
2009-01-22 16:06:54 -05:00
|
|
|
|
|
|
|
// I'm using a signal to transfer the hashing info to the mainwindow, because Qt schedules signals properly to
|
|
|
|
// avoid clashes between infos from threads.
|
|
|
|
//
|
2009-08-16 16:10:53 -04:00
|
|
|
|
|
|
|
qRegisterMetaType<FileDetail>("FileDetail") ;
|
|
|
|
|
2009-03-15 18:45:40 -04:00
|
|
|
std::cerr << "connecting signals and slots" << std::endl ;
|
2009-08-16 16:10:53 -04:00
|
|
|
QObject::connect(notify,SIGNAL(gotTurtleSearchResult(qulonglong,FileDetail)),w->searchDialog ,SLOT(updateFiles(qulonglong,FileDetail))) ;
|
|
|
|
QObject::connect(notify,SIGNAL(hashingInfoChanged(const QString&)),w ,SLOT(updateHashingInfo(const QString&))) ;
|
2010-05-21 16:49:48 -04:00
|
|
|
QObject::connect(notify,SIGNAL(diskFull(int,int)) ,w ,SLOT(displayDiskSpaceWarning(int,int))) ;
|
2009-08-16 16:10:53 -04:00
|
|
|
QObject::connect(notify,SIGNAL(filesPreModChanged(bool)) ,w->sharedfilesDialog ,SLOT(preModDirectories(bool) )) ;
|
|
|
|
QObject::connect(notify,SIGNAL(filesPostModChanged(bool)) ,w->sharedfilesDialog ,SLOT(postModDirectories(bool) )) ;
|
2010-04-24 18:09:47 -04:00
|
|
|
QObject::connect(notify,SIGNAL(filesPostModChanged(bool)) ,w ,SLOT(postModDirectories(bool) )) ;
|
2009-08-16 16:10:53 -04:00
|
|
|
QObject::connect(notify,SIGNAL(transfersChanged()) ,w->transfersDialog ,SLOT(insertTransfers() )) ;
|
|
|
|
QObject::connect(notify,SIGNAL(friendsChanged()) ,w->peersDialog ,SLOT(insertPeers() )) ;
|
2010-09-01 13:56:15 -04:00
|
|
|
QObject::connect(notify,SIGNAL(publicChatChanged(int)) ,w->peersDialog ,SLOT(publicChatChanged(int) ));
|
|
|
|
QObject::connect(notify,SIGNAL(privateChatChanged(int)) ,w ,SLOT(privateChatChanged(int) ));
|
2009-08-16 16:10:53 -04:00
|
|
|
QObject::connect(notify,SIGNAL(neighborsChanged()) ,w->networkDialog ,SLOT(insertConnect() )) ;
|
|
|
|
QObject::connect(notify,SIGNAL(messagesChanged()) ,w->messagesDialog ,SLOT(insertMessages() )) ;
|
2010-08-22 18:12:26 -04:00
|
|
|
QObject::connect(notify,SIGNAL(messagesTagsChanged()) ,w->messagesDialog ,SLOT(messagesTagsChanged() )) ;
|
2010-08-09 08:16:21 -04:00
|
|
|
QObject::connect(notify,SIGNAL(messagesChanged()) ,w ,SLOT(updateMessages() )) ;
|
2010-08-09 17:20:34 -04:00
|
|
|
QObject::connect(notify,SIGNAL(forumsChanged()) ,w ,SLOT(updateForums() ), Qt::QueuedConnection);
|
2007-11-14 22:18:48 -05:00
|
|
|
|
2009-09-29 16:37:20 -04:00
|
|
|
QObject::connect(notify,SIGNAL(chatStatusChanged(const QString&,const QString&,bool)),w->peersDialog,SLOT(updatePeerStatusString(const QString&,const QString&,bool)));
|
2009-09-30 16:53:18 -04:00
|
|
|
QObject::connect(notify,SIGNAL(peerHasNewAvatar(const QString&)),w->peersDialog,SLOT(updatePeersAvatar(const QString&)));
|
2009-09-30 18:30:57 -04:00
|
|
|
QObject::connect(notify,SIGNAL(ownAvatarChanged()),w->peersDialog,SLOT(updateAvatar()));
|
2009-10-05 15:07:02 -04:00
|
|
|
QObject::connect(notify,SIGNAL(ownStatusMessageChanged()),w->peersDialog,SLOT(loadmypersonalstatus()));
|
|
|
|
|
2009-05-05 15:50:45 -04:00
|
|
|
QObject::connect(notify,SIGNAL(logInfoChanged(const QString&)),w->networkDialog,SLOT(setLogInfo(QString))) ;
|
2010-02-07 13:10:12 -05:00
|
|
|
QObject::connect(notify,SIGNAL(errorOccurred(int,int,const QString&)),w,SLOT(displayErrorMessage(int,int,const QString&))) ;
|
2009-05-05 09:18:53 -04:00
|
|
|
|
2009-05-07 18:43:11 -04:00
|
|
|
QObject::connect(ConfCertDialog::instance(),SIGNAL(configChanged()),w->networkDialog,SLOT(insertConnect())) ;
|
2009-05-15 08:07:37 -04:00
|
|
|
QObject::connect(w->peersDialog,SIGNAL(friendsUpdated()),w->networkDialog,SLOT(insertConnect())) ;
|
2010-06-15 12:51:48 -04:00
|
|
|
|
|
|
|
w->installGroupChatNotifier();
|
2009-07-13 10:01:49 -04:00
|
|
|
|
2010-06-15 12:51:48 -04:00
|
|
|
/* only show window, if not startMinimized */
|
|
|
|
if(!Settings->value(QString::fromUtf8("StartMinimized"), false).toBool())
|
2007-11-14 22:18:48 -05:00
|
|
|
{
|
2010-06-15 12:51:48 -04:00
|
|
|
w->show();
|
2008-10-18 12:02:06 -04:00
|
|
|
}
|
2009-02-08 09:30:28 -05:00
|
|
|
|
2007-11-14 22:18:48 -05:00
|
|
|
/* Startup a Timer to keep the gui's updated */
|
|
|
|
QTimer *timer = new QTimer(w);
|
|
|
|
timer -> connect(timer, SIGNAL(timeout()), notify, SLOT(UpdateGUI()));
|
2009-02-08 09:30:28 -05:00
|
|
|
timer->start(1000);
|
2010-08-31 16:00:49 -04:00
|
|
|
#endif // MINIMAL_RSGUI
|
|
|
|
|
2009-02-08 09:30:28 -05:00
|
|
|
/* dive into the endless loop */
|
2010-05-20 17:53:27 -04:00
|
|
|
int ti = rshare.exec();
|
2010-08-31 16:00:49 -04:00
|
|
|
#ifndef MINIMAL_RSGUI
|
2010-05-20 17:53:27 -04:00
|
|
|
delete w ;
|
2007-11-14 22:18:48 -05:00
|
|
|
|
2010-06-17 13:39:32 -04:00
|
|
|
/* cleanup */
|
|
|
|
PopupChatDialog::cleanupChat();
|
2010-08-31 16:00:49 -04:00
|
|
|
#endif // MINIMAL_RSGUI
|
2010-06-17 13:39:32 -04:00
|
|
|
|
2010-05-29 11:14:25 -04:00
|
|
|
rsicontrol->rsGlobalShutDown();
|
|
|
|
|
2010-05-20 17:53:27 -04:00
|
|
|
Settings->sync();
|
|
|
|
delete Settings;
|
2007-11-14 22:18:48 -05:00
|
|
|
|
2010-05-20 17:53:27 -04:00
|
|
|
return ti ;
|
|
|
|
}
|