diff --git a/src/apps/haikudepot/model/LanguageModel.cpp b/src/apps/haikudepot/model/LanguageModel.cpp index 30263cd2c6..8c602bdc49 100644 --- a/src/apps/haikudepot/model/LanguageModel.cpp +++ b/src/apps/haikudepot/model/LanguageModel.cpp @@ -39,7 +39,7 @@ LanguageModel::LanguageModel() { const Language defaultLanguage = _DeriveDefaultLanguage(); fSupportedLanguages.Add(LanguageRef( - new Language(defaultLanguage))); + new Language(defaultLanguage), true)); _SetPreferredLanguage(defaultLanguage); } diff --git a/src/apps/haikudepot/server/ProcessCoordinatorFactory.cpp b/src/apps/haikudepot/server/ProcessCoordinatorFactory.cpp index eeeec2f614..c715802978 100644 --- a/src/apps/haikudepot/server/ProcessCoordinatorFactory.cpp +++ b/src/apps/haikudepot/server/ProcessCoordinatorFactory.cpp @@ -7,6 +7,7 @@ #include "ProcessCoordinatorFactory.h" #include +#include #include #include @@ -78,6 +79,8 @@ ProcessCoordinatorFactory::CreateBulkLoadCoordinator( status_t repoNamesResult = roster.GetRepositoryNames(repoNames); if (repoNamesResult == B_OK) { + AutoLocker locker(model->Lock()); + for (int32 i = 0; i < repoNames.CountStrings(); i++) { ProcessNode* processNode = new ProcessNode( new ServerPkgDataUpdateProcess( diff --git a/src/apps/haikudepot/server/ServerReferenceDataUpdateProcess.cpp b/src/apps/haikudepot/server/ServerReferenceDataUpdateProcess.cpp index ceaa4849ea..622fcfb2a5 100644 --- a/src/apps/haikudepot/server/ServerReferenceDataUpdateProcess.cpp +++ b/src/apps/haikudepot/server/ServerReferenceDataUpdateProcess.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -63,6 +64,7 @@ BString ServerReferenceDataUpdateProcess::UrlPathComponent() { BString result; + AutoLocker locker(fModel->Lock()); result.SetToFormat("/__reference/all-%s.json.gz", fModel->Language().PreferredLanguage().Code()); return result; @@ -128,7 +130,10 @@ ServerReferenceDataUpdateProcess::_ProcessNaturalLanguages( naturalLanguage->IsPopular()))); } - fModel->Language().AddSupportedLanguages(result); + { + AutoLocker locker(fModel->Lock()); + fModel->Language().AddSupportedLanguages(result); + } printf("[%s] did add %" B_PRId32 " supported languages\n", Name(), result.CountItems()); diff --git a/src/apps/haikudepot/server/ServerRepositoryDataUpdateProcess.cpp b/src/apps/haikudepot/server/ServerRepositoryDataUpdateProcess.cpp index ebc6ffa9f3..e7395e9275 100644 --- a/src/apps/haikudepot/server/ServerRepositoryDataUpdateProcess.cpp +++ b/src/apps/haikudepot/server/ServerRepositoryDataUpdateProcess.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -178,6 +179,7 @@ BString ServerRepositoryDataUpdateProcess::UrlPathComponent() { BString result; + AutoLocker locker(fModel->Lock()); result.SetToFormat("/__repository/all-%s.json.gz", fModel->Language().PreferredLanguage().Code()); return result; diff --git a/src/apps/haikudepot/ui/RatePackageWindow.cpp b/src/apps/haikudepot/ui/RatePackageWindow.cpp index aff723798c..e4a7c4aba4 100644 --- a/src/apps/haikudepot/ui/RatePackageWindow.cpp +++ b/src/apps/haikudepot/ui/RatePackageWindow.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -191,7 +192,7 @@ RatePackageWindow::RatePackageWindow(BWindow* parent, BRect frame, fTextEditor(new TextEditor(), true), fRating(RATING_NONE), fRatingDeterminate(false), - fCommentLanguageCode(fModel.Language().PreferredLanguage().Code()), + fCommentLanguageCode(LANGUAGE_DEFAULT_CODE), fWorkerThread(-1) { AddToSubset(parent); @@ -242,17 +243,23 @@ RatePackageWindow::RatePackageWindow(BWindow* parent, BRect frame, fStability = fStabilityCodes.ItemAt(0).Name(); stabilityMenu->ItemAt(0)->SetMarked(true); - // Construct languages popup - BPopUpMenu* languagesMenu = new BPopUpMenu(B_TRANSLATE("Language")); - fCommentLanguageField = new BMenuField("language", - B_TRANSLATE("Comment language:"), languagesMenu); - LanguageMenuUtils::AddLanguagesToMenu( - fModel.Language().SupportedLanguages(), - languagesMenu); - languagesMenu->SetTargetForItems(this); - LanguageMenuUtils::MarkLanguageInMenu(fCommentLanguageCode, - languagesMenu); + { + AutoLocker locker(fModel.Lock()); + fCommentLanguageCode = fModel.Language().PreferredLanguage().Code(); + + // Construct languages popup + BPopUpMenu* languagesMenu = new BPopUpMenu(B_TRANSLATE("Language")); + fCommentLanguageField = new BMenuField("language", + B_TRANSLATE("Comment language:"), languagesMenu); + + LanguageMenuUtils::AddLanguagesToMenu( + fModel.Language().SupportedLanguages(), + languagesMenu); + languagesMenu->SetTargetForItems(this); + LanguageMenuUtils::MarkLanguageInMenu(fCommentLanguageCode, + languagesMenu); + } fRatingActiveCheckBox = new BCheckBox("rating active", B_TRANSLATE("Other users can see this rating"), diff --git a/src/apps/haikudepot/ui/UserLoginWindow.cpp b/src/apps/haikudepot/ui/UserLoginWindow.cpp index a225540bc5..6b9eea3e92 100644 --- a/src/apps/haikudepot/ui/UserLoginWindow.cpp +++ b/src/apps/haikudepot/ui/UserLoginWindow.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -47,7 +48,7 @@ UserLoginWindow::UserLoginWindow(BWindow* parent, BRect frame, Model& model) B_FLOATING_WINDOW_LOOK, B_FLOATING_SUBSET_WINDOW_FEEL, B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS | B_NOT_RESIZABLE | B_NOT_ZOOMABLE), - fPreferredLanguageCode(model.Language().PreferredLanguage().Code()), + fPreferredLanguageCode(LANGUAGE_DEFAULT_CODE), fModel(model), fMode(NONE), fWorkerThread(-1) @@ -67,20 +68,24 @@ UserLoginWindow::UserLoginWindow(BWindow* parent, BRect frame, Model& model) "", new BMessage(MSG_VALIDATE_FIELDS)); fRepeatPasswordField->TextView()->HideTyping(true); - // Construct languages popup - BPopUpMenu* languagesMenu = new BPopUpMenu(B_TRANSLATE("Language")); - fLanguageCodeField = new BMenuField("language", - B_TRANSLATE("Preferred language:"), languagesMenu); + { + AutoLocker locker(fModel.Lock()); + fPreferredLanguageCode = fModel.Language().PreferredLanguage().Code(); + // Construct languages popup + BPopUpMenu* languagesMenu = new BPopUpMenu(B_TRANSLATE("Language")); + fLanguageCodeField = new BMenuField("language", + B_TRANSLATE("Preferred language:"), languagesMenu); - LanguageMenuUtils::AddLanguagesToMenu( - fModel.Language().SupportedLanguages(), - languagesMenu); - languagesMenu->SetTargetForItems(this); + LanguageMenuUtils::AddLanguagesToMenu( + fModel.Language().SupportedLanguages(), + languagesMenu); + languagesMenu->SetTargetForItems(this); - printf("using preferred language code [%s]\n", - fPreferredLanguageCode.String()); - LanguageMenuUtils::MarkLanguageInMenu(fPreferredLanguageCode, - languagesMenu); + printf("using preferred language code [%s]\n", + fPreferredLanguageCode.String()); + LanguageMenuUtils::MarkLanguageInMenu(fPreferredLanguageCode, + languagesMenu); + } fEmailField = new BTextControl(B_TRANSLATE("Email address:"), "", NULL); fCaptchaView = new BitmapView("captcha view"); diff --git a/src/apps/haikudepot/util/LanguageMenuUtils.cpp b/src/apps/haikudepot/util/LanguageMenuUtils.cpp index f22e468aeb..b2289efac4 100644 --- a/src/apps/haikudepot/util/LanguageMenuUtils.cpp +++ b/src/apps/haikudepot/util/LanguageMenuUtils.cpp @@ -23,7 +23,7 @@ LanguageMenuUtils::AddLanguagesToMenu( const LanguageList& languages, BMenu* menu) { - if (languages.IsEmpty()) + if (languages.IsEmpty() && Logger::IsInfoEnabled()) printf("there are no languages defined\n"); int32 addedPopular = LanguageMenuUtils::_AddLanguagesToMenu(