changeset 64:8e16abcadbb8

core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
author Goffi <goffi@goffi.org>
date Tue, 13 Dec 2016 23:10:43 +0100
parents af4f986d86f0
children 1c738621bc8d
files src/cagou/core/cagou_main.py src/service/main.py
diffstat 2 files changed, 60 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/cagou/core/cagou_main.py	Tue Dec 13 23:10:41 2016 +0100
+++ b/src/cagou/core/cagou_main.py	Tue Dec 13 23:10:43 2016 +0100
@@ -234,6 +234,12 @@
         if bridge_name == 'embedded':
             from sat.core import sat_main
             self.sat = sat_main.SAT()
+        if sys.platform == 'android':
+            from android import AndroidService
+            service = AndroidService(u'Cagou (SàT)'.encode('utf-8'), u'Salut à Toi backend'.encode('utf-8'))
+            service.start(u'service started')
+            self.service = service
+
         bridge_module = dynamic_import.bridge(bridge_name, 'sat_frontends.bridge')
         if bridge_module is None:
             log.error(u"Can't import {} bridge".format(bridge_name))
@@ -260,6 +266,20 @@
         super(Cagou, self)._bridgeCb()
         self.bridge.getReady(self.onBackendReady)
 
+    def _bridgeEb(self, failure):
+        if bridge_name == "pb" and sys.platform == "android":
+            try:
+                self.retried += 1
+            except AttributeError:
+                self.retried = 1
+            from twisted.internet.error import ConnectionRefusedError
+            if failure.check(ConnectionRefusedError) and self.retried < 100:
+                if self.retried % 20 == 0:
+                    log.debug("backend not ready, retrying ({})".format(self.retried))
+                Clock.schedule_once(lambda dummy: self.connectBridge(), 0.05)
+                return
+        super(Cagou, self)._bridgeEb(failure)
+
     def run(self):
         self.connectBridge()
         self.app.bind(on_stop=self.onStop)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/service/main.py	Tue Dec 13 23:10:43 2016 +0100
@@ -0,0 +1,40 @@
+#!/usr//bin/env python2
+# -*- coding: utf-8 -*-
+
+# Cagou: desktop/mobile frontend for Salut à Toi XMPP client
+# Copyright (C) 2016 Jérôme Poisson (goffi@goffi.org)
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import sys
+import os
+# we want the service to access the modules from parent dir (sat, etc.)
+os.chdir('..')
+sys.path.insert(0, '')
+from sat.core.constants import Const as C
+from sat.core import log_config
+# SàT log conf must be done before calling Kivy
+log_config.satConfigure(C.LOG_BACKEND_STANDARD, C)
+# if this module is called, we should be on android,
+# but just in case...
+from kivy import utils as kivy_utils
+if kivy_utils.platform == "android":
+    # sys.platform is "linux" on android by default
+    # so we change it to allow backend to detect android
+    sys.platform = "android"
+from sat.core import sat_main
+from twisted.internet import reactor
+
+sat = sat_main.SAT()
+reactor.run()