//----------------------------------------------------------------------------- void ctkAbstractPythonManager::initPythonQt(int flags) { Q_D(ctkAbstractPythonManager); PythonQt::init(flags); // Python maps SIGINT (control-c) to its own handler. We will remap it // to the default so that control-c works. #ifdef SIGINT signal(SIGINT, SIG_DFL); #endif PythonQtObjectPtr _mainContext = PythonQt::self()->getMainModule(); this->connect(PythonQt::self(), SIGNAL(pythonStdOut(QString)), SLOT(printStdout(QString))); this->connect(PythonQt::self(), SIGNAL(pythonStdErr(QString)), SLOT(printStderr(QString))); PythonQt_init_QtBindings(); QStringList initCode; // Update 'sys.path' initCode << "import sys"; foreach (const QString& path, this->pythonPaths()) { initCode << QString("sys.path.append('%1')").arg(QDir::fromNativeSeparators(path)); } _mainContext.evalScript(initCode.join("\n")); this->preInitialization(); if (d->InitFunction) { (*d->InitFunction)(); } emit this->pythonPreInitialized(); this->executeInitializationScripts(); emit this->pythonInitialized(); }
int main(int argc, char *argv[]) { QtSingleApplication a(argc, argv); int retcode; if(a.isRunning()) { QMessageBox::critical(NULL, QObject::tr("Running instance detected"), QObject::tr("ScreenCloud is already running. Please close the running instance before starting a new one.")); return 1; } a.setOrganizationName("screencloud"); a.setApplicationName("ScreenCloud"); a.setQuitOnLastWindowClosed(false); //Create data location for storing plugins if it dosen't exist QDir d; d.mkpath(QDesktopServices::storageLocation(QDesktopServices::DataLocation) + "/plugins"); //Prepare settings QSettings settings("screencloud", "ScreenCloud"); settings.setValue("config-version", "1.1"); bool firstRun = settings.value("first-run", true).toBool(); //Parse command line switches QStringList cmdline_args = a.arguments(); if(cmdline_args.contains("--help") || cmdline_args.contains("-h") ) { INFO(QObject::tr("USAGE: screencloud [-v|-c|-s|-w|-a]")); return 0; } if(cmdline_args.contains("--version") || cmdline_args.contains("-v") ) { INFO(QObject::tr("ScreenCloud version ") + QString(VERSION) + "(" + QString(OPERATING_SYSTEM) + ")"); return 0; } //Setup the python interpreter PythonQt::init(); PythonQt_init_QtBindings(); PythonQt::self()->addSysPath(a.applicationDirPath() + QDir::separator() + "modules"); PythonQt::self()->addSysPath(a.applicationDirPath() + QDir::separator() + "modules" + QDir::separator() + "python-stdlib"); //Global vars if(cmdline_args.contains("--cli") || cmdline_args.contains("-c")) { //Running in CLI mode, do not show GUI if(firstRun) { CRITICAL(QObject::tr("This is the first time you're running ScreenCloud. Refusing to run in CLI mode.")); return 1; } ScreenShooter screenShooter; QImage screenshot; if(cmdline_args.contains("--area") || cmdline_args.contains("-a")) { int areaGeomIndex = cmdline_args.indexOf("--area"); if(areaGeomIndex == -1) { areaGeomIndex = cmdline_args.indexOf("-a"); } areaGeomIndex += 1; if(areaGeomIndex > 0 && areaGeomIndex < cmdline_args.count()) { QString areaString = cmdline_args.at(areaGeomIndex); INFO("Grabbing area (" + areaString + ")"); QRect area(QPoint(areaString.split(",")[0].toUInt(), areaString.split(",")[1].toUInt()), QSize(areaString.split(",")[2].toUInt(), areaString.split(",")[3].toUInt())); screenshot = screenShooter.captureSelection(area); }else { CRITICAL("No area provided. Format: --area x,y,width,height. Example: --area 0,0,640,480"); return 1; } } else if(cmdline_args.contains("--window") || cmdline_args.contains("-w")) { //Get the window id int winIdIndex = cmdline_args.indexOf("--window"); if(winIdIndex == -1) { winIdIndex = cmdline_args.indexOf("-w"); } winIdIndex += 1; if(winIdIndex > 0 && winIdIndex < cmdline_args.count()) { WId windowId = (WId)cmdline_args.at(winIdIndex).toInt(); INFO("Grabbing window with id " + QString::number((int)windowId)); screenshot = screenShooter.captureWindow(windowId); }else { CRITICAL("No window id provided."); return 1; } } else { //Default to fullscreen if(!cmdline_args.contains("--fullscreen") && !cmdline_args.contains("-f")) { INFO("No --area or --window set. Defaulting to fullscreen."); }else { INFO("Capturing fullscreen.") } screenshot = screenShooter.captureFullscreen(); } UploadManager up; QString serviceShortname = up.getDefaultService(); if(serviceShortname.isEmpty()) { if(cmdline_args.contains("--service") || cmdline_args.contains("-s")) { int serviceNameIndex = cmdline_args.indexOf("--service"); if(serviceNameIndex == -1) { serviceNameIndex = cmdline_args.indexOf("-s"); } serviceNameIndex += 1; serviceShortname = cmdline_args.at(serviceNameIndex); }else { CRITICAL("No --service set and no default was found."); return 1; } } up.upload(screenshot, serviceShortname, up.getUploader(serviceShortname)->getFilename(), true); retcode = 0; }else { //Show GUI if(firstRun)