#!/usr/bin/env python # -*- coding: utf-8 -*- # # Video Viewer activity: A video viewer a set of videos on a server # Lionel Laské from gi.repository import Gtk, Gdk import logging import os from gettext import gettext as _ from sugar3.activity import activity from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.graphics.toolbutton import ToolButton from sugar3.activity.widgets import ActivityButton from sugar3.activity.widgets import TitleEntry from sugar3.activity.widgets import StopButton from sugar3.activity.widgets import ShareButton from sugar3.activity.widgets import DescriptionItem from sugar3.presence import presenceservice from sugar3.activity.widgets import ActivityToolbarButton from sugar3.graphics.toolbarbox import ToolbarButton from gi.repository import WebKit import logging import gconf from datetime import date from enyo import Enyo class EnyoActivity(activity.Activity): """EnyoActivity class as specified in activity.info""" def __init__(self, handle): """Set up the activity.""" activity.Activity.__init__(self, handle) self.max_participants = 1 self.context = {} self.favorite_status = 'notfavorite' self.filter_status = '' self.make_toolbar() self.make_mainview() def filter_changed(self, button): if self.filter_status == button.get_label(): self.filter_status = '' else: self.filter_status = button.get_label() self.enyo.send_message("filter_clicked", self.filter_status) def favorite(self, button): if self.favorite_status == 'favorite': self.favorite_button.icon_name = self.favorite_status = 'notfavorite' self.enyo.send_message("favorite_clicked", 0) else: self.favorite_button.icon_name = self.favorite_status = 'favorite' self.enyo.send_message("favorite_clicked", 1) def text_filter(self, entry): self.enyo.send_message("text_typed", entry.props.text) def library_clicked(self, button): self.enyo.send_message("library_clicked") def refresh(self, context): self.context = context web_app_page = os.path.join(activity.get_bundle_path(), "index.html") self.webview.load_uri('file://' + web_app_page+"?onsugar=1") def init_context(self, args): """Init Javascript context sending buddy information""" # Get XO colors buddy = {} client = gconf.client_get_default() colors = client.get_string("/desktop/sugar/user/color") buddy["colors"] = colors.split(",") # Get XO name presenceService = presenceservice.get_instance() buddy["name"] = presenceService.get_owner().props.nick self.enyo.send_message("buddy", buddy) if self.context != {}: self.enyo.send_message("load-context", self.context) else: self.enyo.send_message("library_clicked") def make_mainview(self): """Create the activity view""" # Create global box vbox = Gtk.VBox(True) # Create webview self.webview = webview = WebKit.WebView() webview.show() vbox.pack_start(webview, True, True, 0) vbox.show() # Activate Enyo interface self.enyo = Enyo(webview) self.enyo.connect("ready", self.init_context) self.enyo.connect("save-context", self.save_context) self.enyo.connect("refresh-screen", self.refresh) self.enyo.connect("set_categories", self.set_categories) # Go to first page web_app_page = os.path.join(activity.get_bundle_path(), "index.html") self.webview.load_uri('file://' + web_app_page+"?onsugar=1") # Display all self.set_canvas(vbox) vbox.show() def make_toolbar(self): # toolbar with the new toolbar redesign toolbar_box = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbar_box.toolbar.insert(activity_button, 0) activity_button.show() self.toolbarview = Gtk.Toolbar() langtoolbar_button = ToolbarButton( label=_('Filter'), page=self.toolbarview, icon_name='filter') langtoolbar_button.show() toolbar_box.toolbar.insert(langtoolbar_button, -1) self.toolbarview.show() box_search_item = Gtk.ToolItem() self.search_entry = Gtk.Entry() self.search_entry.connect('changed', self.text_filter) self.search_entry.set_size_request(300, -1) box_search_item.add(self.search_entry) self.search_entry.show() box_search_item.show() toolbar_box.toolbar.insert(box_search_item, -1) favorite_button = ToolButton(self.favorite_status) favorite_button.set_tooltip('Filter on favorite') favorite_button.connect('clicked', self.favorite) toolbar_box.toolbar.insert(favorite_button, -1) favorite_button.show() self.favorite_button = favorite_button library_button = ToolButton('library') library_button.set_tooltip('Show libraries') library_button.connect('clicked', self.library_clicked) toolbar_box.toolbar.insert(library_button, -1) library_button.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar_box.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) toolbar_box.toolbar.insert(stop_button, -1) stop_button.show() self.set_toolbar_box(toolbar_box) toolbar_box.show() def set_categories(self, categories): """Called when Enyo load a new database with new categories, udate the filter""" nitems = self.toolbarview.get_n_items() for i in range(0, nitems): self.toolbarview.remove(self.toolbarview.get_nth_item(0)) for category in categories: btn = Gtk.Button.new_with_label(category['id']) btn.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0.1568, 0.1568, 0.1568, 1.0)) btn.connect('clicked', self.filter_changed) btn.show() tool = Gtk.ToolItem() tool.add(btn) tool.show() self.toolbarview.insert(tool, -1) self.toolbarview.show() def write_file(self, file_path): """Called when activity is saved, get the current context in Enyo""" self.file_path = file_path self.enyo.send_message("save-context") def save_context(self, context): """Called by Enyo to save the current context""" file = open(self.file_path, 'w') try: file.write(self.enyo.json_encode(context)+'\n') finally: file.close() def read_file(self, file_path): """Called when activity is loaded, load the current context in the file""" file = open(file_path, 'r') self.context = {} try: self.context = self.enyo.json_decode(file.readline().strip('\n')) finally: file.close()