mirror of
https://github.com/yokoffing/Betterfox.git
synced 2026-06-12 15:40:48 +05:30
Improve install.py (#373)
* install.py: add shebang * install.py: remove old version of _get_firefox_version * install.py: search for Firefox installation, including flatpak version * install.py: add option to disable 'Press ENTER to exit' * install.py: fix windows root
This commit is contained in:
+52
-30
@@ -1,3 +1,5 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from os import name, getenv
|
from os import name, getenv
|
||||||
from json import loads
|
from json import loads
|
||||||
@@ -43,23 +45,47 @@ If there's any problems with the script, feel free to mention @Denperidge on Git
|
|||||||
re_find_version = compile(r"mozilla.org/.*?/firefox/(?P<version>[\d.]*?)/", IGNORECASE)
|
re_find_version = compile(r"mozilla.org/.*?/firefox/(?P<version>[\d.]*?)/", IGNORECASE)
|
||||||
re_find_overrides = r"(overrides|prefs).*\n(?P<space>\n)"
|
re_find_overrides = r"(overrides|prefs).*\n(?P<space>\n)"
|
||||||
|
|
||||||
FIREFOX_ROOT = Path.home().joinpath(".mozilla/firefox").absolute() if name != "nt" else Path(getenv("APPDATA") + "/Mozilla/Firefox/").resolve()
|
INSTALLATIONS_TO_CHECK = [
|
||||||
DEFAULT_FIREFOX_INSTALL = Path("C:/Program Files/Mozilla Firefox/" if name == "nt" else "")
|
# windows
|
||||||
|
{
|
||||||
selected_if_backup = None
|
"command": [str(Path("C:/Program Files/Mozilla Firefox/firefox"))],
|
||||||
selected_config = ""
|
"root": Path(getenv("APPDATA") or "").joinpath("Mozilla/Firefox").resolve(),
|
||||||
userjs_path = None
|
},
|
||||||
|
# linux
|
||||||
|
{
|
||||||
|
"command": ["firefox"],
|
||||||
|
"root": Path.home().joinpath(".mozilla/firefox").absolute(),
|
||||||
|
},
|
||||||
|
# flatpak
|
||||||
|
{
|
||||||
|
"command": ["flatpak", "run", "org.mozilla.firefox"],
|
||||||
|
"root": Path.home().joinpath(".var/app/org.mozilla.firefox/.mozilla/firefox").absolute(),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def _get_firefox_version(bin="firefox"):
|
# command is a list, eg. ["firefox"] or ["flatpak", "run", "org.mozilla.firefox"]
|
||||||
try:
|
def _get_firefox_version(command):
|
||||||
ver_string = check_output([bin, "--version"], encoding="UTF-8")
|
ver_string = check_output(command + ["--version"], encoding="UTF-8")
|
||||||
return ver_string[ver_string.rindex(" ")+1:].strip()
|
return ver_string[ver_string.rindex(" ")+1:].strip()
|
||||||
except FileNotFoundError:
|
|
||||||
return _get_firefox_version(str(DEFAULT_FIREFOX_INSTALL.joinpath("firefox")))
|
|
||||||
|
|
||||||
def _get_default_profile_folder():
|
def _get_default_firefox_version_and_root():
|
||||||
config_path = FIREFOX_ROOT.joinpath("profiles.ini")
|
print("Searching for Firefox installation...")
|
||||||
|
for installation in INSTALLATIONS_TO_CHECK:
|
||||||
|
try:
|
||||||
|
print(f" '{" ".join(installation["command"])}': ", end="")
|
||||||
|
version = _get_firefox_version(installation["command"])
|
||||||
|
print("YES")
|
||||||
|
print(f"Root: {installation["root"]}")
|
||||||
|
return version, installation["root"]
|
||||||
|
except Exception:
|
||||||
|
print("no")
|
||||||
|
continue
|
||||||
|
|
||||||
|
raise Exception("Firefox binary not found. Please ensure Firefox is installed and the path is correct.")
|
||||||
|
|
||||||
|
def _get_default_profile_folder(firefox_root):
|
||||||
|
config_path = firefox_root.joinpath("profiles.ini")
|
||||||
|
|
||||||
print(f"Reading {config_path}...")
|
print(f"Reading {config_path}...")
|
||||||
|
|
||||||
@@ -82,7 +108,7 @@ def _get_default_profile_folder():
|
|||||||
break
|
break
|
||||||
|
|
||||||
if path is not None:
|
if path is not None:
|
||||||
return FIREFOX_ROOT.joinpath(path)
|
return firefox_root.joinpath(path)
|
||||||
else:
|
else:
|
||||||
raise Exception("Could not determine default Firefox profile! Exiting...")
|
raise Exception("Could not determine default Firefox profile! Exiting...")
|
||||||
|
|
||||||
@@ -123,16 +149,6 @@ def _get_latest_compatible_release(releases):
|
|||||||
if firefox_version in release["supported"]:
|
if firefox_version in release["supported"]:
|
||||||
return release
|
return release
|
||||||
return None
|
return None
|
||||||
def _get_firefox_version(bin="firefox"):
|
|
||||||
try:
|
|
||||||
ver_string = check_output([bin, "--version"], encoding="UTF-8")
|
|
||||||
return ver_string[ver_string.rindex(" ")+1:].strip()
|
|
||||||
except FileNotFoundError:
|
|
||||||
default_path = str(DEFAULT_FIREFOX_INSTALL.joinpath("firefox"))
|
|
||||||
if bin != default_path: # Avoid infinite recursion
|
|
||||||
return _get_firefox_version(default_path)
|
|
||||||
else:
|
|
||||||
raise Exception("Firefox binary not found. Please ensure Firefox is installed and the path is correct.")
|
|
||||||
|
|
||||||
def backup_profile(src):
|
def backup_profile(src):
|
||||||
dest = f"{src}-backup-{datetime.today().strftime('%Y-%m-%d-%H-%M-%S')}"
|
dest = f"{src}-backup-{datetime.today().strftime('%Y-%m-%d-%H-%M-%S')}"
|
||||||
@@ -176,12 +192,15 @@ def list_releases(releases, only_supported=False, add_index=False):
|
|||||||
print(f"{f'[{i}]' if add_index else ''}{'> ' if supported else ' '}{release['name'].ljust(20)}\t\t\tSupported: {','.join(release['supported'])}")
|
print(f"{f'[{i}]' if add_index else ''}{'> ' if supported else ' '}{release['name'].ljust(20)}\t\t\tSupported: {','.join(release['supported'])}")
|
||||||
i+=1
|
i+=1
|
||||||
|
|
||||||
|
def _press_enter_to_exit(args):
|
||||||
|
if not args.no_wait_for_exit:
|
||||||
|
input("Press ENTER to exit...")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
firefox_version = _get_firefox_version()
|
firefox_version, firefox_root = _get_default_firefox_version_and_root()
|
||||||
selected_release = None
|
|
||||||
|
default_profile_folder = _get_default_profile_folder(firefox_root)
|
||||||
|
|
||||||
default_profile_folder = _get_default_profile_folder()
|
|
||||||
argparser = ArgumentParser(
|
argparser = ArgumentParser(
|
||||||
|
|
||||||
)
|
)
|
||||||
@@ -203,14 +222,17 @@ if __name__ == "__main__":
|
|||||||
modes.add_argument("--list-all", action="store_true", default=False, help=f"List all Betterfox releases")
|
modes.add_argument("--list-all", action="store_true", default=False, help=f"List all Betterfox releases")
|
||||||
modes.add_argument("--interactive", "-i", action="store_true", default=False, help=f"Interactively select Betterfox version")
|
modes.add_argument("--interactive", "-i", action="store_true", default=False, help=f"Interactively select Betterfox version")
|
||||||
|
|
||||||
|
behaviour = argparser.add_argument_group("Script behaviour")
|
||||||
|
behaviour.add_argument("--no-wait-for-exit", "-nwfe", action="store_true", default=False, help="Disable 'Press ENTER to exit...' and exit immediately"),
|
||||||
|
|
||||||
args = argparser.parse_args()
|
args = argparser.parse_args()
|
||||||
|
|
||||||
releases = _get_releases(args.repository_owner, args.repository_name)
|
releases = _get_releases(args.repository_owner, args.repository_name)
|
||||||
|
selected_release = None
|
||||||
|
|
||||||
if args.list or args.list_all:
|
if args.list or args.list_all:
|
||||||
list_releases(releases, args.list)
|
list_releases(releases, args.list)
|
||||||
input("Press ENTER to exit...")
|
_press_enter_to_exit(args)
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
if not args.no_backup:
|
if not args.no_backup:
|
||||||
@@ -261,5 +283,5 @@ if __name__ == "__main__":
|
|||||||
else:
|
else:
|
||||||
print(f"Found no overrides in {args.overrides}")
|
print(f"Found no overrides in {args.overrides}")
|
||||||
|
|
||||||
input("Press ENTER to exit...")
|
_press_enter_to_exit(args)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user