[chrome-gnome-shell/feature/connector-update-check: 1/2] Moved update check code to native connector.
- From: Yuri Konotopov <ykonotopov src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chrome-gnome-shell/feature/connector-update-check: 1/2] Moved update check code to native connector.
- Date: Sun, 25 Sep 2016 10:31:17 +0000 (UTC)
commit fb7c15761b6125da8945956d2867beaef5f34593
Author: Yuri Konotopov <ykonotopov gmail com>
Date: Mon Sep 19 18:48:03 2016 +0300
Moved update check code to native connector.
README.md | 1 +
connector/chrome-gnome-shell.py | 55 +++++++++++
extension/include/update.js | 195 ++++++++++++++++++++++----------------
3 files changed, 169 insertions(+), 82 deletions(-)
---
diff --git a/README.md b/README.md
index ca0166a..27a8ea1 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,7 @@ Requirements
* GNOME Shell up to 3.20
* Python 2.7+ or 3.x
* PyGObject
+ * Python Requests 2.x
Installation
------------
diff --git a/connector/chrome-gnome-shell.py b/connector/chrome-gnome-shell.py
index 628bdb7..77d8cdf 100755
--- a/connector/chrome-gnome-shell.py
+++ b/connector/chrome-gnome-shell.py
@@ -16,6 +16,7 @@ from gi.repository import GLib, Gio
import json
import os
import re
+import requests
import struct
import sys
import traceback
@@ -96,6 +97,53 @@ def dbus_call_response(method, parameters, resultProperty):
except GLib.GError as e:
send_error(e.message)
+def check_update(update_url):
+ result = proxy.call_sync("ListExtensions",
+ None,
+ Gio.DBusCallFlags.NONE,
+ -1,
+ None)
+
+ extensions = result.unpack()[0]
+
+ if extensions:
+ http_request = {
+ 'shell_version': proxy.get_cached_property("ShellVersion").unpack(),
+ 'installed': {}
+ }
+
+ for uuid in extensions:
+ if isUUID(uuid):
+ try:
+ http_request['installed'][uuid] = {
+ 'version': int(extensions[uuid]['version'])
+ }
+ except ValueError:
+ http_request['installed'][uuid] = {
+ 'version': 1
+ }
+
+ http_request['installed'] = json.dumps(http_request['installed'])
+
+ try:
+ response = requests.get(
+ update_url,
+ params=http_request,
+ timeout=5
+ )
+ response.raise_for_status()
+ send_message({
+ 'success': True,
+ 'extensions': extensions,
+ 'upgrade': response.json()}
+ )
+ except (
+ requests.ConnectionError, requests.HTTPError, requests.Timeout,
+ requests.TooManyRedirects, requests.RequestException, ValueError
+ ) as ex:
+ send_message({'success': False, 'message': str(ex.message) if ('message' in ex) else str(ex)})
+
+
# Callback that reads messages from the webapp.
def process_input(user_data):
rlist, _, _ = select([sys.stdin], [], [], 1)
@@ -217,6 +265,13 @@ def process_input(user_data):
GLib.Variant.new_tuple(GLib.Variant.new_string(request['uuid'])),
"status")
+ elif request['execute'] == 'checkUpdate':
+ update_url = 'https://extensions.gnome.org/update-info/'
+ if 'url' in request:
+ update_url = request['url']
+
+ check_update(update_url)
+
debug('[%d] Execute: from %s' % (os.getpid(), request['execute']))
mutex.release()
diff --git a/extension/include/update.js b/extension/include/update.js
index 36fd788..5ac37c4 100644
--- a/extension/include/update.js
+++ b/extension/include/update.js
@@ -32,105 +32,136 @@ GSC.update = (function($) {
{
var shellVersion = response.properties.shellVersion;
- GSC.sendNativeRequest({execute: 'listExtensions'}, function
(extensionsResponse) {
- if (response.success)
- {
- if ($.isEmptyObject(extensionsResponse.extensions))
- return;
-
- var request = {
- shell_version: shellVersion,
- installed: {}
- };
-
- for (uuid in extensionsResponse.extensions)
+ // TODO: remove deprecated in version 9
+ if(response.properties.connectorVersion >= 8)
+ {
+ GSC.sendNativeRequest({execute: 'checkUpdate', url: UPDATE_URL},
function (response) {
+ if (response.success)
{
- if (GSC.isUUID(uuid) &&
extensionsResponse.extensions[uuid].type == EXTENSION_TYPE.PER_USER)
- {
- request.installed[uuid] = {version:
parseInt(extensionsResponse.extensions[uuid].version) || 1};
- }
+ onSweetToothResponse(response.upgrade,
response.extensions);
+ }
+ else
+ {
+ createUpdateFailedNotification(response.message ?
response.message : m('native_request_failed', 'checkUpdate'));
}
+ });
+ }
+ else
+ {
+ _frontendCheck(shellVersion);
+ }
+ }
+ else
+ {
+ createUpdateFailedNotification(response.message ? response.message :
m('native_request_failed', 'initialize'));
+ }
+ });
+ }
- request.installed = JSON.stringify(request.installed);
+ /*
+ * TODO: remove in version 9
+ * @Deprecated
+ */
+ function _frontendCheck(shellVersion)
+ {
+ GSC.sendNativeRequest({execute: 'listExtensions'}, function (extensionsResponse) {
+ if (extensionsResponse.success)
+ {
+ if ($.isEmptyObject(extensionsResponse.extensions))
+ return;
- chrome.permissions.contains({
- permissions: ["webRequest"]
- }, function(webRequestEnabled) {
- if(webRequestEnabled)
- {
- chrome.webRequest.onErrorOccurred.addListener(
- onNetworkError,
- {
- urls: [ UPDATE_URL + "*" ],
- types: [ 'xmlhttprequest' ]
- }
- );
- }
+ var request = {
+ shell_version: shellVersion,
+ installed: {}
+ };
- $.ajax({
- url: UPDATE_URL,
- data: request,
- dataType: 'json',
- method: 'GET',
- cache: false
- }).done(function (data, textStatus, jqXHR) {
-
GSC.notifications.remove(NOTIFICATION_UPDATE_CHECK_FAILED);
-
- var toUpgrade = [];
- for (uuid in data)
- {
- if
(extensionsResponse.extensions[uuid] && $.inArray(data[uuid], ['upgrade', 'downgrade']) !== -1)
- {
- toUpgrade.push({
- title:
extensionsResponse.extensions[uuid].name,
- message:
m('extension_status_' + data[uuid])
- });
- }
- }
+ for (uuid in extensionsResponse.extensions)
+ {
+ if (GSC.isUUID(uuid) && extensionsResponse.extensions[uuid].type ==
EXTENSION_TYPE.PER_USER)
+ {
+ request.installed[uuid] = {version:
parseInt(extensionsResponse.extensions[uuid].version) || 1};
+ }
+ }
- if (toUpgrade.length > 0)
- {
-
GSC.notifications.create(NOTIFICATION_UPDATE_AVAILABLE, {
- type:
chrome.notifications.TemplateType.LIST,
- title: m('update_available'),
- message: '',
- items: toUpgrade
- });
- }
+ request.installed = JSON.stringify(request.installed);
- chrome.storage.local.set({
- lastUpdateCheck: new
Date().toLocaleString()
- });
- }).fail(function (jqXHR, textStatus, errorThrown) {
- if(textStatus === 'error' && !errorThrown)
+ chrome.permissions.contains({
+ permissions: ["webRequest"]
+ }, function (webRequestEnabled) {
+ if (webRequestEnabled)
+ {
+ chrome.webRequest.onErrorOccurred.addListener(
+ onNetworkError,
{
- if(webRequestEnabled)
- {
- return;
- }
-
- textStatus = m('network_error');
+ urls: [UPDATE_URL + "*"],
+ types: ['xmlhttprequest']
}
+ );
+ }
- createUpdateFailedNotification(textStatus);
- }).always(function() {
- if(webRequestEnabled)
+ $.ajax({
+ url: UPDATE_URL,
+ data: request,
+ dataType: 'json',
+ method: 'GET',
+ cache: false
+ })
+ .done(function(data) {
+ onSweetToothResponse(data,
extensionsResponse.extensions)
+ })
+ .fail(function (jqXHR, textStatus, errorThrown) {
+ if (textStatus === 'error' && !errorThrown)
+ {
+ if (webRequestEnabled)
{
-
chrome.webRequest.onErrorOccurred.removeListener(onNetworkError);
+ return;
}
- });
+
+ textStatus = m('network_error');
+ }
+
+ createUpdateFailedNotification(textStatus);
+ }).always(function () {
+ if (webRequestEnabled)
+ {
+
chrome.webRequest.onErrorOccurred.removeListener(onNetworkError);
+ }
});
- }
- else
- {
- createUpdateFailedNotification(response.message ?
response.message : m('native_request_failed', 'listExtensions'));
- }
});
+ } else
+ {
+ createUpdateFailedNotification(response.message ? response.message :
m('native_request_failed', 'listExtensions'));
}
- else
+ });
+ }
+
+ function onSweetToothResponse(data, installedExtensions) {
+ GSC.notifications.remove(NOTIFICATION_UPDATE_CHECK_FAILED);
+
+ var toUpgrade = [];
+ for (uuid in data)
+ {
+ if (installedExtensions[uuid] && $.inArray(data[uuid], ['upgrade', 'downgrade']) !==
-1)
{
- createUpdateFailedNotification(response.message ? response.message :
m('native_request_failed', 'initialize'));
+ toUpgrade.push({
+ title: installedExtensions[uuid].name,
+ message: m('extension_status_' + data[uuid])
+ });
}
+ }
+
+ if (toUpgrade.length > 0)
+ {
+ GSC.notifications.create(NOTIFICATION_UPDATE_AVAILABLE, {
+ type: chrome.notifications.TemplateType.LIST,
+ title: m('update_available'),
+ message: '',
+ items: toUpgrade
+ });
+ }
+
+ chrome.storage.local.set({
+ lastUpdateCheck: new Date().toLocaleString()
});
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]