def _loading_changed_cb(self, web_view, load_event): status = web_view.get_load_status() if status == WebKit.LoadStatus.FINISHED: key = os.environ["SUGAR_APISOCKET_KEY"] port = os.environ["SUGAR_APISOCKET_PORT"] env_json = json.dumps({"apiSocketKey": key, "apiSocketPort": port, "activityId": self._activity_id, "bundleId": self._bundle_id, "objectId": self._object_id, "activityName": activity.get_bundle_name()}) script = """ var environment = %s; if (window.sugar === undefined) { window.sugar = {}; } window.sugar.environment = environment; if (window.sugar.onEnvironmentSet) window.sugar.onEnvironmentSet(); """ % env_json self._web_view.execute_script(script)
def __init__(self, handle): Gtk.Window.__init__(self) self._activity_id = handle.activity_id self._object_id = handle.object_id self._bundle_id = os.environ["SUGAR_BUNDLE_ID"] self._bundle_path = os.environ["SUGAR_BUNDLE_PATH"] self._inspector_visible = False self.set_decorated(False) self.maximize() self.connect("key-press-event", self._key_press_event_cb) self.connect('realize', self._realize_cb) self.connect('destroy', self._destroy_cb) context = WebKit2.WebContext.get_default() context.register_uri_scheme("activity", self._app_scheme_cb, None) self._web_view = WebKit2.WebView() self._web_view.connect("load-changed", self._loading_changed_cb) self._web_view.connect('run-file-chooser', self.__run_file_chooser) self.add(self._web_view) self._web_view.show() settings = self._web_view.get_settings() settings.set_property("enable-developer-extras", True) self._web_view.load_uri("activity://%s/index.html" % self._bundle_id) self.set_title(activity.get_bundle_name())
def _loading_changed_cb(self, web_view, load_event): if load_event == WebKit2.LoadEvent.FINISHED: key = os.environ["SUGAR_APISOCKET_KEY"] port = os.environ["SUGAR_APISOCKET_PORT"] env_json = json.dumps({ "apiSocketKey": key, "apiSocketPort": port, "activityId": self._activity_id, "bundleId": self._bundle_id, "objectId": self._object_id, "activityName": activity.get_bundle_name() }) script = """ var environment = %s; if (window.sugar === undefined) { window.sugar = {}; } window.sugar.environment = environment; if (window.sugar.onEnvironmentSet) window.sugar.onEnvironmentSet(); """ % env_json self._web_view.run_javascript(script, None, None, None)
def __init__(self, handle): Gtk.Window.__init__(self) self._activity_id = handle.activity_id self._object_id = handle.object_id self._bundle_id = os.environ["SUGAR_BUNDLE_ID"] self._bundle_path = os.environ["SUGAR_BUNDLE_PATH"] self._inspector_visible = False self.set_decorated(False) self.maximize() self.connect('realize', self._realize_cb) self.connect('destroy', self._destroy_cb) # Get a free socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('', 0)) sock.listen(socket.SOMAXCONN) _ipaddr, self.port = sock.getsockname() sock.shutdown(socket.SHUT_RDWR) logging.error('Using port %d', self.port) # start the local web server httpd = LocalHTTPServer(('', self.port), lambda *args: LocalRequestHandler(*args), activity.get_bundle_path()) self._server = Thread(target=httpd.serve_forever) self._server.setDaemon(True) self._server.start() self._web_view = WebKit.WebView() self._web_view.connect("notify::load-status", self._loading_changed_cb) self._web_view.connect("resource-request-starting", self._resource_request_starting_cb) try: self._web_view.connect('run-file-chooser', self.__run_file_chooser) except TypeError: # Only present in WebKit1 > 1.9.3 and WebKit2 pass self.add(self._web_view) self._web_view.show() self._web_view.load_uri("activity://%s/index.html" % self._bundle_id) self.set_title(activity.get_bundle_name())
def view_source(self): """Implement the 'view source' key by saving show.py to the datastore, and then telling the Journal to view it.""" if self.__source_object_id is None: jobject = datastore.create() metadata = { 'title': _('%s Source') % get_bundle_name(), 'title_set_by_user': '******', 'suggested_filename': 'show.py', 'icon-color': profile.get_color().to_string(), 'mime_type': 'text/x-python', } for k, v in metadata.items(): jobject.metadata[k] = v # dict.update method is missing =( jobject.file_path = os.path.join(get_bundle_path(), 'show.py') datastore.write(jobject) self.__source_object_id = jobject.object_id jobject.destroy() self.journal_show_object(self.__source_object_id)
def view_source(self): """Implement the 'view source' key by saving pippy_app.py to the datastore, and then telling the Journal to view it.""" if self.__source_object_id is None: from sugar3 import profile from sugar3.datastore import datastore from sugar3.activity.activity import get_bundle_name, get_bundle_path import os.path jobject = datastore.create() metadata = { "title": _("%s Source") % get_bundle_name(), "title_set_by_user": "******", "suggested_filename": "pippy_app.py", "icon-color": profile.get_color().to_string(), "mime_type": "text/x-python", } for k, v in metadata.items(): jobject.metadata[k] = v # dict.update method is missing =( jobject.file_path = os.path.join(get_bundle_path(), "pippy_app.py") datastore.write(jobject) self.__source_object_id = jobject.object_id jobject.destroy() self.journal_show_object(self.__source_object_id)
def update_activity_title(self): name = self._task_master.read_task_data(NAME_UID) if name is not None: bundle_name = activity.get_bundle_name() self.metadata['title'] = _('%(name)s %(bundle)s Activity') % \ {'name': name, 'bundle': bundle_name}