File indexing completed on 2024-05-12 16:25:39
0001 /* 0002 SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "downloadappslanguagesmanager.h" 0008 #include "downloadappslanguagesjob.h" 0009 #include "downloadappslanguagesparser.h" 0010 #include "managerdatapaths.h" 0011 #include "ruqola_debug.h" 0012 #include <QFileInfo> 0013 #include <QStandardPaths> 0014 #include <QTextStream> 0015 0016 DownloadAppsLanguagesManager::DownloadAppsLanguagesManager(QObject *parent) 0017 : QObject(parent) 0018 { 0019 } 0020 0021 DownloadAppsLanguagesManager::~DownloadAppsLanguagesManager() = default; 0022 0023 QString DownloadAppsLanguagesManager::storedFileName() const 0024 { 0025 return ManagerDataPaths::self()->path(ManagerDataPaths::Config, mAccountName) + QStringLiteral("/languages-%1.json").arg(mServerVersion); 0026 } 0027 0028 void DownloadAppsLanguagesManager::parse(const QString &serverUrl) 0029 { 0030 if (mFileParsed) { 0031 Q_EMIT fileLanguagesParseSuccess(); 0032 return; 0033 } 0034 if (mAccountName.isEmpty()) { 0035 qCWarning(RUQOLA_LOG) << "account name is empty. It's a bug"; 0036 Q_EMIT fileLanguagesParseFailed(); // Need to load commandlist 0037 return; 0038 } 0039 if (mServerVersion.isEmpty()) { 0040 qCWarning(RUQOLA_LOG) << "serverVersion is empty. It's a bug"; 0041 Q_EMIT fileLanguagesParseFailed(); // Need to load commandlist 0042 return; 0043 } 0044 if (QFileInfo::exists(storedFileName())) { 0045 parseLanguageFile(); 0046 } else { 0047 auto job = new DownloadAppsLanguagesJob(this); 0048 job->setServerUrl(serverUrl); 0049 connect(job, &DownloadAppsLanguagesJob::fileDownloaded, this, &DownloadAppsLanguagesManager::slotFileDownloaded); 0050 job->start(); 0051 } 0052 } 0053 0054 void DownloadAppsLanguagesManager::slotFileDownloaded(const QByteArray &data) 0055 { 0056 QFile f(storedFileName()); 0057 if (f.open(QIODevice::WriteOnly)) { 0058 QTextStream out(&f); 0059 out << data; 0060 f.close(); 0061 } 0062 parseLanguageFile(); 0063 } 0064 0065 void DownloadAppsLanguagesManager::parseLanguageFile() 0066 { 0067 DownloadAppsLanguagesParser parser; 0068 parser.setFilename(storedFileName()); 0069 if (parser.parse()) { 0070 mLanguageMap = parser.map(); 0071 mFileParsed = true; 0072 Q_EMIT fileLanguagesParseSuccess(); 0073 } else { 0074 Q_EMIT fileLanguagesParseFailed(); 0075 } 0076 } 0077 0078 QString DownloadAppsLanguagesManager::serverVersion() const 0079 { 0080 return mServerVersion; 0081 } 0082 0083 void DownloadAppsLanguagesManager::setServerVersion(const QString &serverVersion) 0084 { 0085 mServerVersion = serverVersion; 0086 } 0087 0088 QString DownloadAppsLanguagesManager::accountName() const 0089 { 0090 return mAccountName; 0091 } 0092 0093 void DownloadAppsLanguagesManager::setAccountName(const QString &accountName) 0094 { 0095 mAccountName = accountName; 0096 } 0097 0098 bool DownloadAppsLanguagesManager::fileParsed() const 0099 { 0100 return mFileParsed; 0101 } 0102 0103 QString DownloadAppsLanguagesManager::translatedString(const QString &language, const QString &id) 0104 { 0105 if (!mFileParsed) { 0106 qCWarning(RUQOLA_LOG) << "language file is not parsed yet!"; 0107 return {}; 0108 } 0109 QMap<QString, DownloadAppsLanguagesInfo>::const_iterator i = mLanguageMap.constBegin(); 0110 while (i != mLanguageMap.constEnd()) { 0111 if (id.contains(i.key())) { 0112 const DownloadAppsLanguagesInfo info = i.value(); 0113 const QMap<QString, QMap<QString, QString>> mapLangId = info.languageMap(); 0114 QMap<QString, QString> mapId = mapLangId.value(language); 0115 if (mapId.isEmpty()) { 0116 mapId = mapLangId.value(QStringLiteral("en")); 0117 if (mapId.isEmpty()) { 0118 return {}; 0119 } 0120 } 0121 return mapId.value(id); 0122 } 0123 ++i; 0124 } 0125 return {}; 0126 } 0127 0128 #include "moc_downloadappslanguagesmanager.cpp"