#include "../lib/alpm/manager.h" #include "../lib/alpm/utilities.h" #include "../lib/alpm/config.h" #include "../lib/network/server.h" #include "./mainwindow.h" #include "resources/config.h" #include #include #include #include #include #include #include using namespace std; using namespace ApplicationUtilities; using namespace RepoIndex; int main(int argc, char *argv[]) { // setup the argument parser ArgumentParser parser; SET_APPLICATION_INFO; SET_QT_APPLICATION_INFO; QT_CONFIG_ARGUMENTS qtConfigArgs; ConfigArgs configArgs(parser); parser.setIgnoreUnknownArguments(false); Argument webdirArg("web-dir", '\0', "specifies the directory of the web files"); webdirArg.setCombinable(true); webdirArg.setRequiredValueCount(1); webdirArg.setValueNames({"path"}); for(Argument *arg : initializer_list{&configArgs.rootdirArg, &configArgs.dbpathArg, &configArgs.pacmanConfArg, &configArgs.reposFromPacmanConfEnabled, &configArgs.aurArg}) { qtConfigArgs.qtWidgetsGuiArg().addSubArgument(arg); } parser.setMainArguments({&qtConfigArgs.qtWidgetsGuiArg(), &configArgs.repoindexConfArg, &configArgs.repoindexConfArg, &webdirArg, &configArgs.cacheDirArg, &configArgs.storageDirArg, &configArgs.helpArg}); // parse command line arguments try { parser.parseArgs(argc, argv); } catch (const Failure &e) { cerr << shchar << "Unable to parse arguments: " << e.what() << endl; return 2; } try { // load configuration Config config; config.loadFromConfigFile(configArgs); config.loadFromArgs(configArgs); config.loadLocalOnlySetup(); config.setServerCloseable(false); if(qtConfigArgs.qtWidgetsGuiArg().isPresent()) { // configure Qt qtConfigArgs.applySettings(); QApplication application(argc, argv); // find directory with web files QString webdir; if(webdirArg.isPresent()) { webdir = QString::fromLocal8Bit(webdirArg.values().front()); } else { webdir = QStringLiteral("/usr/share/" PROJECT_NAME "/web"); } // setup manager Manager manager(config); cerr << shchar << "Loading databases ..." << endl; if(config.areReposFromPacmanConfEnabled()) { manager.addDataBasesFromPacmanConfig(); } manager.addDatabasesFromRepoIndexConfig(); manager.initAlpmDataBases(); cerr << shchar << "Restoring cache ... "; manager.restoreCache(); cerr << shchar << "DONE" << endl; // setup the server Server server(manager, manager.config()); manager.setAutoCacheMaintenanceEnabled(true); manager.setAutoUpdateEnabled(true); // create app MainWindow mainWindow(webdir, &manager); mainWindow.show(); // run Qt event loop return application.exec(); } else if(!configArgs.helpArg.isPresent()) { if(useShSyntax) { cerr << "export REPOINDEX_ERROR='No command line arguments specified. See --help for available commands.'" << endl; } else { cerr << "No command line arguments specified. See --help for available commands." << endl; } } } catch (const exception &ex) { Utilities::printError(ex); return 1; } }