# HG changeset patch # User Goffi # Date 1481667043 -3600 # Node ID 8e16abcadbb8a37fb3a67e9c35cad1790b10f53a # Parent af4f986d86f0f8e468c11551c203ca088d0b67e1 core: launch SàT backend as a service on Android and wait for it on pb bridge connection. diff -r af4f986d86f0 -r 8e16abcadbb8 src/cagou/core/cagou_main.py --- 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) diff -r af4f986d86f0 -r 8e16abcadbb8 src/service/main.py --- /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 . + +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()