1+ use std:: {
2+ fs,
3+ path:: PathBuf ,
4+ process:: { self , Command , Stdio } ,
5+ } ;
6+
7+ use anyhow:: { Result , anyhow} ;
18use clap:: Parser ;
29
310use crate :: {
4- foundation:: { create_temporary_name, kdeglobals:: parse_config, registry:: HkeyCollection } ,
11+ foundation:: {
12+ create_temporary_name, get_prefix, kdeglobals:: parse_config, registry:: HkeyCollection ,
13+ } ,
514 theme:: { create_classic_theme_registry, create_colors_registry, create_dark_mode_registry} ,
615} ;
716
@@ -11,11 +20,37 @@ pub mod theme;
1120/// Breezify Wine with ease
1221#[ derive( Parser , Debug ) ]
1322#[ command( version, about) ]
14- struct App { }
23+ struct App {
24+ prefix : Option < PathBuf > ,
25+ }
1526
1627fn main ( ) {
17- let _name = create_temporary_name ( "reg" ) . unwrap ( ) ;
28+ match run ( App :: parse ( ) ) {
29+ Ok ( code) => process:: exit ( code) ,
30+ Err ( err) => {
31+ eprintln ! ( "Error: {err}" ) ;
32+ process:: exit ( 1 ) ;
33+ }
34+ }
35+ }
1836
37+ fn run ( app : App ) -> Result < i32 > {
38+ let prefix = app
39+ . prefix
40+ . or_else ( || get_prefix ( ) . ok ( ) )
41+ . ok_or ( anyhow ! ( "Prefix can't be specified" ) ) ?;
42+ if !fs:: exists ( & prefix) ? {
43+ return Err ( anyhow ! ( "Prefix does not exists" ) ) ;
44+ }
45+
46+ let c = prefix. join ( "dosdevices/c:" ) ;
47+ if !fs:: exists ( & c) ? {
48+ return Err ( anyhow ! ( "Wine is not initialized" ) ) ;
49+ }
50+
51+ let name = c. join (
52+ create_temporary_name ( "reg" ) . or_else ( |_| Err ( anyhow ! ( "Can't generate temporary name" ) ) ) ?,
53+ ) ;
1954 let config = parse_config ( ) . unwrap ( ) ;
2055 let jar = HkeyCollection ( vec ! [
2156 create_classic_theme_registry( ) ,
@@ -28,5 +63,15 @@ fn main() {
2863 create_colors_registry( & config) ,
2964 ] ) ;
3065
31- println ! ( "{}" , jar. to_string( ) ) ;
66+ fs:: write ( & name, jar. to_string ( ) ) ?;
67+ let status = Command :: new ( "wine" )
68+ . env ( "WINEPREFIX" , prefix)
69+ . stdin ( Stdio :: inherit ( ) )
70+ . stdout ( Stdio :: inherit ( ) )
71+ . stderr ( Stdio :: inherit ( ) )
72+ . arg ( "regedit" )
73+ . arg ( & name)
74+ . status ( ) ?;
75+
76+ Ok ( status. code ( ) . unwrap_or ( 0 ) )
3277}
0 commit comments