11# SPDX-License-Identifier: MIT
2- import base64 , plistlib , struct , subprocess , logging
2+ import base64 , plistlib , struct , subprocess , logging , json
33
44from util import *
55
@@ -82,6 +82,17 @@ def fetch(self):
8282 if consoleuser != "_mbsetupuser" :
8383 self .login_user = consoleuser
8484
85+ self .sros_full_ver = "0"
86+
87+ base = "/System/Volumes/iSCPreboot/SystemRecovery"
88+ for p in os .listdir (base ):
89+ try :
90+ v = self .get_restore_version (os .path .join (base , p , "RestoreVersion.plist" ))
91+ except Exception :
92+ continue
93+ if split_ver (v ) > split_ver (self .sros_full_ver ):
94+ self .sros_full_ver = v
95+
8596 def get_nvram_data (self ):
8697 nvram_data = subprocess .run (["nvram" , "-p" ],
8798 stdout = subprocess .PIPE , check = True ).stdout
@@ -129,12 +140,13 @@ def show(self):
129140 p_info (f" Default boot VGID: { col ()} { self .default_boot } " )
130141 p_info (f" Boot mode: { col ()} { self .boot_mode } " )
131142 p_info (f" OS version: { col ()} { self .macos_ver } ({ self .macos_build } )" )
132- p_info (f" SFR version: { col ()} { self .sfr_full_ver } " )
133- p_info (f" System rOS version: { col ()} { self .sfr_ver } ({ self .sfr_build } )" )
143+ p_info (f" Main firmware version: { col ()} { self .sfr_ver } ({ self .sfr_build } )" )
134144 if self .fsfr_ver :
135- p_info (f" Fallback rOS version: { col ()} { self .fsfr_ver } ({ self .fsfr_build } )" )
145+ p_info (f" Fallback firmware version: { col ()} { self .fsfr_ver } ({ self .fsfr_build } )" )
136146 else :
137- p_info (f" No Fallback rOS" )
147+ p_info (f" No Fallback System Firmware / rOS" )
148+ p_info (f" SFR version: { col ()} { self .sfr_full_ver } " )
149+ p_info (f" SystemRecovery version: { col ()} { self .sros_full_ver } " )
138150 p_info (f" Login user: { col ()} { self .login_user } " )
139151
140152 def get_child (self , obj , name ):
@@ -155,3 +167,16 @@ def get_str(self, val):
155167 def get_int (self , val ):
156168 return struct .unpack ("<I" , val )[0 ]
157169
170+ def get_refresh_rate (self ):
171+ j = subprocess .run (["system_profiler" , "SPDisplaysDataType" , "-json" ],
172+ stdout = subprocess .PIPE , check = True ).stdout
173+
174+ main_display = None
175+ for a in json .loads (j )["SPDisplaysDataType" ]:
176+ for disp in a .get ("spdisplays_ndrvs" , []):
177+ if disp ["_name" ] != "Color LCD" :
178+ continue
179+ assert main_display is None
180+ main_display = disp
181+
182+ return main_display ["_spdisplays_resolution" ].split ()[- 1 ]
0 commit comments