Skip to content

Commit 0aa7e8c

Browse files
committed
feat: add GenLocale method and improve locale state handling
1. Added new GenLocale method to allow generating locale without changing system language 2. Improved locale state tracking with new flags LocaleStateSetLang and LocaleStateGenLocale 3. Refactored generateLocale to doGenerateLocale for better code reuse 4. Enhanced state checking logic in SetLocale to use bitwise operations 5. Added proper state management during locale generation operations The changes allow more granular control over locale operations and better state tracking when performing different types of locale changes. The new GenLocale method provides a way to generate locale files without changing the system language, which can be useful for system maintenance or preparation. feat: 添加 GenLocale 方法并改进区域设置状态处理 1. 新增 GenLocale 方法允许在不更改系统语言的情况下生成区域设置 2. 使用 LocaleStateSetLang 和 LocaleStateGenLocale 标志改进区域设置状态 跟踪 3. 重构 generateLocale 为 doGenerateLocale 以提高代码复用性 4. 在 SetLocale 中增强状态检查逻辑以使用位运算 5. 添加在区域设置生成操作期间的正确状态管理 这些变更允许对区域设置操作进行更精细的控制,并在执行不同类型的区域设置更 改时提供更好的状态跟踪。新的 GenLocale 方法提供了一种在不更改系统语言的 情况下生成区域设置文件的方式,这对于系统维护或准备工作非常有用。 pms: TASK-378739
1 parent 32e84e6 commit 0aa7e8c

3 files changed

Lines changed: 50 additions & 4 deletions

File tree

langselector1/exported_methods_auto.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

langselector1/locale.go

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ const (
5959
// Locale 更改状态:正在修改中
6060
LocaleStateChanging = 1
6161

62+
// 正在设置语言
63+
LocaleStateSetLang = 1 << 1
64+
// 正在locale-gen
65+
LocaleStateGenLocale = 1 << 2
66+
6267
gsSchemaLocale = "com.deepin.dde.locale"
6368
gsKeyLocales = "locales"
6469
)
@@ -388,7 +393,7 @@ func (lang *LangSelector) setLocale(locale string) {
388393
// begin
389394
lang.PropsMu.Lock()
390395
oldLocale := lang.CurrentLocale
391-
lang.setPropLocaleState(LocaleStateChanging)
396+
lang.setPropLocaleState(LocaleStateChanging | LocaleStateSetLang)
392397
lang.setPropCurrentLocale(locale)
393398
lang.PropsMu.Unlock()
394399

@@ -415,7 +420,7 @@ func (lang *LangSelector) setLocale(locale string) {
415420
}
416421

417422
// generate locale
418-
err = lang.generateLocale(locale)
423+
err = lang.doGenerateLocale(locale)
419424
if err != nil {
420425
logger.Warning("failed to generate locale:", err)
421426
lang.setLocaleFailed(oldLocale)
@@ -466,6 +471,29 @@ func (lang *LangSelector) setLocale(locale string) {
466471
lang.PropsMu.Unlock()
467472
}
468473

474+
func (lang *LangSelector) genLocale(locale string) {
475+
lang.PropsMu.Lock()
476+
lang.setPropLocaleState(LocaleStateChanging | LocaleStateGenLocale)
477+
lang.PropsMu.Unlock()
478+
479+
err := lang.doGenerateLocale(locale)
480+
if err != nil {
481+
logger.Warning("failed to generate locale:", err)
482+
// restore state on failure
483+
lang.PropsMu.Lock()
484+
lang.setPropLocaleState(LocaleStateChanged)
485+
lang.PropsMu.Unlock()
486+
return
487+
} else {
488+
logger.Debug("generate locale success")
489+
}
490+
491+
// end
492+
lang.PropsMu.Lock()
493+
lang.setPropLocaleState(LocaleStateChanged)
494+
lang.PropsMu.Unlock()
495+
}
496+
469497
func syncUserLocale(locale string) error {
470498
systemConn, err := dbus.SystemBus()
471499
if err != nil {
@@ -487,7 +515,7 @@ func syncUserLocale(locale string) error {
487515

488516
var errSignalBodyInvalid = errors.New("signal body is invalid")
489517

490-
func (lang *LangSelector) generateLocale(locale string) error {
518+
func (lang *LangSelector) doGenerateLocale(locale string) error {
491519
successMatchRule := dbusutil.NewMatchRuleBuilder().ExtSignal("/org/deepin/dde/LocaleHelper1", "org.deepin.dde.LocaleHelper1", "Success").Build()
492520
err := successMatchRule.AddTo(lang.systemBus)
493521
if err != nil {

langselector1/locale_ifc.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (lang *LangSelector) SetLocale(locale string) *dbus.Error {
4040

4141
lang.PropsMu.Lock()
4242
defer lang.PropsMu.Unlock()
43-
if lang.LocaleState == LocaleStateChanging || lang.CurrentLocale == locale {
43+
if (lang.LocaleState&LocaleStateChanging != 0) || lang.CurrentLocale == locale {
4444
return nil
4545
}
4646
_ = lang.addLocale(locale)
@@ -114,3 +114,16 @@ func (lang *LangSelector) DeleteLocale(locale string) *dbus.Error {
114114
err := lang.deleteLocale(locale)
115115
return dbusutil.ToError(err)
116116
}
117+
118+
func (lang *LangSelector) GenLocale(locale string) *dbus.Error {
119+
lang.service.DelayAutoQuit()
120+
121+
lang.PropsMu.Lock()
122+
defer lang.PropsMu.Unlock()
123+
if lang.LocaleState&LocaleStateChanging != 0 {
124+
return nil
125+
}
126+
logger.Debugf("genLocale %q", locale)
127+
go lang.genLocale(locale)
128+
return nil
129+
}

0 commit comments

Comments
 (0)