22
33package extractor
44
5+ import (
6+ "os"
7+ "path/filepath"
8+ "strings"
9+
10+ "github.com/liteldev/LeviLauncher/internal/utils"
11+ )
12+
513func Init () {}
614
15+ func ensureEmbeddedSO () string {
16+ if len (embeddedLauncherCoreSO ) == 0 {
17+ return ""
18+ }
19+ base := utils .BaseRoot ()
20+ dir := filepath .Join (base , "bin" )
21+ _ = os .MkdirAll (dir , 0755 )
22+ target := filepath .Join (dir , "liblauncher_core.so" )
23+ if fi , err := os .Stat (target ); err == nil && fi .Size () > 0 {
24+ return target
25+ }
26+ tmp := target + ".tmp"
27+ if err := os .WriteFile (tmp , embeddedLauncherCoreSO , 0644 ); err == nil {
28+ if err := os .Rename (tmp , target ); err == nil {
29+ return target
30+ }
31+ _ = os .Remove (tmp )
32+ }
33+ return ""
34+ }
35+
736func MiHoYo (msixvcPath string , outDir string ) (int , string ) {
8- return 1 , "ERR_APPX_INSTALL_UNSUPPORTED_ON_LINUX"
9- }
37+ if strings .TrimSpace (msixvcPath ) == "" || strings .TrimSpace (outDir ) == "" {
38+ return 1 , "ERR_ARGS"
39+ }
40+ if _ , err := os .Stat (msixvcPath ); err != nil {
41+ return 1 , "ERR_MSIXVC_NOT_FOUND"
42+ }
43+ if err := os .MkdirAll (outDir , 0755 ); err != nil {
44+ return 1 , "ERR_CREATE_TARGET_DIR"
45+ }
46+
47+ so := strings .TrimSpace (os .Getenv ("LAUNCHER_CORE_SO" ))
48+ if so == "" {
49+ if p := ensureEmbeddedSO (); p != "" {
50+ so = p
51+ } else {
52+ base := utils .BaseRoot ()
53+ cand := filepath .Join (base , "bin" , "liblauncher_core.so" )
54+ if _ , err := os .Stat (cand ); err == nil {
55+ so = cand
56+ }
57+ }
58+ }
59+ if strings .TrimSpace (so ) == "" {
60+ return 1 , "ERR_SO_NOT_AVAILABLE"
61+ }
62+ if _ , err := os .Stat (so ); err != nil {
63+ return 1 , "ERR_SO_NOT_AVAILABLE"
64+ }
65+ rc , msg := callLauncherCoreSO (so , msixvcPath , outDir )
66+ if rc == 0 {
67+ return 0 , ""
68+ }
69+ if strings .TrimSpace (msg ) == "" {
70+ msg = "ERR_APPX_INSTALL_FAILED"
71+ }
72+ return rc , msg
73+ }
0 commit comments