| OLD | NEW |
| 1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
| 2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| 4 | 4 |
| 5 import os | 5 import os |
| 6 import shutil | 6 import shutil |
| 7 import json |
| 8 import re |
| 7 from StringIO import StringIO | 9 from StringIO import StringIO |
| 10 from glob import glob |
| 8 import subprocess | 11 import subprocess |
| 9 import tempfile | 12 import tempfile |
| 10 from xml.etree import ElementTree | 13 from xml.etree import ElementTree |
| 11 from zipfile import ZipFile | 14 from zipfile import ZipFile |
| 12 | 15 |
| 13 import packager | 16 import packager |
| 14 import packagerChrome | 17 import packagerChrome |
| 15 | 18 |
| 16 MANIFEST = 'appxmanifest.xml' | 19 MANIFEST = 'appxmanifest.xml' |
| 17 ASSETS_DIR = 'Assets' | 20 ASSETS_DIR = 'Assets' |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 if metadata.has_section('bundles'): | 121 if metadata.has_section('bundles'): |
| 119 bundle_tests = devenv and metadata.has_option('general', 'testScripts') | 122 bundle_tests = devenv and metadata.has_option('general', 'testScripts') |
| 120 packagerChrome.create_bundles(params, files, bundle_tests) | 123 packagerChrome.create_bundles(params, files, bundle_tests) |
| 121 | 124 |
| 122 if metadata.has_section('preprocess'): | 125 if metadata.has_section('preprocess'): |
| 123 files.preprocess(metadata.options('preprocess'), {'needsExt': True}) | 126 files.preprocess(metadata.options('preprocess'), {'needsExt': True}) |
| 124 | 127 |
| 125 if metadata.has_section('import_locales'): | 128 if metadata.has_section('import_locales'): |
| 126 packagerChrome.import_locales(params, files) | 129 packagerChrome.import_locales(params, files) |
| 127 | 130 |
| 128 # For some mysterious reasons manifoldjs fails with a server error | 131 # The Windows Store will reject the build unless every translation of the |
| 129 # when building the development build and there is any translation | 132 # product name has been reserved. This is hard till impossible to manage |
| 130 # in az/messages.json for "name_devbuild", however, it works fine | 133 # with community translations, so we don't translate the product name for |
| 131 # if we use the more specific language code az-latn. | 134 # Microsoft Edge. Furthermore, manifoldjs fails with a server error if the |
| 132 az_translation = files.pop('_locales/az/messages.json', None) | 135 # product name is tranlated into Azerbajani. |
| 133 if az_translation is not None: | 136 data = json.loads(files['_locales/{}/messages.json'.format(defaultLocale)]) |
| 134 files['_locales/az-latn/messages.json'] = az_translation | 137 files['manifest.json'] = re.sub( |
| 135 | 138 r'__MSG_(name(?:_devbuild)?)__', |
| 136 files['manifest.json'] = packagerChrome.createManifest(params, files) | 139 lambda m: data[m.group(1)]['message'], |
| 140 packagerChrome.createManifest(params, files), |
| 141 ) |
| 137 | 142 |
| 138 if devenv: | 143 if devenv: |
| 139 packagerChrome.add_devenv_requirements(files, metadata, params) | 144 packagerChrome.add_devenv_requirements(files, metadata, params) |
| 140 | 145 |
| 141 zipped = StringIO() | 146 zipped = StringIO() |
| 142 files.zip(zipped) | 147 files.zip(zipped) |
| 143 | 148 |
| 144 zipped.seek(0) | 149 zipped.seek(0) |
| 145 | 150 |
| 146 if devenv: | 151 if devenv: |
| 147 shutil.copyfileobj(zipped, outfile) | 152 shutil.copyfileobj(zipped, outfile) |
| 148 return | 153 return |
| 149 | 154 |
| 150 tmp_dir = tempfile.mkdtemp('adblockplus_package') | 155 tmp_dir = tempfile.mkdtemp('adblockplus_package') |
| 151 try: | 156 try: |
| 152 src_dir = os.path.join(tmp_dir, 'src') | 157 src_dir = os.path.join(tmp_dir, 'src') |
| 153 ext_dir = os.path.join(tmp_dir, 'ext') | 158 ext_dir = os.path.join(tmp_dir, 'ext') |
| 154 | 159 |
| 155 with ZipFile(zipped, 'r') as zip_file: | 160 with ZipFile(zipped, 'r') as zip_file: |
| 156 zip_file.extractall(src_dir) | 161 zip_file.extractall(src_dir) |
| 157 | 162 |
| 158 cmd_env = os.environ.copy() | 163 cmd_env = os.environ.copy() |
| 159 cmd_env['SRC_FOLDER'] = src_dir | 164 cmd_env['SRC_FOLDER'] = src_dir |
| 160 cmd_env['EXT_FOLDER'] = ext_dir | 165 cmd_env['EXT_FOLDER'] = ext_dir |
| 161 | 166 |
| 162 manifold_folder = os.path.join(ext_dir, 'MSGname', 'edgeextension') | |
| 163 manifest_folder = os.path.join(manifold_folder, 'manifest') | |
| 164 asset_folder = os.path.join(manifest_folder, ASSETS_DIR) | |
| 165 | |
| 166 # prepare the extension with manifoldjs | 167 # prepare the extension with manifoldjs |
| 167 cmd = ['npm', 'run', '--silent', 'build-edge'] | 168 cmd = ['npm', 'run', '--silent', 'build-edge'] |
| 168 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) | 169 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) |
| 169 | 170 |
| 171 manifold_folder = glob(os.path.join(ext_dir, '*', 'edgeextension'))[0] |
| 172 manifest_folder = os.path.join(manifold_folder, 'manifest') |
| 173 asset_folder = os.path.join(manifest_folder, ASSETS_DIR) |
| 174 |
| 170 # update incomplete appxmanifest | 175 # update incomplete appxmanifest |
| 171 intermediate_manifest = os.path.join(manifest_folder, MANIFEST) | 176 intermediate_manifest = os.path.join(manifest_folder, MANIFEST) |
| 172 update_appx_manifest(intermediate_manifest, baseDir, files, metadata, | 177 update_appx_manifest(intermediate_manifest, baseDir, files, metadata, |
| 173 releaseBuild) | 178 releaseBuild) |
| 174 | 179 |
| 175 # cleanup placeholders, copy actual images | 180 # cleanup placeholders, copy actual images |
| 176 shutil.rmtree(asset_folder) | 181 shutil.rmtree(asset_folder) |
| 177 os.mkdir(asset_folder) | 182 os.mkdir(asset_folder) |
| 178 if metadata.has_section('appx_assets'): | 183 if metadata.has_section('appx_assets'): |
| 179 for name, path in metadata.items('appx_assets'): | 184 for name, path in metadata.items('appx_assets'): |
| 180 path = os.path.join(baseDir, path) | 185 path = os.path.join(baseDir, path) |
| 181 target = os.path.join(asset_folder, name) | 186 target = os.path.join(asset_folder, name) |
| 182 shutil.copyfile(path, target) | 187 shutil.copyfile(path, target) |
| 183 | 188 |
| 184 # package app with manifoldjs | 189 # package app with manifoldjs |
| 185 cmd = ['npm', 'run', '--silent', 'package-edge'] | 190 cmd = ['npm', 'run', '--silent', 'package-edge'] |
| 186 | 191 |
| 187 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) | 192 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) |
| 188 | 193 |
| 189 package = os.path.join(manifold_folder, 'package', | 194 package = os.path.join(manifold_folder, 'package', |
| 190 'edgeExtension.appx') | 195 'edgeExtension.appx') |
| 191 | 196 |
| 192 shutil.copyfile(package, outfile) | 197 shutil.copyfile(package, outfile) |
| 193 finally: | 198 finally: |
| 194 shutil.rmtree(tmp_dir, ignore_errors=True) | 199 shutil.rmtree(tmp_dir, ignore_errors=True) |
| OLD | NEW |