| 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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 if metadata.has_section('bundles'): | 136 if metadata.has_section('bundles'): |
| 134 bundle_tests = devenv and metadata.has_option('general', 'testScripts') | 137 bundle_tests = devenv and metadata.has_option('general', 'testScripts') |
| 135 packagerChrome.create_bundles(params, files, bundle_tests) | 138 packagerChrome.create_bundles(params, files, bundle_tests) |
| 136 | 139 |
| 137 if metadata.has_section('preprocess'): | 140 if metadata.has_section('preprocess'): |
| 138 files.preprocess(metadata.options('preprocess'), {'needsExt': True}) | 141 files.preprocess(metadata.options('preprocess'), {'needsExt': True}) |
| 139 | 142 |
| 140 if metadata.has_section('import_locales'): | 143 if metadata.has_section('import_locales'): |
| 141 packagerChrome.import_locales(params, files) | 144 packagerChrome.import_locales(params, files) |
| 142 | 145 |
| 143 # For some mysterious reasons manifoldjs fails with a server error | 146 # The Windows Store will reject the build unless every translation of the |
| 144 # when building the development build and there is any translation | 147 # product name has been reserved. This is hard till impossible to manage |
| 145 # in az/messages.json for "name_devbuild", however, it works fine | 148 # with community translations, so we don't translate the product name for |
| 146 # if we use the more specific language code az-latn. | 149 # Microsoft Edge. Furthermore, manifoldjs fails with a server error if the |
| 147 az_translation = files.pop('_locales/az/messages.json', None) | 150 # product name is tranlated into Azerbajani. |
| 148 if az_translation is not None: | 151 data = json.loads(files['_locales/{}/messages.json'.format(defaultLocale)]) |
| 149 files['_locales/az-latn/messages.json'] = az_translation | 152 files['manifest.json'] = re.sub( |
| 150 | 153 r'__MSG_(name(?:_devbuild)?)__', |
| 151 files['manifest.json'] = packagerChrome.createManifest(params, files) | 154 lambda m: data[m.group(1)]['message'], |
| 155 packagerChrome.createManifest(params, files), |
| 156 ) |
| 152 | 157 |
| 153 if devenv: | 158 if devenv: |
| 154 packagerChrome.add_devenv_requirements(files, metadata, params) | 159 packagerChrome.add_devenv_requirements(files, metadata, params) |
| 155 | 160 |
| 156 zipped = StringIO() | 161 zipped = StringIO() |
| 157 files.zip(zipped) | 162 files.zip(zipped) |
| 158 | 163 |
| 159 zipped.seek(0) | 164 zipped.seek(0) |
| 160 | 165 |
| 161 if devenv: | 166 if devenv: |
| 162 shutil.copyfileobj(zipped, outfile) | 167 shutil.copyfileobj(zipped, outfile) |
| 163 return | 168 return |
| 164 | 169 |
| 165 tmp_dir = tempfile.mkdtemp('adblockplus_package') | 170 tmp_dir = tempfile.mkdtemp('adblockplus_package') |
| 166 try: | 171 try: |
| 167 src_dir = os.path.join(tmp_dir, 'src') | 172 src_dir = os.path.join(tmp_dir, 'src') |
| 168 ext_dir = os.path.join(tmp_dir, 'ext') | 173 ext_dir = os.path.join(tmp_dir, 'ext') |
| 169 | 174 |
| 170 with ZipFile(zipped, 'r') as zip_file: | 175 with ZipFile(zipped, 'r') as zip_file: |
| 171 zip_file.extractall(src_dir) | 176 zip_file.extractall(src_dir) |
| 172 | 177 |
| 173 cmd_env = os.environ.copy() | 178 cmd_env = os.environ.copy() |
| 174 cmd_env['SRC_FOLDER'] = src_dir | 179 cmd_env['SRC_FOLDER'] = src_dir |
| 175 cmd_env['EXT_FOLDER'] = ext_dir | 180 cmd_env['EXT_FOLDER'] = ext_dir |
| 176 | 181 |
| 177 manifold_folder = os.path.join(ext_dir, 'MSGname', 'edgeextension') | |
| 178 manifest_folder = os.path.join(manifold_folder, 'manifest') | |
| 179 asset_folder = os.path.join(manifest_folder, ASSETS_DIR) | |
| 180 | |
| 181 # prepare the extension with manifoldjs | 182 # prepare the extension with manifoldjs |
| 182 cmd = ['npm', 'run', '--silent', 'build-edge'] | 183 cmd = ['npm', 'run', '--silent', 'build-edge'] |
| 183 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) | 184 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) |
| 184 | 185 |
| 186 manifold_folder = glob(os.path.join(ext_dir, '*', 'edgeextension'))[0] |
| 187 manifest_folder = os.path.join(manifold_folder, 'manifest') |
| 188 asset_folder = os.path.join(manifest_folder, ASSETS_DIR) |
| 189 |
| 185 # update incomplete appxmanifest | 190 # update incomplete appxmanifest |
| 186 intermediate_manifest = os.path.join(manifest_folder, MANIFEST) | 191 intermediate_manifest = os.path.join(manifest_folder, MANIFEST) |
| 187 update_appx_manifest(intermediate_manifest, baseDir, files, metadata, | 192 update_appx_manifest(intermediate_manifest, baseDir, files, metadata, |
| 188 releaseBuild, buildNum) | 193 releaseBuild, buildNum) |
| 189 | 194 |
| 190 # cleanup placeholders, copy actual images | 195 # cleanup placeholders, copy actual images |
| 191 shutil.rmtree(asset_folder) | 196 shutil.rmtree(asset_folder) |
| 192 os.mkdir(asset_folder) | 197 os.mkdir(asset_folder) |
| 193 if metadata.has_section('appx_assets'): | 198 if metadata.has_section('appx_assets'): |
| 194 for name, path in metadata.items('appx_assets'): | 199 for name, path in metadata.items('appx_assets'): |
| 195 path = os.path.join(baseDir, path) | 200 path = os.path.join(baseDir, path) |
| 196 target = os.path.join(asset_folder, name) | 201 target = os.path.join(asset_folder, name) |
| 197 shutil.copyfile(path, target) | 202 shutil.copyfile(path, target) |
| 198 | 203 |
| 199 # package app with manifoldjs | 204 # package app with manifoldjs |
| 200 cmd = ['npm', 'run', '--silent', 'package-edge'] | 205 cmd = ['npm', 'run', '--silent', 'package-edge'] |
| 201 | 206 |
| 202 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) | 207 subprocess.check_call(cmd, env=cmd_env, cwd=os.path.dirname(__file__)) |
| 203 | 208 |
| 204 package = os.path.join(manifold_folder, 'package', | 209 package = os.path.join(manifold_folder, 'package', |
| 205 'edgeExtension.appx') | 210 'edgeExtension.appx') |
| 206 | 211 |
| 207 shutil.copyfile(package, outfile) | 212 shutil.copyfile(package, outfile) |
| 208 finally: | 213 finally: |
| 209 shutil.rmtree(tmp_dir, ignore_errors=True) | 214 shutil.rmtree(tmp_dir, ignore_errors=True) |
| OLD | NEW |