@@ -410,7 +410,7 @@ func adjustThemeFallback() error {
410410 }
411411 copyThemeFiles (themeInputDir , themeOutputDir )
412412
413- bgImg , err := loadBackgroundImage ()
413+ bgImg , themeBgImg , err := loadV25BackgroundImage ()
414414 if err != nil {
415415 return err
416416 }
@@ -419,6 +419,18 @@ func adjustThemeFallback() error {
419419 if err != nil {
420420 return err
421421 }
422+ if themeBgImg != nil {
423+ err = saveJpeg (themeBgImg , filepath .Join (themeOutputDir , "background_in_theme.jpg" ))
424+ if err != nil {
425+ return err
426+ }
427+ } else {
428+ _ , err = copyFile (filepath .Join (themeOutputDir , "background.jpg" ),
429+ filepath .Join (themeOutputDir , "background_in_theme.jpg" ))
430+ if err != nil {
431+ return err
432+ }
433+ }
422434
423435 themeFile := filepath .Join (themeInputDir , "theme.txt.tpl" )
424436 theme , err := tt .ParseThemeFile (themeFile )
@@ -476,6 +488,80 @@ func adjustThemeFallback() error {
476488 return err
477489}
478490
491+ // getSystemNameFromOSVersionFile parses the /etc/os-version file and returns the
492+ // value of SystemName,which is used to determine whether it is a community version.
493+ func getSystemNameFromOSVersionFile (filePath string ) (string , error ) {
494+ file , err := os .Open (filePath )
495+ if err != nil {
496+ return "" , err
497+ }
498+ defer file .Close ()
499+
500+ var systemName string
501+ scanner := bufio .NewScanner (file )
502+ for scanner .Scan () {
503+ line := scanner .Text ()
504+ if strings .HasPrefix (line , "SystemName=" ) {
505+ parts := strings .SplitN (line , "=" , 2 )
506+ if len (parts ) == 2 {
507+ systemName = parts [1 ]
508+ break
509+ }
510+ }
511+ }
512+
513+ if err := scanner .Err (); err != nil {
514+ return "" , err
515+ }
516+
517+ return systemName , nil
518+ }
519+
520+ // The v25 theme has 2 background images
521+ func loadV25BackgroundImage () (image.Image , image.Image , error ) {
522+ img , err := loadImage (filepath .Join (optThemeOutputDir , themeNameNormal , "background_source" ))
523+ if err == nil {
524+ return img , nil , nil
525+ }
526+ logger .Warning ("failed to load image background_source:" , err )
527+
528+ systemName , err := getSystemNameFromOSVersionFile ("/etc/os-version" )
529+ if err != nil || systemName == "" {
530+ logger .Warningf ("error get systemName %s: %v\n " , systemName , err )
531+ return nil , nil , err
532+ }
533+
534+ var backgroundFilename , themeBackgroundFilename string
535+ if strings .Contains (strings .ToLower (systemName ), "deepin" ) {
536+ backgroundFilename = "deepin_background.jpg"
537+ themeBackgroundFilename = "deepin_background_in_theme.jpg"
538+ } else {
539+ backgroundFilename = "uos_background.jpg"
540+ themeBackgroundFilename = "uos_background_in_theme.jpg"
541+ }
542+
543+ backgroundFile := filepath .Join (optThemeInputDir , themeNameFallback , backgroundFilename )
544+ themeBackgroundFile := filepath .Join (optThemeInputDir , themeNameFallback , themeBackgroundFilename )
545+ img , err = loadImage (backgroundFile )
546+ if err == nil {
547+ cmdImg , err := loadImage (themeBackgroundFile )
548+ if err == nil {
549+ return img , cmdImg , nil
550+ }
551+ logger .Warning (err )
552+ } else {
553+ logger .Warning (err )
554+ }
555+
556+ originDesktopImageFile := filepath .Join (optThemeInputDir , themeNameNormal , "background.origin.jpg" )
557+ img , err = loadImage (originDesktopImageFile )
558+ if err != nil {
559+ logger .Warning (err )
560+ return nil , nil , err
561+ }
562+ return img , nil , nil
563+ }
564+
479565func main () {
480566 flag .Parse ()
481567 if optVersion {
0 commit comments