Skip to content

Commit

Permalink
Improved program flow in program path provisioning
Browse files Browse the repository at this point in the history
  • Loading branch information
thatsIch committed Dec 12, 2016
1 parent bc74d09 commit e48ddef
Showing 1 changed file with 17 additions and 61 deletions.
78 changes: 17 additions & 61 deletions path/program_path_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,100 +21,56 @@ def _get_rainmeter_path_from_default_path():


def _get_rainmeter_registry_key():
try:
return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Rainmeter")
except FileNotFoundError:
import sys

is_64bits = sys.maxsize > 2**32
if is_64bits:
other_view_flag = winreg.KEY_WOW64_32KEY
else:
other_view_flag = winreg.KEY_WOW64_64KEY

try:
return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Rainmeter", access=winreg.KEY_READ | other_view_flag)
except FileNotFoundError:
"""
We really could not find the key in both views.
"""
return None
"""
throws FileNotFoundException if Software\WOW6432Node\Rainmeter does not exist
not much we can do to handle that
"""
return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Rainmeter")


def _get_rainmeter_path_from_registry():
"""
Registry
"""
rainmeter_key = _get_rainmeter_registry_key()
if rainmeter_key:
rainmeter_path = winreg.QueryValue(rainmeter_key, None)

return rainmeter_path

# sub_key_size and last_modified not required
# _, value_size, _ = winreg.QueryInfoKey(regkey)
# print("---", value_size)
# print("---", winreg.EnumKey(regkey, 0))
# for entry_index in range(0, entry_size):
# key_name = winreg.EnumKey(regkey, entry_index)
# key = winreg.OpenKey(regkey, key_name)
# try:
# print(winreg.QueryValueEx(key, 'DisplayName')[0])
# except OSError as e:
# print(e)
# pass
# finally:
# key.close()

# keyval = winreg.QueryValueEx(regkey, "Personal")

# for i in range(1024):
# try:
# asubkey_name = winreg.EnumKey(keyval, i)
# asubkey = winreg.OpenKey(keyval, asubkey_name)
# rainmeterpath = winreg.QueryValueEx(asubkey, "DisplayName")
# logger.info(__file__, "get_cached_program_path()", "found rainmeter path through registry: " + rainmeterpath)
# if rainmeterpath:
# return rainmeterpath
# except EnvironmentError:
# break

return None
rainmeter_path = winreg.QueryValue(rainmeter_key, None)

return rainmeter_path


@lru_cache(maxsize=None)
def get_cached_program_path():
# Load setting
settings = sublime.load_settings("Rainmeter.sublime-settings")
rainmeterpath = settings.get("rainmeter_path", None)
rm_path = settings.get("rainmeter_path", None)

# If setting is not set, try default location
if not rainmeterpath:
if not rm_path:
logger.info(
__file__,
"get_cached_program_path()",
"rainmeter_path not found in settings. Trying default location."
)
rainmeterpath = _get_rainmeter_path_from_default_path()
rm_path = _get_rainmeter_path_from_default_path()

# if it is not even specified by default, try using the registry to retrieve the installation path
if not os.path.isdir(rainmeterpath):
rainmeterpath = _get_rainmeter_path_from_registry()
if not os.path.isdir(rm_path):
rm_path = _get_rainmeter_path_from_registry()

# Check if path exists and contains Rainmeter.exe
if not os.path.isdir(rainmeterpath):
if not os.path.isdir(rm_path):
message = "Path to Rainmeter.exe could neither be found in the standard directory nor via registry. Check your \"rainmeter_path\" setting."
logger.info(__file__, "get_cached_program_path()", message)
sublime.error_message(message)
return

# normalize path
rainmeter_exe = os.path.join(rainmeterpath, "Rainmeter.exe")
rainmeter_exe = os.path.join(rm_path, "Rainmeter.exe")
if not os.path.exists(rainmeter_exe):
message = "Rainmeter path was found, but no Rainmeter.exe found. Check if you have correctly installed Rainmeter."
logger.error(__file__, "get_cached_program_path()", message)
sublime.error_message(message)
return

logger.info(__file__, "get_cached_program_path()", "Rainmeter found in " + rainmeterpath)
return rainmeterpath + "\\"
logger.info(__file__, "get_cached_program_path()", "Rainmeter found in " + rm_path)
return rm_path + "\\"

0 comments on commit e48ddef

Please sign in to comment.