mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1011620 - Generate suggestedsites.json from region.properties (r=nalexander)
This commit is contained in:
parent
703360fdf7
commit
710f3633d1
@ -89,7 +89,7 @@ $(dir-strings-xml)/strings.xml: $(strings-xml-preqs)
|
|||||||
$< \
|
$< \
|
||||||
-o $@)
|
-o $@)
|
||||||
|
|
||||||
suggestedsites-srcdir := $(dir $(abspath $(call MERGE_FILE,suggestedsites/list.txt)))
|
suggestedsites-srcdir := $(if $(filter en-US,$(AB_CD)),,$(or $(realpath $(L10NBASEDIR)),$(abspath $(L10NBASEDIR)))/$(AB_CD)/mobile/chrome)
|
||||||
|
|
||||||
# Determine the ../res/raw[-*] path. This can be ../res/raw when no
|
# Determine the ../res/raw[-*] path. This can be ../res/raw when no
|
||||||
# locale is explicitly specified.
|
# locale is explicitly specified.
|
||||||
@ -105,5 +105,5 @@ $(suggestedsites-dstdir-raw)/suggestedsites.json: FORCE
|
|||||||
--android-package-name=$(ANDROID_PACKAGE_NAME) \
|
--android-package-name=$(ANDROID_PACKAGE_NAME) \
|
||||||
--resources=$(srcdir)/../resources \
|
--resources=$(srcdir)/../resources \
|
||||||
$(if $(filter en-US,$(AB_CD)),,--srcdir=$(suggestedsites-srcdir)) \
|
$(if $(filter en-US,$(AB_CD)),,--srcdir=$(suggestedsites-srcdir)) \
|
||||||
--srcdir=$(addprefix $(srcdir)/,en-US/suggestedsites) \
|
--srcdir=$(topsrcdir)/mobile/locales/en-US/chrome \
|
||||||
$@)
|
$@)
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
{ "title": "Firefox Marketplace",
|
|
||||||
"url": "https://marketplace.firefox.com/",
|
|
||||||
"bgcolor": "#0095dd" }
|
|
@ -1,2 +0,0 @@
|
|||||||
mozilla
|
|
||||||
fxmarketplace
|
|
@ -1,3 +0,0 @@
|
|||||||
{ "title": "Mozilla",
|
|
||||||
"url": "http://www.mozilla.org/en-US/",
|
|
||||||
"bgcolor": "#c13832" }
|
|
@ -31,3 +31,21 @@ gecko.handlerService.schemes.mailto.1.uriTemplate=https://mail.google.com/mail/?
|
|||||||
# selection UI
|
# selection UI
|
||||||
browser.contentHandlers.types.0.title=My Yahoo!
|
browser.contentHandlers.types.0.title=My Yahoo!
|
||||||
browser.contentHandlers.types.0.uri=https://add.my.yahoo.com/rss?url=%s
|
browser.contentHandlers.types.0.uri=https://add.my.yahoo.com/rss?url=%s
|
||||||
|
|
||||||
|
# Order of suggested websites displayed in the Top Sites panel.
|
||||||
|
# Values for these keys must correspond to the name used in the keys that
|
||||||
|
# define each suggested website's details. For example:
|
||||||
|
# browser.suggestedsites.list.0=NAME
|
||||||
|
# browser.suggestedsites.NAME.title=Displayed name
|
||||||
|
# browser.suggestedsites.NAME.url=Website URL
|
||||||
|
# browser.suggestedsites.NAME.bgcolor= Color (hex format)
|
||||||
|
browser.suggestedsites.list.0=mozilla
|
||||||
|
browser.suggestedsites.list.1=fxmarketplace
|
||||||
|
|
||||||
|
browser.suggestedsites.mozilla.title=Mozilla
|
||||||
|
browser.suggestedsites.mozilla.url=https://mozilla.org/en-US/
|
||||||
|
browser.suggestedsites.mozilla.bgcolor=#c13832
|
||||||
|
|
||||||
|
browser.suggestedsites.fxmarketplace.title=Firefox Marketplace
|
||||||
|
browser.suggestedsites.fxmarketplace.url=https://marketplace.firefox.com/
|
||||||
|
browser.suggestedsites.fxmarketplace.bgcolor=#0095dd
|
@ -7,18 +7,21 @@
|
|||||||
|
|
||||||
This script follows these steps:
|
This script follows these steps:
|
||||||
|
|
||||||
1. Looks for a 'list.txt' file in one of the given source directories
|
1. Read the region.properties file in all the given source directories
|
||||||
(see srcdir). The list.txt contains the list of site names, one per line.
|
(see srcdir option). Merge all properties into a single dict accounting for
|
||||||
|
the priority of source directories.
|
||||||
|
|
||||||
2. For each site name found in 'list.txt', it tries to find a matching
|
2. Read the list of sites from the 'browser.suggestedsites.list.INDEX'
|
||||||
.json file in one of the source directories.
|
properties with value of these keys being an identifier for each suggested site
|
||||||
|
e.g. browser.suggestedsites.list.0=mozilla, browser.suggestedsites.list.1=fxmarketplace.
|
||||||
|
|
||||||
3. For each json file, load it and define the respective imageurl
|
3. For each site identifier defined by the list keys, look for matching branches
|
||||||
based on a image URL template composed by the target Android package name
|
containing the respective properties i.e. url, title, etc. For example,
|
||||||
and the site name.
|
for a 'mozilla' identifier, we'll look for keys like:
|
||||||
|
browser.suggestedsites.mozilla.url, browser.suggestedsites.mozilla.title, etc.
|
||||||
|
|
||||||
4. Join the JSON representation of each site into a JSON array and write
|
4. Generate a JSON representation of each site, join them in a JSON array, and
|
||||||
the result to suggestedsites.json on the locale-specific raw resource
|
write the result to suggestedsites.json on the locale-specific raw resource
|
||||||
directory e.g. raw/suggestedsites.json, raw-pt-rBR/suggestedsites.json.
|
directory e.g. raw/suggestedsites.json, raw-pt-rBR/suggestedsites.json.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
@ -26,6 +29,7 @@ from __future__ import print_function
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@ -38,6 +42,59 @@ from mozpack.files import (
|
|||||||
import mozpack.path as mozpath
|
import mozpack.path as mozpath
|
||||||
|
|
||||||
|
|
||||||
|
def read_properties_file(filename):
|
||||||
|
"""Reads a properties file into a dict.
|
||||||
|
|
||||||
|
Ignores empty, comment lines, and keys not starting with the prefix for
|
||||||
|
suggested sites ('browser.suggestedsites'). Removes the prefix from all
|
||||||
|
matching keys i.e. turns 'browser.suggestedsites.foo' into simply 'foo'
|
||||||
|
"""
|
||||||
|
prefix = 'browser.suggestedsites.'
|
||||||
|
properties = {}
|
||||||
|
for l in open(filename, 'rt').readlines():
|
||||||
|
line = l.strip()
|
||||||
|
if not line.startswith(prefix):
|
||||||
|
continue
|
||||||
|
(k, v) = re.split('\s*=\s*', line, 1)
|
||||||
|
properties[k[len(prefix):]] = v
|
||||||
|
return properties
|
||||||
|
|
||||||
|
|
||||||
|
def merge_properties(filename, srcdirs):
|
||||||
|
"""Merges properties from the given file in the given source directories."""
|
||||||
|
properties = {}
|
||||||
|
for srcdir in srcdirs:
|
||||||
|
path = mozpath.join(srcdir, filename)
|
||||||
|
try:
|
||||||
|
properties.update(read_properties_file(path))
|
||||||
|
except IOError, e:
|
||||||
|
# Ignore non-existing files
|
||||||
|
continue
|
||||||
|
return properties
|
||||||
|
|
||||||
|
|
||||||
|
def get_site_list_from_properties(properties):
|
||||||
|
"""Turns {'list.0':'foo', 'list.1':'bar'} into ['foo', 'bar']."""
|
||||||
|
prefix = 'list.'
|
||||||
|
indexes = []
|
||||||
|
for k, v in properties.iteritems():
|
||||||
|
if not k.startswith(prefix):
|
||||||
|
continue
|
||||||
|
indexes.append(int(k[len(prefix):]))
|
||||||
|
return [properties[prefix + str(index)] for index in sorted(indexes)]
|
||||||
|
|
||||||
|
|
||||||
|
def get_site_from_properties(name, properties):
|
||||||
|
"""Turns {'foo.title':'title', ...} into {'title':'title', ...}."""
|
||||||
|
prefix = '{name}.'.format(name=name)
|
||||||
|
try:
|
||||||
|
site = dict((k, properties[prefix + k]) for k in ('title', 'url', 'bgcolor'))
|
||||||
|
except IndexError, e:
|
||||||
|
raise Exception("Could not find required property for '{name}: {error}'"
|
||||||
|
.format(name=name, error=str(e)))
|
||||||
|
return site
|
||||||
|
|
||||||
|
|
||||||
def main(args):
|
def main(args):
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('--verbose', '-v', default=False, action='store_true',
|
parser.add_argument('--verbose', '-v', default=False, action='store_true',
|
||||||
@ -57,15 +114,9 @@ def main(args):
|
|||||||
help='output')
|
help='output')
|
||||||
opts = parser.parse_args(args)
|
opts = parser.parse_args(args)
|
||||||
|
|
||||||
def resolve_filename(filename):
|
# Use reversed order so that the first srcdir has higher priority to override keys.
|
||||||
for srcdir in opts.srcdir:
|
all_properties = merge_properties('region.properties', reversed(opts.srcdir))
|
||||||
path = mozpath.join(srcdir, filename)
|
names = get_site_list_from_properties(all_properties)
|
||||||
if os.path.exists(path):
|
|
||||||
return path
|
|
||||||
return None
|
|
||||||
|
|
||||||
# The list.txt file has one site name per line.
|
|
||||||
names = [s.strip() for s in open(resolve_filename('list.txt'), 'rt').readlines()]
|
|
||||||
if opts.verbose:
|
if opts.verbose:
|
||||||
print('Reading {len} suggested sites: {names}'.format(len=len(names), names=names))
|
print('Reading {len} suggested sites: {names}'.format(len=len(names), names=names))
|
||||||
|
|
||||||
@ -73,15 +124,11 @@ def main(args):
|
|||||||
image_url_template = 'android.resource://%s/drawable/suggestedsites_{name}' % opts.android_package_name
|
image_url_template = 'android.resource://%s/drawable/suggestedsites_{name}' % opts.android_package_name
|
||||||
drawables_template = 'drawable*/suggestedsites_{name}.*'
|
drawables_template = 'drawable*/suggestedsites_{name}.*'
|
||||||
|
|
||||||
# Load json files corresponding to each site name and define their
|
# Load properties corresponding to each site name and define their
|
||||||
# respective image URL.
|
# respective image URL.
|
||||||
sites = []
|
sites = []
|
||||||
for name in names:
|
for name in names:
|
||||||
filename = resolve_filename(name + '.json')
|
site = get_site_from_properties(name, all_properties)
|
||||||
if opts.verbose:
|
|
||||||
print("Reading '{name}' from {filename}"
|
|
||||||
.format(name=name, filename=filename))
|
|
||||||
site = json.load(open(filename, 'rt'))
|
|
||||||
site['imageurl'] = image_url_template.format(name=name)
|
site['imageurl'] = image_url_template.format(name=name)
|
||||||
sites.append(site)
|
sites.append(site)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user