diff --git a/src/adapters/interfaces/persistance/i_app_info_access.hpp b/src/adapters/interfaces/persistance/i_app_info_access.hpp index 92a71cdf6..9c2435c00 100644 --- a/src/adapters/interfaces/persistance/i_app_info_access.hpp +++ b/src/adapters/interfaces/persistance/i_app_info_access.hpp @@ -7,7 +7,7 @@ namespace adapters { /** - * The IAppInfoAccess class makes the API calls to the server to query + * This class makes the API calls to the server to query * metainformation about Librum. */ class ADAPTERS_EXPORT IAppInfoAccess : public QObject diff --git a/src/adapters/interfaces/persistance/i_authentication_access.hpp b/src/adapters/interfaces/persistance/i_authentication_access.hpp index 551470bb6..3f3e9d3f9 100644 --- a/src/adapters/interfaces/persistance/i_authentication_access.hpp +++ b/src/adapters/interfaces/persistance/i_authentication_access.hpp @@ -9,8 +9,7 @@ namespace adapters { /** - * The IAuthenticationAccess class makes the API calls to the authentication - * server. + * This class makes the API calls to the login server. */ class ADAPTERS_EXPORT IAuthenticationAccess : public QObject { diff --git a/src/adapters/interfaces/persistance/i_dictionary_access.hpp b/src/adapters/interfaces/persistance/i_dictionary_access.hpp index 8f64e222d..647668df2 100644 --- a/src/adapters/interfaces/persistance/i_dictionary_access.hpp +++ b/src/adapters/interfaces/persistance/i_dictionary_access.hpp @@ -8,7 +8,7 @@ namespace adapters { /** - * The IDictionaryAccess class makes the API calls to the API of the used + * This class makes the API calls to the API of the used * dictionary to retrieve definitions, etc. from it. */ class ADAPTERS_EXPORT IDictionaryAccess : public QObject diff --git a/src/adapters/interfaces/persistance/i_folder_storage_access.hpp b/src/adapters/interfaces/persistance/i_folder_storage_access.hpp index 6e2e01bab..70bd9558d 100644 --- a/src/adapters/interfaces/persistance/i_folder_storage_access.hpp +++ b/src/adapters/interfaces/persistance/i_folder_storage_access.hpp @@ -8,7 +8,7 @@ namespace adapters { /** - * The IFolderStorageAccess class makes the API calls to the API of the used + * This class makes the API calls to the API of the used * Folder to store folders, etc. from it. */ class ADAPTERS_EXPORT IFolderStorageAccess : public QObject diff --git a/src/adapters/interfaces/persistance/i_library_storage_access.hpp b/src/adapters/interfaces/persistance/i_library_storage_access.hpp index 6e4c3a692..e65e05d64 100644 --- a/src/adapters/interfaces/persistance/i_library_storage_access.hpp +++ b/src/adapters/interfaces/persistance/i_library_storage_access.hpp @@ -9,8 +9,7 @@ namespace adapters { /** - * The ILibraryStorageAccess class makes the API calls to the book storage - * server. + * This class makes the API calls to the server that stores books. */ class ADAPTERS_EXPORT ILibraryStorageAccess : public QObject { diff --git a/src/adapters/interfaces/persistance/i_user_storage_access.hpp b/src/adapters/interfaces/persistance/i_user_storage_access.hpp index 66ce0da4e..441db4747 100644 --- a/src/adapters/interfaces/persistance/i_user_storage_access.hpp +++ b/src/adapters/interfaces/persistance/i_user_storage_access.hpp @@ -10,7 +10,7 @@ namespace adapters { /** - * The IUserStorageAccess class makes the API calls to the user storage server. + * This class makes the API calls to the user storage server. */ class ADAPTERS_EXPORT IUserStorageAccess : public QObject { diff --git a/src/infrastructure/data/endpoints.hpp b/src/infrastructure/data/endpoints.hpp index b9c6d860a..aed59e3b5 100644 --- a/src/infrastructure/data/endpoints.hpp +++ b/src/infrastructure/data/endpoints.hpp @@ -7,8 +7,8 @@ namespace infrastructure::data inline const QString freeBooksDomain { "https://freebooks.librumreader.com" }; // Authentication -inline const QString authenticationEndpoint { "/authentication/login" }; -inline const QString registrationEndpoint { "/authentication/register" }; +inline const QString loginEndpoint { "/authentication/login" }; +inline const QString registerEndpoint { "/authentication/register" }; inline const QString checkIfEmailConfirmedEndpoint { "/authentication/checkIfEmailConfirmed" }; @@ -25,16 +25,16 @@ inline const QString aiCompletionEndpoint { "/Ai/complete" }; inline const QString aiTranslationEndpoint { "/Ai/translate" }; // Library storage -inline const QString bookCreationEndpoint { "/book" }; +inline const QString bookCreateEndpoint { "/book" }; inline const QString bookUpdateEndpoint { "/book" }; -inline const QString bookDeletionEndpoint { "/book" }; -inline const QString booksMetadataGetEndpoint { "/book" }; -inline const QString uploadBookDataEndpoint { "/book/bookData" }; -inline const QString downloadBookDataEndpoint { "/book/bookData" }; -inline const QString getBookCoverEndpoint { "/book/cover" }; -inline const QString changeBookCoverEndpoint { "/book/cover" }; -inline const QString deleteBookCoverEndpoint { "/book/cover" }; -inline const QString getUsedBookStorageEndpoint { "/book/usedBookStorage" }; +inline const QString bookDeleteEndpoint { "/book" }; +inline const QString getBooksMetadataEndpoint { "/book" }; +inline const QString bookDataUploadEndpoint { "/book/bookData" }; +inline const QString bookDataDownloadEndpoint { "/book/bookData" }; +inline const QString bookCoverGetEndpoint { "/book/cover" }; +inline const QString bookCoverChangeEndpoint { "/book/cover" }; +inline const QString bookCoverDeleteEndpoint { "/book/cover" }; +inline const QString usedBookStorageGetEndpoint { "/book/usedBookStorage" }; // Folder storage inline const QString folderGetEndpoint { "/folder" }; @@ -46,11 +46,11 @@ inline const QString getFreeBooksMetadataEndpoint { freeBooksDomain + // User storage inline const QString userGetEndpoint { "/user" }; -inline const QString userPatchEndpoint { "/user" }; +inline const QString userUpdateEndpoint { "/user" }; inline const QString userDeleteEndpoint { "/user" }; -inline const QString userForgotPasswordEndpoint { "/user/forgotPassword" }; -inline const QString userChangePasswordEndpoint { "/user" }; inline const QString userProfilePictureEndpoint { "/user/profilePicture" }; +inline const QString userPasswordForgotEndpoint { "/user/forgotPassword" }; +inline const QString userPasswordChangeEndpoint { "/user" }; // Dictionary API inline const QString dictionaryDefinitionEndpoint { diff --git a/src/infrastructure/persistance/ai_tools_access.cpp b/src/infrastructure/persistance/ai_tools_access.cpp index fccb98a31..439f4f487 100644 --- a/src/infrastructure/persistance/ai_tools_access.cpp +++ b/src/infrastructure/persistance/ai_tools_access.cpp @@ -13,15 +13,15 @@ namespace infrastructure::persistence AiToolsAccess::AiToolsAccess() { - QSettings settings; - domain = settings.value("serverHost").toString(); + QSettings appSettings; + m_serverHost = appSettings.value("serverHost").toString(); } void AiToolsAccess::getExplanation(const QString& authToken, const QString& query, const QString& mode) { auto request = - createRequest(domain + data::aiCompletionEndpoint, authToken); + createRequest(m_serverHost + data::aiCompletionEndpoint, authToken); request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); @@ -90,7 +90,7 @@ void AiToolsAccess::getTranslation(const QString& authToken, const QString& targetLang) { auto request = - createRequest(domain + data::aiTranslationEndpoint, authToken); + createRequest(m_serverHost + data::aiTranslationEndpoint, authToken); request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); diff --git a/src/infrastructure/persistance/ai_tools_access.hpp b/src/infrastructure/persistance/ai_tools_access.hpp index 13a19e8d0..40ba511f8 100644 --- a/src/infrastructure/persistance/ai_tools_access.hpp +++ b/src/infrastructure/persistance/ai_tools_access.hpp @@ -30,7 +30,7 @@ class AiToolsAccess : public adapters::IAiToolsAccess QDateTime m_lastRequestStartTime; QNetworkAccessManager m_networkAccessManager; - QString domain; + QString m_serverHost; }; } // namespace infrastructure::persistence diff --git a/src/infrastructure/persistance/authentication_access.cpp b/src/infrastructure/persistance/authentication_access.cpp index a6f929327..5956ffabb 100644 --- a/src/infrastructure/persistance/authentication_access.cpp +++ b/src/infrastructure/persistance/authentication_access.cpp @@ -9,13 +9,13 @@ namespace infrastructure::persistence AuthenticationAccess::AuthenticationAccess() { - QSettings settings; - domain = settings.value("serverHost").toString(); + QSettings appSettings; + m_serverHost = appSettings.value("serverHost").toString(); } void AuthenticationAccess::authenticateUser(const LoginDto& loginDto) { - auto request = createRequest(domain + data::authenticationEndpoint); + auto request = createRequest(m_serverHost + data::loginEndpoint); QJsonObject jsonObject; jsonObject["email"] = loginDto.email; @@ -24,54 +24,57 @@ void AuthenticationAccess::authenticateUser(const LoginDto& loginDto) QJsonDocument jsonDocument { jsonObject }; QByteArray data = jsonDocument.toJson(QJsonDocument::Compact); - auto reply = m_networkAccessManager.post(request, data); + auto result = m_networkAccessManager.post(request, data); - // handle ssl errors - connect(reply, &QNetworkReply::sslErrors, this, - [reply](const QList& errors) + // Handle authentication result and release the reply's memory + connect(result, &QNetworkReply::finished, this, + [this, result]() { - qWarning() << "SSL Errors: " << reply->errorString(); - for(int i = 0; i < errors.count(); ++i) + if(api_error_helper::apiRequestFailed(result, 200)) { - qWarning() << errors[i].errorString(); + auto errorCode = api_error_helper::logErrorMessage( + result, "Authentication"); + + emit authenticationFinished("", errorCode); + result->deleteLater(); + return; } - QSettings settings; - if(settings.value("selfHosted").toString() == "true") - reply->ignoreSslErrors(); + result->setReadBufferSize(1000); + QString authenticationToken = + QString::fromUtf8(result->readAll()); + emit authenticationFinished(authenticationToken); + result->deleteLater(); }); - connect(reply, &QNetworkReply::errorOccurred, this, - [reply](QNetworkReply::NetworkError) + // Process the case of ssl errors occuring + connect(result, &QNetworkReply::sslErrors, this, + [result](const QList& sslErrors) { - qWarning() << "Error " << reply->errorString(); - }); - + qWarning() << "Last SSL Error: " << result->errorString(); - // Handle authentication result and release the reply's memory - connect(reply, &QNetworkReply::finished, this, - [this, reply]() - { - if(api_error_helper::apiRequestFailed(reply, 200)) + for(const auto& error : sslErrors) { - auto errorCode = api_error_helper::logErrorMessage( - reply, "Authentication"); - - emit authenticationFinished("", errorCode); - reply->deleteLater(); - return; + qWarning() << error.errorString(); } - reply->setReadBufferSize(1000); - QString token = QString::fromUtf8(reply->readAll()); - emit authenticationFinished(token); - reply->deleteLater(); + QSettings appSettings; + + if(appSettings.value("selfHosted").toString() == "true") + result->ignoreSslErrors(); + }); + + // Process the case of network errors occuring + connect(result, &QNetworkReply::errorOccurred, this, + [result](QNetworkReply::NetworkError) + { + qWarning() << "Network Error " << result->errorString(); }); } void AuthenticationAccess::registerUser(const RegisterDto& registerDto) { - auto request = createRequest(domain + data::registrationEndpoint); + auto request = createRequest(m_serverHost + data::registerEndpoint); QJsonObject jsonObject; jsonObject["name"] = registerDto.name; @@ -83,7 +86,6 @@ void AuthenticationAccess::registerUser(const RegisterDto& registerDto) auto reply = m_networkAccessManager.post(request, data); - // Handle registration result and release the reply's memory connect(reply, &QNetworkReply::finished, this, [this, reply]() @@ -105,8 +107,8 @@ void AuthenticationAccess::registerUser(const RegisterDto& registerDto) void AuthenticationAccess::checkIfEmailConfirmed(const QString& email) { - auto request = createRequest(domain + data::checkIfEmailConfirmedEndpoint + - "/" + email); + auto request = createRequest( + m_serverHost + data::checkIfEmailConfirmedEndpoint + "/" + email); auto reply = m_networkAccessManager.get(request); diff --git a/src/infrastructure/persistance/authentication_access.hpp b/src/infrastructure/persistance/authentication_access.hpp index 1a0c83004..ee8d6a2b6 100644 --- a/src/infrastructure/persistance/authentication_access.hpp +++ b/src/infrastructure/persistance/authentication_access.hpp @@ -29,7 +29,7 @@ class AuthenticationAccess : public adapters::IAuthenticationAccess QNetworkRequest createRequest(QUrl url); QNetworkAccessManager m_networkAccessManager; - QString domain; + QString m_serverHost; }; } // namespace infrastructure::persistence diff --git a/src/infrastructure/persistance/library_storage_access.cpp b/src/infrastructure/persistance/library_storage_access.cpp index 53962684a..936f07b89 100644 --- a/src/infrastructure/persistance/library_storage_access.cpp +++ b/src/infrastructure/persistance/library_storage_access.cpp @@ -14,15 +14,15 @@ namespace infrastructure::persistence LibraryStorageAccess::LibraryStorageAccess() { - QSettings settings; - domain = settings.value("serverHost").toString(); + QSettings appSettings; + m_serverHost = appSettings.value("serverHost").toString(); } void LibraryStorageAccess::createBook(const QString& authToken, const QJsonObject& jsonBook) { auto request = - createRequest(domain + data::bookCreationEndpoint, authToken); + createRequest(m_serverHost + data::bookCreateEndpoint, authToken); QJsonDocument jsonDocument(jsonBook); QByteArray data = jsonDocument.toJson(QJsonDocument::Compact); @@ -66,7 +66,7 @@ void LibraryStorageAccess::deleteBook(const QString& authToken, const QUuid& uuid) { auto request = - createRequest(domain + data::bookDeletionEndpoint, authToken); + createRequest(m_serverHost + data::bookDeleteEndpoint, authToken); QJsonArray bookArray; bookArray.append(QJsonValue::fromVariant(uuid)); @@ -94,7 +94,8 @@ void LibraryStorageAccess::deleteBook(const QString& authToken, void LibraryStorageAccess::updateBook(const QString& authToken, const QJsonObject& jsonBook) { - auto request = createRequest(domain + data::bookUpdateEndpoint, authToken); + auto request = + createRequest(m_serverHost + data::bookUpdateEndpoint, authToken); QJsonDocument jsonDocument(jsonBook); QByteArray data = jsonDocument.toJson(QJsonDocument::Compact); @@ -146,7 +147,8 @@ void LibraryStorageAccess::uploadBookCover(const QString& authToken, bookCover->append(imagePart); - QUrl endpoint = domain + data::changeBookCoverEndpoint + "/" + stringUuid; + QUrl endpoint = + m_serverHost + data::bookCoverChangeEndpoint + "/" + stringUuid; auto request = createRequest(endpoint, authToken); // Reset the ContentTypeHeader since it will be set by the multipart @@ -176,7 +178,7 @@ void LibraryStorageAccess::uploadBookCover(const QString& authToken, void LibraryStorageAccess::deleteBookCover(const QString& authToken, const QUuid& uuid) { - QUrl endpoint = domain + data::deleteBookCoverEndpoint + "/" + + QUrl endpoint = m_serverHost + data::bookCoverDeleteEndpoint + "/" + uuid.toString(QUuid::WithoutBraces); auto request = createRequest(endpoint, authToken); @@ -202,7 +204,7 @@ void LibraryStorageAccess::deleteBookCover(const QString& authToken, void LibraryStorageAccess::getBooksMetaData(const QString& authToken) { auto request = - createRequest(domain + data::booksMetadataGetEndpoint, authToken); + createRequest(m_serverHost + data::getBooksMetadataEndpoint, authToken); auto reply = m_networkAccessManager.get(request); connect(reply, &QNetworkReply::finished, this, @@ -217,7 +219,8 @@ void LibraryStorageAccess::downloadCoverForBook(const QString& authToken, const QUuid& uuid) { QString uuidString = uuid.toString(QUuid::WithoutBraces); - QString endpoint = domain + data::getBookCoverEndpoint + "/" + uuidString; + QString endpoint = + m_serverHost + data::bookCoverGetEndpoint + "/" + uuidString; auto request = createRequest(endpoint, authToken); auto reply = m_networkAccessManager.get(request); @@ -243,7 +246,7 @@ void LibraryStorageAccess::downloadCoverForBook(const QString& authToken, void LibraryStorageAccess::downloadBookMedia(const QString& authToken, const QUuid& uuid) { - auto endpoint = domain + data::downloadBookDataEndpoint + "/" + + auto endpoint = m_serverHost + data::bookDataDownloadEndpoint + "/" + uuid.toString(QUuid::WithoutBraces); auto request = createRequest(endpoint, authToken); auto reply = m_networkAccessManager.get(request); @@ -324,7 +327,7 @@ void LibraryStorageAccess::uploadBookMedia(const QString& uuid, } - QUrl endpoint = domain + data::uploadBookDataEndpoint + "/" + uuid; + QUrl endpoint = m_serverHost + data::bookDataUploadEndpoint + "/" + uuid; auto request = createRequest(endpoint, authToken); // Reset the ContentTypeHeader since it will be set by the multipart diff --git a/src/infrastructure/persistance/library_storage_access.hpp b/src/infrastructure/persistance/library_storage_access.hpp index 21457f3b0..944c5c452 100644 --- a/src/infrastructure/persistance/library_storage_access.hpp +++ b/src/infrastructure/persistance/library_storage_access.hpp @@ -43,7 +43,7 @@ private slots: QNetworkAccessManager m_networkAccessManager; - QString domain; + QString m_serverHost; }; } // namespace infrastructure::persistence diff --git a/src/infrastructure/persistance/user_storage_access.cpp b/src/infrastructure/persistance/user_storage_access.cpp index 56bbd23aa..07c38c59c 100644 --- a/src/infrastructure/persistance/user_storage_access.cpp +++ b/src/infrastructure/persistance/user_storage_access.cpp @@ -16,13 +16,14 @@ namespace infrastructure::persistence UserStorageAccess::UserStorageAccess() { - QSettings settings; - domain = settings.value("serverHost").toString(); + QSettings appSettings; + m_serverHost = appSettings.value("serverHost").toString(); } void UserStorageAccess::getUser(const QString& authToken) { - auto request = createRequest(domain + data::userGetEndpoint, authToken); + auto request = + createRequest(m_serverHost + data::userGetEndpoint, authToken); auto reply = m_networkAccessManager.get(request); connect( @@ -55,7 +56,8 @@ void UserStorageAccess::getUser(const QString& authToken) void UserStorageAccess::deleteUser(const QString& authToken) { - auto request = createRequest(domain + data::userDeleteEndpoint, authToken); + auto request = + createRequest(m_serverHost + data::userDeleteEndpoint, authToken); auto reply = m_networkAccessManager.sendCustomRequest(request, "DELETE"); connect(reply, &QNetworkReply::finished, this, @@ -75,14 +77,15 @@ void UserStorageAccess::deleteUser(const QString& authToken) void UserStorageAccess::forgotPassword(const QString& email) { - auto endpoint = domain + data::userForgotPasswordEndpoint + "/" + email; + auto endpoint = + m_serverHost + data::userPasswordForgotEndpoint + "/" + email; auto request = createRequest(endpoint, ""); m_networkAccessManager.post(request, QByteArray()); } void UserStorageAccess::getProfilePicture(const QString& authToken) { - QString endpoint = domain + data::userProfilePictureEndpoint; + QString endpoint = m_serverHost + data::userProfilePictureEndpoint; auto request = createRequest(endpoint, authToken); auto reply = m_networkAccessManager.get(request); @@ -108,7 +111,8 @@ void UserStorageAccess::getProfilePicture(const QString& authToken) void UserStorageAccess::changeName(const QString& authToken, const QString& newName) { - auto request = createRequest(domain + data::userPatchEndpoint, authToken); + auto request = + createRequest(m_serverHost + data::userUpdateEndpoint, authToken); const QString quote = "\""; auto jsonData = R"([{ "op": "replace", "path": "name", "value": )" + quote + @@ -142,8 +146,8 @@ void UserStorageAccess::changeEmail(const QString& authToken, void UserStorageAccess::changePassword(const QString& authToken, const QString& newPassword) { - auto request = - createRequest(domain + data::userChangePasswordEndpoint, authToken); + auto request = createRequest( + m_serverHost + data::userPasswordChangeEndpoint, authToken); QJsonObject jsonObject; jsonObject["Input"] = newPassword; auto data = QJsonDocument(jsonObject).toJson(); @@ -179,7 +183,7 @@ void UserStorageAccess::changeProfilePicture(const QString& authToken, addImagePartToMultiPart(profilePicture, path); - QUrl endpoint = domain + data::userProfilePictureEndpoint; + QUrl endpoint = m_serverHost + data::userProfilePictureEndpoint; auto request = createRequest(endpoint, authToken); // Reset the ContentTypeHeader since it will be set by the multipart @@ -204,7 +208,7 @@ void UserStorageAccess::changeProfilePicture(const QString& authToken, void UserStorageAccess::deleteProfilePicture(const QString& authToken) { - QString endpoint = domain + data::userProfilePictureEndpoint; + QString endpoint = m_serverHost + data::userProfilePictureEndpoint; auto request = createRequest(endpoint, authToken); auto reply = m_networkAccessManager.sendCustomRequest(request, "DELETE"); @@ -227,7 +231,7 @@ void UserStorageAccess::deleteProfilePicture(const QString& authToken) void UserStorageAccess::changeProfilePictureLastUpdated( const QString& authToken, const QString& newDateTime) { - QString endPoint = domain + data::userPatchEndpoint; + QString endPoint = m_serverHost + data::userUpdateEndpoint; auto request = createRequest(endPoint, authToken); const QString quote = "\""; @@ -254,7 +258,7 @@ void UserStorageAccess::changeProfilePictureLastUpdated( void UserStorageAccess::changeHasProfilePicture(const QString& authToken, const QString& newValue) { - QString endPoint = domain + data::userPatchEndpoint; + QString endPoint = m_serverHost + data::userUpdateEndpoint; auto request = createRequest(endPoint, authToken); const QString quote = "\""; @@ -280,7 +284,7 @@ void UserStorageAccess::changeHasProfilePicture(const QString& authToken, void UserStorageAccess::deleteTag(const QString& authToken, const QString& uuid) { - QString endPoint = domain + data::tagDeletionEndpoint + "/" + uuid; + QString endPoint = m_serverHost + data::tagDeletionEndpoint + "/" + uuid; auto request = createRequest(endPoint, authToken); auto reply = m_networkAccessManager.sendCustomRequest(request, "DELETE"); @@ -302,7 +306,7 @@ void UserStorageAccess::deleteTag(const QString& authToken, const QString& uuid) void UserStorageAccess::renameTag(const QString& authToken, const QJsonObject& bookForUpdate) { - QString endPoint = domain + data::tagUpdateEndpoint; + QString endPoint = m_serverHost + data::tagUpdateEndpoint; auto request = createRequest(endPoint, authToken); QJsonDocument jsonDoc(bookForUpdate); diff --git a/src/infrastructure/persistance/user_storage_access.hpp b/src/infrastructure/persistance/user_storage_access.hpp index 9e8d8ceee..bc58b243a 100644 --- a/src/infrastructure/persistance/user_storage_access.hpp +++ b/src/infrastructure/persistance/user_storage_access.hpp @@ -47,7 +47,7 @@ class UserStorageAccess : public adapters::IUserStorageAccess QNetworkRequest createRequest(const QUrl& url, const QString& authToken); QNetworkAccessManager m_networkAccessManager; - QString domain; + QString m_serverHost; }; } // namespace infrastructure::persistence diff --git a/src/main.cpp b/src/main.cpp index 7e7ddd348..84434566a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -51,7 +51,7 @@ using namespace application::services; void registerTypes(); -void setupGlobalSettings(); +void initializeAppSettings(); void setupFonts(); int main(int argc, char* argv[]) @@ -70,7 +70,7 @@ int main(int argc, char* argv[]) #if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) qInstallMessageHandler(logging::messageHandler); #endif - setupGlobalSettings(); + initializeAppSettings(); setupFonts(); // Register types @@ -308,31 +308,34 @@ int main(int argc, char* argv[]) // clang-format on } -void setupGlobalSettings() +void initializeAppSettings() { - QSettings settings; - QString cfgFile = settings.value("serverHost", QVariant("")).toString(); - if(cfgFile.isEmpty()) - settings.setValue("serverHost", "https://api.librumreader.com"); + QSettings appSettings; + + QString selfHosted = + appSettings.value("selfHosted", QVariant("")).toString(); + if(selfHosted.isEmpty()) + appSettings.setValue("selfHosted", "false"); - QString sslSettings = settings.value("selfHosted", QVariant("")).toString(); - if(sslSettings.isEmpty()) - settings.setValue("selfHosted", "false"); + QString serverHost = + appSettings.value("serverHost", QVariant("")).toString(); + if(serverHost.isEmpty()) + appSettings.setValue("serverHost", "https://api.librumreader.com"); } -void loadFont(const QString& path) +void addFont(const QString& path) { - int result = QFontDatabase::addApplicationFont(path); - if(result == -1) - qWarning() << QString("Loading font file: %1 failed.").arg(path); + int laodedFontId = QFontDatabase::addApplicationFont(path); + if(laodedFontId == -1) + qWarning() << QString("Failed to load font file: %1.").arg(path); } void setupFonts() { - loadFont(":/resources/fonts/SF-Pro-Display-Bold.otf"); - loadFont(":/resources/fonts/SF-Pro-Display-Medium.otf"); - loadFont(":/resources/fonts/SF-Pro-Display-Regular.otf"); - loadFont(":/resources/fonts/SF-Pro-Display-Semibold.otf"); + addFont(":/resources/fonts/SF-Pro-Display-Bold.otf"); + addFont(":/resources/fonts/SF-Pro-Display-Medium.otf"); + addFont(":/resources/fonts/SF-Pro-Display-Regular.otf"); + addFont(":/resources/fonts/SF-Pro-Display-Semibold.otf"); QFont defaultFont("SF Pro Display"); defaultFont.setLetterSpacing(QFont::AbsoluteSpacing, 0.1); diff --git a/src/presentation/desktop/settings/accountPage/MAccountPage.qml b/src/presentation/desktop/settings/accountPage/MAccountPage.qml index 97a3934e6..406843e2f 100644 --- a/src/presentation/desktop/settings/accountPage/MAccountPage.qml +++ b/src/presentation/desktop/settings/accountPage/MAccountPage.qml @@ -405,8 +405,8 @@ MFlickWrapper { borderColor: Style.colorButtonBorder backgroundColor: "transparent" opacityOnPressed: 0.7 - text: qsTr("Logout") textColor: Style.colorUnfocusedButtonText + text: qsTr("Logout") fontWeight: Font.Bold fontSize: Fonts.size12 diff --git a/src/presentation/desktop/sidebar/MSidebar.qml b/src/presentation/desktop/sidebar/MSidebar.qml index 1cc24fb24..bc3e1df4b 100644 --- a/src/presentation/desktop/sidebar/MSidebar.qml +++ b/src/presentation/desktop/sidebar/MSidebar.qml @@ -27,28 +27,28 @@ Item { */ Shortcut { sequence: "Ctrl+1" - onActivated: loadPage(freeBooksPage, root.freeBooksItem) enabled: root.visible + onActivated: loadPage(freeBooksPage, root.freeBooksItem) } Shortcut { sequence: "Ctrl+2" - onActivated: loadPage(homePage, root.homeItem) enabled: root.visible + onActivated: loadPage(homePage, root.homeItem) } Shortcut { sequence: "Ctrl+3" - onActivated: loadPage(statisticsPage, root.statisticsItem) enabled: root.visible + onActivated: loadPage(statisticsPage, root.statisticsItem) } Shortcut { sequence: "Ctrl+4" - onActivated: loadPage(toolsPage, root.toolsItem) enabled: root.visible + onActivated: loadPage(toolsPage, root.toolsItem) } Shortcut { sequence: "Ctrl+5" - onActivated: loadPage(settings, root.settingsItem) enabled: root.visible + onActivated: loadPage(settings, root.settingsItem) } Pane {