root/src/main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "mainwindow.h"
#include <QApplication>
#include <QStatusBar>
#include <QDir>
#include <QDesktopServices>
#include "config.h"
#include "server.h"
#include "library.h"
#include "libraryinitthread.h"
#include "malclient.h"
#include "mplayer.h"
#include "mpv.h"
#include "omxplayer.h"
#include "metadataparseravconv.h"
#include "thumbnailcreatoravconv.h"
#include "transmissionclient.h"
#include "snapshotwallpapergenerator.h"
#include "nyaarss.h"

#include <string.h>
#include <curl/curl.h>
#include <locale.h>

int main(int argc, char *argv[]) {
    // TODO move argument parsing partly back here, since it calls exit(0)

    BaseConfig config(argc, argv);

    QApplication a(argc, argv, !config.getNoGui());
    curl_global_init(CURL_GLOBAL_SSL);

    bool noInitFail = true;
    Library library(config.libraryPath());
    noInitFail *= library.initDirectory();

    if (!noInitFail) {
        return 2;
    }


    MainWindow w(library);
    if (!config.getNoGui()) {
        if (config.getFullScreen()) {
            w.showFullScreen();
        } else {
            w.show();
        }
    }

    VideoPlayer* player;

    // omx support is dead
    // if (config.omxPlayerIsInstalled()) {
    //     player = new Omxplayer(library, config);
    // } else {
    //     player = new Mplayer(library, config, config.getMplayerConfigConstRef());
    // }

    // numeric locale c is required by mpv to do anything
    setlocale(LC_NUMERIC, "C");

#ifdef USE_MPV
    player = new Mpv(library, config);
#else
    // this requires mplayer2
    // mplayer2 is no longer in development and packages for distros are dying
    player = new Mplayer(library, config, config.getMplayerConfigConstRef());
#endif


    MetaDataParserAvconv metaDataParser(config.getAvconvConfigConstRef());
    ThumbnailCreatorAvconv thumbnailCreator(config.getAvconvConfigConstRef());
    player->setMetaDataParser(&metaDataParser);
    player->setThumbnailCreator(&thumbnailCreator);
    library.setMetaDataParser(&metaDataParser);

    library.addWallpaperDownloader(new SnapshotWallpaperGenerator::Client(metaDataParser, thumbnailCreator));

    // TODO move into the thread
    const RssConfig& rssConfig = config.getRssConfigConstRef();
    TransmissionClient transmission;
    NyaaRss::Client nyaaClient(transmission, library, rssConfig);
    TorrentRss::Thread rssThread(nyaaClient);
    rssThread.start(QThread::LowestPriority);
    //nyaaClient.moveToThread(&rssThread);
    nyaaClient.connectLibrary();

#ifdef SERVER_PUBLIC_ROOT
    QDir publicDir = QDir(SERVER_PUBLIC_ROOT);
#else
    QDir publicDir = QDir::current();
    publicDir.cd("public");
#endif
    qDebug() << "server dir" << publicDir.absoluteFilePath(".");
    Server s(publicDir.path(), w, library, player);
    const int port = s.start(config.serverPort());

    if (config.getAutoOpenBrowser()) {
        QString url(QString("http://localhost:%1").arg(port));
        QDesktopServices::openUrl(url);
    }
    library.initWallpaperDownloaders();
    library.watchFilesystem();
    library.initOnlineSync(config);

    LibraryInitThread initThread(library, config, QThread::currentThread());
    initThread.start(QThread::HighestPriority);
    w.setPage("MainPage", QString("Launched on port %1").arg(port));

    int returnCode = a.exec();
    library.write(); // write before exit

    rssThread.toldToStop = true;
    rssThread.wait();

    return returnCode;
}