| 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) |