-void Quassel::registerMetaTypes() {
- // Complex types
- qRegisterMetaType<QVariant>("QVariant");
- qRegisterMetaType<Message>("Message");
- qRegisterMetaType<BufferInfo>("BufferInfo");
- qRegisterMetaType<NetworkInfo>("NetworkInfo");
- qRegisterMetaType<Identity>("Identity");
- qRegisterMetaType<Network::ConnectionState>("Network::ConnectionState");
-
- qRegisterMetaTypeStreamOperators<QVariant>("QVariant");
- qRegisterMetaTypeStreamOperators<Message>("Message");
- qRegisterMetaTypeStreamOperators<BufferInfo>("BufferInfo");
- qRegisterMetaTypeStreamOperators<NetworkInfo>("NetworkInfo");
- qRegisterMetaTypeStreamOperators<Identity>("Identity");
- qRegisterMetaTypeStreamOperators<qint8>("Network::ConnectionState");
-
- qRegisterMetaType<IdentityId>("IdentityId");
- qRegisterMetaType<BufferId>("BufferId");
- qRegisterMetaType<NetworkId>("NetworkId");
- qRegisterMetaType<UserId>("UserId");
- qRegisterMetaType<AccountId>("AccountId");
- qRegisterMetaType<MsgId>("MsgId");
-
- qRegisterMetaTypeStreamOperators<IdentityId>("IdentityId");
- qRegisterMetaTypeStreamOperators<BufferId>("BufferId");
- qRegisterMetaTypeStreamOperators<NetworkId>("NetworkId");
- qRegisterMetaTypeStreamOperators<UserId>("UserId");
- qRegisterMetaTypeStreamOperators<AccountId>("AccountId");
- qRegisterMetaTypeStreamOperators<MsgId>("MsgId");
-}
-
-void Quassel::setupTranslations() {
- // Set up i18n support
- QLocale locale = QLocale::system();
-
- QTranslator *qtTranslator = new QTranslator(qApp);
- qtTranslator->setObjectName("QtTr");
- qtTranslator->load(QString(":i18n/qt_%1").arg(locale.name()));
- qApp->installTranslator(qtTranslator);
-
- QTranslator *quasselTranslator = new QTranslator(qApp);
- quasselTranslator->setObjectName("QuasselTr");
- quasselTranslator->load(QString(":i18n/quassel_%1").arg(locale.name()));
- qApp->installTranslator(quasselTranslator);
-}
-
-void Quassel::setupBuildInfo() {
- _buildInfo.applicationName = "Quassel IRC";
- _buildInfo.coreApplicationName = "Quassel Core";
- _buildInfo.clientApplicationName = "Quassel Client";
- _buildInfo.organizationName = "Quassel Project";
- _buildInfo.organizationDomain = "quassel-irc.org";
-/*
-# include "version.inc"
-# include "version.gen"
-
- if(quasselGeneratedVersion.isEmpty()) {
- if(quasselCommit.isEmpty())
- quasselVersion = QString("v%1 (unknown rev)").arg(quasselBaseVersion);
- else
- quasselVersion = QString("v%1 (dist-%2, %3)").arg(quasselBaseVersion).arg(quasselCommit.left(7))
- .arg(QDateTime::fromTime_t(quasselArchiveDate).toLocalTime().toString("yyyy-MM-dd"));
- } else {
- QStringList parts = quasselGeneratedVersion.split(':');
- quasselVersion = QString("v%1").arg(parts[0]);
- if(parts.count() >= 2) quasselVersion.append(QString(" (%1)").arg(parts[1]));
- }
- quasselBuildDate = __DATE__;
- quasselBuildTime = __TIME__;
- */
+void Quassel::registerMetaTypes()
+{
+ // Complex types
+ qRegisterMetaType<Message>("Message");
+ qRegisterMetaType<BufferInfo>("BufferInfo");
+ qRegisterMetaType<NetworkInfo>("NetworkInfo");
+ qRegisterMetaType<Network::Server>("Network::Server");
+ qRegisterMetaType<Identity>("Identity");
+
+ qRegisterMetaTypeStreamOperators<Message>("Message");
+ qRegisterMetaTypeStreamOperators<BufferInfo>("BufferInfo");
+ qRegisterMetaTypeStreamOperators<NetworkInfo>("NetworkInfo");
+ qRegisterMetaTypeStreamOperators<Network::Server>("Network::Server");
+ qRegisterMetaTypeStreamOperators<Identity>("Identity");
+
+ qRegisterMetaType<IdentityId>("IdentityId");
+ qRegisterMetaType<BufferId>("BufferId");
+ qRegisterMetaType<NetworkId>("NetworkId");
+ qRegisterMetaType<UserId>("UserId");
+ qRegisterMetaType<AccountId>("AccountId");
+ qRegisterMetaType<MsgId>("MsgId");
+
+ qRegisterMetaType<QHostAddress>("QHostAddress");
+ qRegisterMetaTypeStreamOperators<QHostAddress>("QHostAddress");
+ qRegisterMetaType<QUuid>("QUuid");
+ qRegisterMetaTypeStreamOperators<QUuid>("QUuid");
+
+ qRegisterMetaTypeStreamOperators<IdentityId>("IdentityId");
+ qRegisterMetaTypeStreamOperators<BufferId>("BufferId");
+ qRegisterMetaTypeStreamOperators<NetworkId>("NetworkId");
+ qRegisterMetaTypeStreamOperators<UserId>("UserId");
+ qRegisterMetaTypeStreamOperators<AccountId>("AccountId");
+ qRegisterMetaTypeStreamOperators<MsgId>("MsgId");
+
+ qRegisterMetaType<Protocol::SessionState>("Protocol::SessionState");
+ qRegisterMetaType<PeerPtr>("PeerPtr");
+ qRegisterMetaTypeStreamOperators<PeerPtr>("PeerPtr");
+
+ // Versions of Qt prior to 4.7 didn't define QVariant as a meta type
+ if (!QMetaType::type("QVariant")) {
+ qRegisterMetaType<QVariant>("QVariant");
+ qRegisterMetaTypeStreamOperators<QVariant>("QVariant");
+ }
+}
+
+
+void Quassel::setupEnvironment()
+{
+ // On modern Linux systems, XDG_DATA_DIRS contains a list of directories containing application data. This
+ // is, for example, used by Qt for finding icons and other things. In case Quassel is installed in a non-standard
+ // prefix (or run from the build directory), it makes sense to add this to XDG_DATA_DIRS so we don't have to
+ // hack extra search paths into various places.
+#ifdef Q_OS_UNIX
+ QString xdgDataVar = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
+ if (xdgDataVar.isEmpty())
+ xdgDataVar = QLatin1String("/usr/local/share:/usr/share"); // sane defaults
+
+ QStringList xdgDirs = xdgDataVar.split(QLatin1Char(':'), QString::SkipEmptyParts);
+
+ // Add our install prefix (if we're not in a bindir, this just adds the current workdir)
+ QString appDir = QCoreApplication::applicationDirPath();
+ int binpos = appDir.lastIndexOf("/bin");
+ if (binpos >= 0) {
+ appDir.replace(binpos, 4, "/share");
+ xdgDirs.append(appDir);
+ // Also append apps/quassel, this is only for QIconLoader to find icons there
+ xdgDirs.append(appDir + "/apps/quassel");
+ } else
+ xdgDirs.append(appDir); // build directory is always the last fallback
+
+ xdgDirs.removeDuplicates();
+
+ qputenv("XDG_DATA_DIRS", QFile::encodeName(xdgDirs.join(":")));
+#endif
+}
+
+
+void Quassel::setupBuildInfo()
+{
+ BuildInfo buildInfo;
+ buildInfo.applicationName = "quassel";
+ buildInfo.coreApplicationName = "quasselcore";
+ buildInfo.clientApplicationName = "quasselclient";
+ buildInfo.organizationName = "Quassel Project";
+ buildInfo.organizationDomain = "quassel-irc.org";
+
+ buildInfo.protocolVersion = 10; // FIXME: deprecated, will be removed
+
+ buildInfo.baseVersion = QUASSEL_VERSION_STRING;
+ buildInfo.generatedVersion = GIT_DESCRIBE;
+
+ // Check if we got a commit hash
+ if (!QString(GIT_HEAD).isEmpty()) {
+ buildInfo.commitHash = GIT_HEAD;
+ QDateTime date;
+ date.setTime_t(GIT_COMMIT_DATE);
+ buildInfo.commitDate = date.toString();
+ }
+ else if (!QString(DIST_HASH).contains("Format")) {
+ buildInfo.commitHash = DIST_HASH;
+ buildInfo.commitDate = QString(DIST_DATE);
+ }
+
+ // create a nice version string
+ if (buildInfo.generatedVersion.isEmpty()) {
+ if (!buildInfo.commitHash.isEmpty()) {
+ // dist version
+ buildInfo.plainVersionString = QString{"v%1 (dist-%2)"}
+ .arg(buildInfo.baseVersion)
+ .arg(buildInfo.commitHash.left(7));
+ buildInfo.fancyVersionString = QString{"v%1 (dist-<a href=\"https://github.com/quassel/quassel/commit/%3\">%2</a>)"}
+ .arg(buildInfo.baseVersion)
+ .arg(buildInfo.commitHash.left(7))
+ .arg(buildInfo.commitHash);
+ }
+ else {
+ // we only have a base version :(
+ buildInfo.plainVersionString = QString{"v%1 (unknown revision)"}.arg(buildInfo.baseVersion);
+ }
+ }
+ else {
+ // analyze what we got from git-describe
+ static const QRegExp rx{"(.*)-(\\d+)-g([0-9a-f]+)(-dirty)?$"};
+ if (rx.exactMatch(buildInfo.generatedVersion)) {
+ QString distance = rx.cap(2) == "0" ? QString{} : QString{"%1+%2 "}.arg(rx.cap(1), rx.cap(2));
+ buildInfo.plainVersionString = QString{"v%1 (%2git-%3%4)"}.arg(buildInfo.baseVersion, distance, rx.cap(3), rx.cap(4));
+ if (!buildInfo.commitHash.isEmpty()) {
+ buildInfo.fancyVersionString = QString{"v%1 (%2git-<a href=\"https://github.com/quassel/quassel/commit/%5\">%3</a>%4)"}
+ .arg(buildInfo.baseVersion, distance, rx.cap(3), rx.cap(4), buildInfo.commitHash);
+ }
+ }
+ else {
+ buildInfo.plainVersionString = QString{"v%1 (invalid revision)"}.arg(buildInfo.baseVersion);
+ }
+ }
+ if (buildInfo.fancyVersionString.isEmpty()) {
+ buildInfo.fancyVersionString = buildInfo.plainVersionString;
+ }
+
+ instance()->_buildInfo = std::move(buildInfo);