| 256 | }; |
| 257 | |
| 258 | std::pair<Languages, Languages> PrepareLists() { |
| 259 | const auto projId = [](const Language &language) { |
| 260 | return language.id; |
| 261 | }; |
| 262 | const auto current = Lang::LanguageIdOrDefault(Lang::Id()); |
| 263 | auto official = Lang::CurrentCloudManager().languageList(); |
| 264 | auto recent = Local::readRecentLanguages(); |
| 265 | ranges::stable_partition(recent, [&](const Language &language) { |
| 266 | return (language.id == current); |
| 267 | }); |
| 268 | if (recent.empty() || recent.front().id != current) { |
| 269 | if (ranges::find(official, current, projId) == end(official)) { |
| 270 | const auto generate = [&] { |
| 271 | const auto name = (current == "#custom") |
| 272 | ? "Custom lang pack" |
| 273 | : Lang::GetInstance().name(); |
| 274 | return Language{ |
| 275 | current, |
| 276 | QString(), |
| 277 | QString(), |
| 278 | name, |
| 279 | Lang::GetInstance().nativeName() |
| 280 | }; |
| 281 | }; |
| 282 | recent.insert(begin(recent), generate()); |
| 283 | } |
| 284 | } |
| 285 | auto i = begin(official), e = end(official); |
| 286 | const auto remover = [&](const Language &language) { |
| 287 | auto k = ranges::find(i, e, language.id, projId); |
| 288 | if (k == e) { |
| 289 | return false; |
| 290 | } |
| 291 | for (; k != i; --k) { |
| 292 | std::swap(*k, *(k - 1)); |
| 293 | } |
| 294 | ++i; |
| 295 | return true; |
| 296 | }; |
| 297 | recent.erase(ranges::remove_if(recent, remover), end(recent)); |
| 298 | return { std::move(recent), std::move(official) }; |
| 299 | } |
| 300 | |
| 301 | Rows::Rows( |
| 302 | QWidget *parent, |
no test coverage detected