2006-09-30 20:02:39 +04:00
/*
2014-12-14 22:18:05 +03:00
* Bittorrent Client using Qt and libtorrent .
* Copyright ( C ) 2014 Vladimir Golovnev < glassez @ yandex . ru >
2007-07-14 18:31:59 +04:00
* Copyright ( C ) 2006 Christophe Dumez
2006-09-30 20:02:39 +04:00
*
2007-07-14 18:31:59 +04:00
* 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 .
2006-09-30 20:02:39 +04:00
*
* 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
2007-07-14 18:31:59 +04:00
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
2009-04-05 21:00:55 +04:00
* In addition , as a special exception , the copyright holders give permission to
* link this program with the OpenSSL project ' s " OpenSSL " library ( or with
* modified versions of it that use the same license as the " OpenSSL " library ) ,
* and distribute the linked executables . You must obey the GNU General Public
* License in all respects for all of the code used other than " OpenSSL " . If you
* modify file ( s ) , you may extend this exception to your version of the file ( s ) ,
* but you are not obligated to do so . If you do not wish to do so , delete this
* exception statement from your version .
*
2007-07-14 18:31:59 +04:00
* Contact : chris @ qbittorrent . org
2006-09-30 20:02:39 +04:00
*/
2014-07-05 16:44:13 +04:00
# include <QDebug>
2014-12-21 14:26:12 +03:00
# include <QScopedPointer>
2009-12-15 13:56:41 +03:00
2009-12-15 14:08:22 +03:00
# ifndef DISABLE_GUI
2014-12-14 22:18:05 +03:00
# include <QFont>
# include <QMessageBox>
# include <QPainter>
# include <QPen>
# include <QPushButton>
# include <QSplashScreen>
# include <QStyle>
# include <QStyleFactory>
# ifdef QBT_STATIC_QT
2012-12-28 15:40:22 +04:00
# include <QtPlugin>
2014-05-01 23:53:29 +04:00
# if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
Q_IMPORT_PLUGIN ( QICOPlugin )
# else
2012-12-28 15:40:22 +04:00
Q_IMPORT_PLUGIN ( qico )
# endif
2014-12-14 22:18:05 +03:00
# endif // QBT_STATIC_QT
2010-11-14 00:15:52 +03:00
# include "mainwindow.h"
2010-01-03 02:03:46 +03:00
# include "ico.h"
2014-12-14 22:18:05 +03:00
# else // DISABLE_GUI
2010-01-09 18:26:20 +03:00
# include <iostream>
# include <stdio.h>
2010-01-03 02:03:46 +03:00
# include "headlessloader.h"
2014-12-14 22:18:05 +03:00
# endif // DISABLE_GUI
2009-12-15 13:56:41 +03:00
2014-12-14 22:18:05 +03:00
# include "application.h"
# ifdef Q_OS_UNIX
2009-09-30 22:57:06 +04:00
# include <signal.h>
# include <execinfo.h>
# include "stacktrace.h"
2014-12-14 22:18:05 +03:00
# endif // Q_OS_UNIX
2010-03-30 15:35:20 +04:00
2013-03-03 03:17:04 +04:00
# ifdef STACKTRACE_WIN
2013-01-19 20:16:57 +04:00
# include <signal.h>
# include "stacktrace_win.h"
# include "stacktrace_win_dlg.h"
2014-12-14 22:18:05 +03:00
# endif //STACKTRACE_WIN
2013-01-19 20:16:57 +04:00
2006-09-30 20:02:39 +04:00
# include <stdlib.h>
# include "misc.h"
* Replace priority combo boxes by check boxes in Web UI as in Regular UI
* Prepare http server and preferences classes to add new settings to Web UI
* Tabified Program preferences in Web UI since there will be a lot of settings soon
* Started to add new settings to Web UI (PeX, LSD, Encryption, save path, temp path, scan dir, preallocateall, queueing, listen_port, upnp, nat-pmp, language, ip filter) -> Proxy is missing
* Added a command line parameter to change the web ui port
* Fix PeerGuardian .p2b binary filter support
2009-12-28 22:39:47 +03:00
# include "preferences.h"
2008-11-05 01:39:43 +03:00
2014-12-20 21:01:13 +03:00
class MessagesCollector : public QObject
{
Q_OBJECT
public slots :
void collectMessage ( const QString & message )
{
messages . append ( message . split ( " | " , QString : : SkipEmptyParts ) ) ;
}
public :
QStringList messages ;
} ;
# include "main.moc"
2013-09-17 16:21:23 +04:00
# if defined(Q_OS_WIN) && !defined(QBT_HAS_GETCURRENTPID)
# error You seem to have updated QtSingleApplication without porting our custom QtSingleApplication::getRunningPid() function. Please see previous version to understate how it works.
# endif
2014-12-15 21:43:01 +03:00
// Signal handlers
# if defined(Q_OS_UNIX) || defined(STACKTRACE_WIN)
void sigintHandler ( int ) ;
void sigtermHandler ( int ) ;
void sigsegvHandler ( int ) ;
void sigabrtHandler ( int ) ;
# endif
2014-12-27 22:58:37 +03:00
struct QBtCommandLineParameters
2014-12-21 10:40:38 +03:00
{
bool showHelp ;
2014-12-21 17:26:31 +03:00
# ifndef Q_OS_WIN
bool showVersion ;
# endif
2014-12-15 21:43:01 +03:00
# ifndef DISABLE_GUI
2014-12-21 10:40:38 +03:00
bool noSplash ;
2014-12-15 21:43:01 +03:00
# else
2014-12-21 10:40:38 +03:00
bool shouldDaemonize ;
# endif
int webUiPort ;
QStringList torrents ;
2014-12-27 21:07:31 +03:00
QString uknownParameter ;
2014-12-21 17:26:31 +03:00
2014-12-27 22:58:37 +03:00
QBtCommandLineParameters ( )
2014-12-21 17:26:31 +03:00
: showHelp ( false )
# ifndef Q_OS_WIN
, showVersion ( false )
# endif
# ifndef DISABLE_GUI
, noSplash ( Preferences : : instance ( ) - > isSplashScreenDisabled ( ) )
# else
, shouldDaemonize ( false )
# endif
, webUiPort ( Preferences : : instance ( ) - > getWebUiPort ( ) )
{
}
2014-12-21 10:40:38 +03:00
} ;
# ifndef DISABLE_GUI
void showSplashScreen ( ) ;
2014-12-15 21:43:01 +03:00
# endif
void displayVersion ( ) ;
2014-12-27 22:58:37 +03:00
void displayUsage ( const QString & prg_name ) ;
2014-12-15 21:43:01 +03:00
bool userAgreesWithLegalNotice ( ) ;
2014-12-27 22:58:37 +03:00
void displayBadArgMessage ( const QString & message ) ;
QBtCommandLineParameters parseCommandLine ( ) ;
2014-12-15 21:43:01 +03:00
// Main
int main ( int argc , char * argv [ ] )
{
// We must save it here because QApplication constructor may change it
bool isOneArg = ( argc = = 2 ) ;
// Create Application
2014-12-21 14:26:12 +03:00
QScopedPointer < Application > app ( new Application ( " qBittorrent- " + misc : : getUserIDString ( ) , argc , argv ) ) ;
2014-12-15 21:43:01 +03:00
2014-12-20 21:01:13 +03:00
MessagesCollector * messagesCollector = new MessagesCollector ( ) ;
2014-12-21 14:26:12 +03:00
QObject : : connect ( app . data ( ) , SIGNAL ( messageReceived ( const QString & ) ) ,
2014-12-20 21:01:13 +03:00
messagesCollector , SLOT ( collectMessage ( const QString & ) ) ) ;
2014-12-27 22:58:37 +03:00
const QBtCommandLineParameters params = parseCommandLine ( ) ;
2014-12-15 21:43:01 +03:00
2014-12-27 21:07:31 +03:00
if ( ! params . uknownParameter . isEmpty ( ) ) {
displayBadArgMessage ( QObject : : tr ( " %1 is an uknown command line parameter. " , " --random-parameter is an uknown command line parameter. " )
. arg ( params . uknownParameter ) ) ;
return EXIT_FAILURE ;
}
2014-12-21 17:26:31 +03:00
# ifndef Q_OS_WIN
2014-12-21 10:40:38 +03:00
if ( params . showVersion ) {
if ( isOneArg ) {
displayVersion ( ) ;
return EXIT_SUCCESS ;
}
else {
displayBadArgMessage ( QObject : : tr ( " %1 must be the single command line parameter. " )
. arg ( QLatin1String ( " -v (or --version) " ) ) ) ;
return EXIT_FAILURE ;
}
}
2014-12-21 17:26:31 +03:00
# endif
2014-12-15 21:43:01 +03:00
2014-12-21 10:40:38 +03:00
if ( params . showHelp ) {
if ( isOneArg ) {
displayUsage ( argv [ 0 ] ) ;
return EXIT_SUCCESS ;
}
else {
displayBadArgMessage ( QObject : : tr ( " %1 must be the single command line parameter. " )
. arg ( QLatin1String ( " -h (or --help) " ) ) ) ;
return EXIT_FAILURE ;
}
}
2014-12-15 21:43:01 +03:00
2014-12-21 10:40:38 +03:00
if ( ( params . webUiPort > 0 ) & & ( params . webUiPort < = 65535 ) ) {
Preferences : : instance ( ) - > setWebUiPort ( params . webUiPort ) ;
}
else {
displayBadArgMessage ( QObject : : tr ( " %1 must specify the correct port (1 to 65535). " )
. arg ( QLatin1String ( " --webui-port " ) ) ) ;
return EXIT_FAILURE ;
}
2014-12-15 21:43:01 +03:00
// Set environment variable
2014-12-20 21:01:13 +03:00
if ( ! qputenv ( " QBITTORRENT " , QByteArray ( VERSION ) ) )
2014-12-15 21:43:01 +03:00
std : : cerr < < " Couldn't set environment variable... \n " ;
if ( ! userAgreesWithLegalNotice ( ) )
return EXIT_SUCCESS ;
// Check if qBittorrent is already running for this user
2014-12-21 14:26:12 +03:00
if ( app - > isRunning ( ) ) {
2014-12-21 10:40:38 +03:00
# ifdef DISABLE_GUI
if ( params . shouldDaemonize ) {
displayBadArgMessage ( QObject : : tr ( " You cannot use %1: qBittorrent is already running for this user. " )
. arg ( QLatin1String ( " -d (or --daemon) " ) ) ) ;
return EXIT_FAILURE ;
}
# else
2014-12-15 21:43:01 +03:00
qDebug ( " qBittorrent is already running for this user. " ) ;
2014-12-21 10:40:38 +03:00
# endif
2014-12-20 21:01:13 +03:00
misc : : msleep ( 300 ) ;
2014-12-15 21:43:01 +03:00
# ifdef Q_OS_WIN
2014-12-21 14:26:12 +03:00
DWORD pid = ( DWORD ) app - > getRunningPid ( ) ;
2014-12-15 21:43:01 +03:00
if ( pid > 0 ) {
BOOL b = AllowSetForegroundWindow ( pid ) ;
qDebug ( " AllowSetForegroundWindow() returns %s " , b ? " TRUE " : " FALSE " ) ;
}
# endif
2014-12-21 10:40:38 +03:00
if ( ! params . torrents . isEmpty ( ) ) {
QString message = params . torrents . join ( " | " ) ;
2014-12-15 21:43:01 +03:00
qDebug ( " Passing program parameters to running instance... " ) ;
qDebug ( " Message: %s " , qPrintable ( message ) ) ;
2014-12-21 14:26:12 +03:00
app - > sendMessage ( message ) ;
2014-12-15 21:43:01 +03:00
}
else { // Raise main window
2014-12-21 14:26:12 +03:00
app - > sendMessage ( " qbt://show " ) ;
2014-12-15 21:43:01 +03:00
}
return EXIT_SUCCESS ;
}
srand ( time ( 0 ) ) ;
# ifdef DISABLE_GUI
2014-12-21 10:40:38 +03:00
if ( params . shouldDaemonize ) {
2014-12-21 14:26:12 +03:00
app . reset ( ) ; // Destroy current application
if ( ( daemon ( 1 , 0 ) = = 0 ) ) {
app . reset ( new Application ( " qBittorrent- " + misc : : getUserIDString ( ) , argc , argv ) ) ;
if ( app - > isRunning ( ) ) {
// Another instance had time to start.
return EXIT_FAILURE ;
}
}
else {
qCritical ( " Something went wrong while daemonizing, exiting... " ) ;
return EXIT_FAILURE ;
}
2014-12-15 21:43:01 +03:00
}
# else
2014-12-21 17:26:31 +03:00
if ( ! params . noSplash )
2014-12-15 21:43:01 +03:00
showSplashScreen ( ) ;
# endif
# if defined(Q_OS_UNIX) || defined(STACKTRACE_WIN)
signal ( SIGABRT , sigabrtHandler ) ;
signal ( SIGTERM , sigtermHandler ) ;
signal ( SIGINT , sigintHandler ) ;
signal ( SIGSEGV , sigsegvHandler ) ;
# endif
# ifndef DISABLE_GUI
2014-12-21 10:40:38 +03:00
MainWindow window ( 0 , params . torrents ) ;
2014-12-21 14:26:12 +03:00
QObject : : connect ( app . data ( ) , SIGNAL ( messageReceived ( const QString & ) ) ,
2014-12-20 21:01:13 +03:00
& window , SLOT ( processParams ( const QString & ) ) ) ;
2014-12-21 14:26:12 +03:00
QObject : : disconnect ( app . data ( ) , SIGNAL ( messageReceived ( const QString & ) ) ,
2014-12-20 21:01:13 +03:00
messagesCollector , SLOT ( collectMessage ( const QString & ) ) ) ;
window . processParams ( messagesCollector - > messages ) ;
delete messagesCollector ;
2014-12-21 14:26:12 +03:00
app - > setActivationWindow ( & window ) ;
2014-12-15 21:43:01 +03:00
# ifdef Q_OS_MAC
2014-12-21 14:26:12 +03:00
static_cast < QMacApplication * > ( app . data ( ) ) - > setReadyToProcessEvents ( ) ;
2014-12-15 21:43:01 +03:00
# endif // Q_OS_MAC
# else
// Load Headless class
2014-12-21 10:40:38 +03:00
HeadlessLoader loader ( params . torrents ) ;
2014-12-21 14:26:12 +03:00
QObject : : connect ( app . data ( ) , SIGNAL ( messageReceived ( const QString & ) ) ,
2014-12-20 21:01:13 +03:00
& loader , SLOT ( processParams ( const QString & ) ) ) ;
2014-12-21 14:26:12 +03:00
QObject : : disconnect ( app . data ( ) , SIGNAL ( messageReceived ( const QString & ) ) ,
2014-12-20 21:01:13 +03:00
messagesCollector , SLOT ( collectMessage ( const QString & ) ) ) ;
loader . processParams ( messagesCollector - > messages ) ;
delete messagesCollector ;
2014-12-15 21:43:01 +03:00
# endif
2014-12-21 14:26:12 +03:00
int ret = app - > exec ( ) ;
2014-12-15 21:43:01 +03:00
qDebug ( " Application has exited " ) ;
return ret ;
}
2014-12-27 22:58:37 +03:00
QBtCommandLineParameters parseCommandLine ( )
2014-12-21 10:40:38 +03:00
{
2014-12-27 22:58:37 +03:00
QBtCommandLineParameters result ;
2014-12-21 10:40:38 +03:00
QStringList appArguments = qApp - > arguments ( ) ;
for ( int i = 1 ; i < appArguments . size ( ) ; + + i ) {
const QString & arg = appArguments [ i ] ;
2014-12-27 21:07:31 +03:00
if ( ( arg . startsWith ( " -- " ) & & ! arg . endsWith ( " .torrent " ) ) | |
( arg . startsWith ( " - " ) & & arg . size ( ) = = 2 ) ) {
//Parse known parameters
if ( ( arg = = QLatin1String ( " -h " ) ) | | ( arg = = QLatin1String ( " --help " ) ) ) {
result . showHelp = true ;
}
2014-12-21 17:26:31 +03:00
# ifndef Q_OS_WIN
2014-12-27 21:07:31 +03:00
else if ( ( arg = = QLatin1String ( " -v " ) ) | | ( arg = = QLatin1String ( " --version " ) ) ) {
result . showVersion = true ;
}
2014-12-21 17:26:31 +03:00
# endif
2014-12-27 21:07:31 +03:00
else if ( arg . startsWith ( QLatin1String ( " --webui-port= " ) ) ) {
QStringList parts = arg . split ( QLatin1Char ( ' = ' ) ) ;
if ( parts . size ( ) = = 2 )
result . webUiPort = parts . last ( ) . toInt ( ) ;
}
2014-12-21 10:40:38 +03:00
# ifndef DISABLE_GUI
2014-12-27 21:07:31 +03:00
else if ( arg = = QLatin1String ( " --no-splash " ) ) {
result . noSplash = true ;
}
2014-12-21 10:40:38 +03:00
# else
2014-12-27 21:07:31 +03:00
else if ( ( arg = = QLatin1String ( " -d " ) ) | | ( arg = = QLatin1String ( " --daemon " ) ) ) {
result . shouldDaemonize = true ;
}
2014-12-21 10:40:38 +03:00
# endif
2014-12-27 21:07:31 +03:00
else {
//Uknown argument
result . uknownParameter = arg ;
break ;
}
}
2014-12-21 10:40:38 +03:00
else {
QFileInfo torrentPath ;
torrentPath . setFile ( arg ) ;
if ( torrentPath . exists ( ) )
result . torrents + = torrentPath . absoluteFilePath ( ) ;
else
result . torrents + = arg ;
}
}
return result ;
}
2013-09-21 11:59:58 +04:00
# if defined(Q_OS_UNIX) || defined(STACKTRACE_WIN)
2014-12-13 20:22:35 +03:00
void sigintHandler ( int )
{
signal ( SIGINT , 0 ) ;
qDebug ( " Catching SIGINT, exiting cleanly " ) ;
qApp - > exit ( ) ;
2010-01-03 02:03:46 +03:00
}
2014-12-13 20:22:35 +03:00
void sigtermHandler ( int )
{
signal ( SIGTERM , 0 ) ;
qDebug ( " Catching SIGTERM, exiting cleanly " ) ;
qApp - > exit ( ) ;
2009-09-30 22:57:06 +04:00
}
2014-12-13 20:22:35 +03:00
void sigsegvHandler ( int )
{
signal ( SIGABRT , 0 ) ;
signal ( SIGSEGV , 0 ) ;
2014-09-11 06:44:25 +04:00
# if !defined Q_OS_WIN && !defined Q_OS_HAIKU
2014-12-13 20:22:35 +03:00
std : : cerr < < " \n \n ************************************************************* \n " ;
std : : cerr < < " Catching SIGSEGV, please report a bug at http://bug.qbittorrent.org \n and provide the following backtrace: \n " ;
std : : cerr < < " qBittorrent version: " < < VERSION < < std : : endl ;
print_stacktrace ( ) ;
2013-01-19 20:16:57 +04:00
# else
2013-01-25 22:52:12 +04:00
# ifdef STACKTRACE_WIN
2014-12-13 20:22:35 +03:00
StraceDlg dlg ;
dlg . setStacktraceString ( straceWin : : getBacktrace ( ) ) ;
dlg . exec ( ) ;
2013-01-25 22:52:12 +04:00
# endif
2013-01-19 20:16:57 +04:00
# endif
2014-12-13 20:22:35 +03:00
raise ( SIGSEGV ) ;
2009-09-30 22:57:06 +04:00
}
2014-12-13 20:22:35 +03:00
void sigabrtHandler ( int )
{
signal ( SIGABRT , 0 ) ;
signal ( SIGSEGV , 0 ) ;
2014-09-11 06:44:25 +04:00
# if !defined Q_OS_WIN && !defined Q_OS_HAIKU
2014-12-13 20:22:35 +03:00
std : : cerr < < " \n \n ************************************************************* \n " ;
std : : cerr < < " Catching SIGABRT, please report a bug at http://bug.qbittorrent.org \n and provide the following backtrace: \n " ;
std : : cerr < < " qBittorrent version: " < < VERSION < < std : : endl ;
print_stacktrace ( ) ;
2013-01-19 20:16:57 +04:00
# else
2013-01-25 22:52:12 +04:00
# ifdef STACKTRACE_WIN
2014-12-13 20:22:35 +03:00
StraceDlg dlg ;
dlg . setStacktraceString ( straceWin : : getBacktrace ( ) ) ;
dlg . exec ( ) ;
2013-01-25 22:52:12 +04:00
# endif
2013-01-19 20:16:57 +04:00
# endif
2014-12-13 20:22:35 +03:00
raise ( SIGABRT ) ;
2009-11-15 13:42:03 +03:00
}
2008-12-26 19:23:53 +03:00
# endif
2006-09-30 20:02:39 +04:00
2014-12-14 22:18:05 +03:00
# ifndef DISABLE_GUI
void showSplashScreen ( )
2014-12-13 20:22:35 +03:00
{
2014-12-14 22:18:05 +03:00
QPixmap splash_img ( " :/Icons/skin/splash.png " ) ;
QPainter painter ( & splash_img ) ;
QString version = VERSION ;
painter . setPen ( QPen ( Qt : : white ) ) ;
painter . setFont ( QFont ( " Arial " , 22 , QFont : : Black ) ) ;
painter . drawText ( 224 - painter . fontMetrics ( ) . width ( version ) , 270 , version ) ;
QSplashScreen * splash = new QSplashScreen ( splash_img , Qt : : WindowStaysOnTopHint ) ;
QTimer : : singleShot ( 1500 , splash , SLOT ( deleteLater ( ) ) ) ;
splash - > show ( ) ;
qApp - > processEvents ( ) ;
}
2013-11-11 12:38:20 +04:00
# endif
2014-12-13 20:22:35 +03:00
2014-12-14 22:18:05 +03:00
void displayVersion ( )
{
std : : cout < < qPrintable ( qApp - > applicationName ( ) ) < < " " < < VERSION < < std : : endl ;
}
2014-12-27 22:58:37 +03:00
QString makeUsage ( const QString & prg_name )
2014-12-14 22:18:05 +03:00
{
2014-12-21 17:26:31 +03:00
QString text ;
text + = QObject : : tr ( " Usage: " ) + QLatin1Char ( ' \n ' ) ;
# ifndef Q_OS_WIN
text + = QLatin1Char ( ' \t ' ) + prg_name + QLatin1String ( " (-v | --version) " ) + QLatin1Char ( ' \n ' ) ;
# endif
text + = QLatin1Char ( ' \t ' ) + prg_name + QLatin1String ( " (-h | --help) " ) + QLatin1Char ( ' \n ' ) ;
text + = QLatin1Char ( ' \t ' ) + prg_name
+ QLatin1String ( " [--webui-port=<port>] " )
2014-12-14 22:18:05 +03:00
# ifndef DISABLE_GUI
2014-12-21 17:26:31 +03:00
+ QLatin1String ( " [--no-splash] " )
2010-10-02 00:03:27 +04:00
# else
2014-12-21 17:26:31 +03:00
+ QLatin1String ( " [-d | --daemon] " )
# endif
+ QLatin1String ( " [(<filename> | <url>)...] " ) + QLatin1Char ( ' \n ' ) ;
text + = QObject : : tr ( " Options: " ) + QLatin1Char ( ' \n ' ) ;
# ifndef Q_OS_WIN
text + = QLatin1String ( " \t -v | --version \t \t " ) + QObject : : tr ( " Displays program version " ) + QLatin1Char ( ' \n ' ) ;
# endif
text + = QLatin1String ( " \t -h | --help \t \t " ) + QObject : : tr ( " Displays this help message " ) + QLatin1Char ( ' \n ' ) ;
text + = QLatin1String ( " \t --webui-port=<port> \t " )
+ QObject : : tr ( " Changes the webui port (current: %1) " ) . arg ( QString : : number ( Preferences : : instance ( ) - > getWebUiPort ( ) ) )
+ QLatin1Char ( ' \n ' ) ;
# ifndef DISABLE_GUI
text + = QLatin1String ( " \t --no-splash \t \t " ) + QObject : : tr ( " Disable splash screen " ) + QLatin1Char ( ' \n ' ) ;
# else
text + = QLatin1String ( " \t -d | --daemon \t \t " ) + QObject : : tr ( " Run in daemon-mode (background) " ) + QLatin1Char ( ' \n ' ) ;
# endif
text + = QLatin1String ( " \t files or urls \t \t " ) + QObject : : tr ( " Downloads the torrents passed by the user " ) ;
return text ;
}
2014-12-27 22:58:37 +03:00
void displayUsage ( const QString & prg_name )
2014-12-21 17:26:31 +03:00
{
# ifndef Q_OS_WIN
std : : cout < < qPrintable ( makeUsage ( prg_name ) ) < < std : : endl ;
# else
QMessageBox msgBox ( QMessageBox : : Information , QObject : : tr ( " Help " ) , makeUsage ( prg_name ) , QMessageBox : : Ok ) ;
msgBox . show ( ) ; // Need to be shown or to moveToCenter does not work
msgBox . move ( misc : : screenCenter ( & msgBox ) ) ;
msgBox . exec ( ) ;
# endif
}
2014-12-27 22:58:37 +03:00
void displayBadArgMessage ( const QString & message )
2014-12-21 17:26:31 +03:00
{
QString help = QObject : : tr ( " Run application with -h option to read about command line parameters. " ) ;
# ifdef Q_OS_WIN
QMessageBox msgBox ( QMessageBox : : Critical , QObject : : tr ( " Bad command line " ) ,
message + QLatin1Char ( ' \n ' ) + help , QMessageBox : : Ok ) ;
msgBox . show ( ) ; // Need to be shown or to moveToCenter does not work
msgBox . move ( misc : : screenCenter ( & msgBox ) ) ;
msgBox . exec ( ) ;
# else
std : : cerr < < qPrintable ( QObject : : tr ( " Bad command line: " ) ) ;
std : : cerr < < qPrintable ( message ) < < std : : endl ;
std : : cerr < < qPrintable ( help ) < < std : : endl ;
2010-10-02 00:03:27 +04:00
# endif
2014-12-14 22:18:05 +03:00
}
2010-07-20 21:13:28 +04:00
2014-12-14 22:18:05 +03:00
bool userAgreesWithLegalNotice ( )
{
Preferences * const pref = Preferences : : instance ( ) ;
if ( pref - > getAcceptedLegal ( ) ) // Already accepted once
return true ;
2010-01-03 01:20:37 +03:00
2014-12-14 22:18:05 +03:00
# ifdef DISABLE_GUI
std : : cout < < std : : endl < < " *** " < < qPrintable ( QObject : : tr ( " Legal Notice " ) ) < < " *** " < < std : : endl ;
std : : cout < < qPrintable ( QObject : : tr ( " qBittorrent is a file sharing program. When you run a torrent, its data will be made available to others by means of upload. Any content you share is your sole responsibility. \n \n No further notices will be issued. " ) ) < < std : : endl < < std : : endl ;
std : : cout < < qPrintable ( QObject : : tr ( " Press %1 key to accept and continue... " ) . arg ( " 'y' " ) ) < < std : : endl ;
char ret = getchar ( ) ; // Read pressed key
if ( ret = = ' y ' | | ret = = ' Y ' ) {
// Save the answer
pref - > setAcceptedLegal ( true ) ;
return true ;
2014-12-13 20:22:35 +03:00
}
2014-12-14 22:18:05 +03:00
# else
QMessageBox msgBox ;
msgBox . setText ( QObject : : tr ( " qBittorrent is a file sharing program. When you run a torrent, its data will be made available to others by means of upload. Any content you share is your sole responsibility. \n \n No further notices will be issued. " ) ) ;
msgBox . setWindowTitle ( QObject : : tr ( " Legal notice " ) ) ;
msgBox . addButton ( QObject : : tr ( " Cancel " ) , QMessageBox : : RejectRole ) ;
QAbstractButton * agree_button = msgBox . addButton ( QObject : : tr ( " I Agree " ) , QMessageBox : : AcceptRole ) ;
msgBox . show ( ) ; // Need to be shown or to moveToCenter does not work
msgBox . move ( misc : : screenCenter ( & msgBox ) ) ;
msgBox . exec ( ) ;
if ( msgBox . clickedButton ( ) = = agree_button ) {
// Save the answer
pref - > setAcceptedLegal ( true ) ;
return true ;
2014-12-13 20:22:35 +03:00
}
2009-12-15 13:56:41 +03:00
# endif
2014-12-13 20:22:35 +03:00
2014-12-14 22:18:05 +03:00
return false ;
}