| 1 | 1 | new file mode 100755 | 
| ... | ... | @@ -0,0 +1,39 @@ | 
| 1 | +#!/usr/bin/env python3 | |
| 2 | + | |
| 3 | + | |
| 4 | +import os | |
| 5 | +import sys | |
| 6 | +import configparser | |
| 7 | +import urllib.request | |
| 8 | +import json | |
| 9 | + | |
| 10 | + | |
| 11 | +FIREFOX_PATH  = os.path.expanduser('~/.mozilla/firefox') | |
| 12 | +PROFILES_PATH = os.path.join(FIREFOX_PATH, 'profiles.ini') | |
| 13 | +API_BASE_URL = 'https://services.addons.mozilla.org/api/v4/addons/addon' | |
| 14 | + | |
| 15 | + | |
| 16 | +extension = sys.argv[1] | |
| 17 | + | |
| 18 | + | |
| 19 | +profiles = configparser.ConfigParser() | |
| 20 | +profiles.optionxform = str | |
| 21 | +profiles.read(PROFILES_PATH) | |
| 22 | +for section in profiles.sections(): | |
| 23 | +    if section.startswith('Profile'): | |
| 24 | + profile = dict(profiles.items(section)) | |
| 25 | + if int(profile['Default']): | |
| 26 | + profile_path = profile['Path'] | |
| 27 | +            if int(profile.get('IsRelative', '0')): | |
| 28 | + profile_path = os.path.join(FIREFOX_PATH, profile_path) | |
| 29 | + | |
| 30 | + | |
| 31 | +with urllib.request.urlopen(f'{API_BASE_URL}/{extension}') as response: | |
| 32 | + info = json.loads(response.read()) | |
| 33 | +guid = info['guid'] | |
| 34 | +url = info['current_version']['files'][0]['url'] | |
| 35 | +path = os.path.join(profile_path, 'extensions', f'{guid}.xpi') | |
| 36 | +os.makedirs(os.path.dirname(path), exist_ok=True) | |
| 37 | +if not os.path.exists(path): | |
| 38 | + urllib.request.urlretrieve(url, path) | |
| 39 | + print(extension) |