| 266 | } // namespace |
| 267 | |
| 268 | void TranslationsModel::reloadLocalFiles() |
| 269 | { |
| 270 | QMap<QString, Language> languages = { { defaultLangCode, Language(defaultLangCode) } }; |
| 271 | |
| 272 | readIndex(d->m_dir.absoluteFilePath("index_v2.json"), languages); |
| 273 | auto entries = d->m_dir.entryInfoList({ "mmc_*.qm", "*.po" }, QDir::Files | QDir::NoDotAndDotDot); |
| 274 | for (auto& entry : entries) { |
| 275 | auto completeSuffix = entry.completeSuffix(); |
| 276 | QString langCode; |
| 277 | FileType fileType = FileType::NONE; |
| 278 | if (completeSuffix == "qm") { |
| 279 | langCode = entry.baseName().remove(0, 4); |
| 280 | fileType = FileType::QM; |
| 281 | } else if (completeSuffix == "po") { |
| 282 | langCode = entry.baseName(); |
| 283 | fileType = FileType::PO; |
| 284 | } else { |
| 285 | continue; |
| 286 | } |
| 287 | |
| 288 | auto langIter = languages.find(langCode); |
| 289 | if (langIter != languages.end()) { |
| 290 | auto& language = *langIter; |
| 291 | if (int(fileType) > int(language.localFileType)) { |
| 292 | language.localFileType = fileType; |
| 293 | } |
| 294 | } else { |
| 295 | if (fileType == FileType::PO) { |
| 296 | Language localFound(langCode); |
| 297 | localFound.localFileType = FileType::PO; |
| 298 | languages.insert(langCode, localFound); |
| 299 | } |
| 300 | } |
| 301 | } |
| 302 | |
| 303 | // changed and removed languages |
| 304 | for (auto iter = d->m_languages.begin(); iter != d->m_languages.end();) { |
| 305 | auto& language = *iter; |
| 306 | auto row = iter - d->m_languages.begin(); |
| 307 | |
| 308 | auto updatedLanguageIter = languages.find(language.key); |
| 309 | if (updatedLanguageIter != languages.end()) { |
| 310 | if (language.isIdenticalTo(*updatedLanguageIter)) { |
| 311 | languages.remove(language.key); |
| 312 | } else { |
| 313 | language.apply(*updatedLanguageIter); |
| 314 | emit dataChanged(index(row), index(row)); |
| 315 | languages.remove(language.key); |
| 316 | } |
| 317 | iter++; |
| 318 | } else { |
| 319 | beginRemoveRows(QModelIndex(), row, row); |
| 320 | iter = d->m_languages.erase(iter); |
| 321 | endRemoveRows(); |
| 322 | } |
| 323 | } |
| 324 | // added languages |
| 325 | if (languages.isEmpty()) { |
nothing calls this directly
no test coverage detected