Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Anderson <tony_anderson@usa.net>2009-08-29 14:43:00 (GMT)
committer Tony Anderson <tony_anderson@usa.net>2009-08-29 14:43:00 (GMT)
commit2ed5da66f4357e85a06f6bab2b88718ac71885fe (patch)
treed92b19433df9baca8c9fb2180e880f63aa35de8a
parent79cb6a9eada084a5be4bdc55154156807a13af22 (diff)
change icon, add video´
-rw-r--r--[-rwxr-xr-x]activity/activity-smile.svg115
-rwxr-xr-xsmile.py183
2 files changed, 183 insertions, 115 deletions
diff --git a/activity/activity-smile.svg b/activity/activity-smile.svg
index 494ebfb..0049daa 100755..100644
--- a/activity/activity-smile.svg
+++ b/activity/activity-smile.svg
@@ -1,84 +1,33 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="50"
- height="50"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.45.1"
- sodipodi:docname="activity-gui.svg"
- sodipodi:docbase="/home/tony/Documents/Activities/GUIActivity.activity/activity"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <metadata
- id="metadata9">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs7" />
- <sodipodi:namedview
- inkscape:window-height="627"
- inkscape:window-width="910"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- guidetolerance="10.0"
- gridtolerance="10.0"
- objecttolerance="10.0"
- borderopacity="1.0"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- inkscape:zoom="8.14"
- inkscape:cx="25"
- inkscape:cy="25"
- inkscape:window-x="0"
- inkscape:window-y="25"
- inkscape:current-layer="svg2" />
- <rect
- x="0.26289925"
- y="2.3513515"
- width="48"
- height="48"
- style="fill:#ffffff;stroke:#000000;stroke-width:2"
- id="rect4" />
- <text
- xml:space="preserve"
- style="font-size:8px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="8.7223587"
- y="12.776413"
- id="text2161"><tspan
- sodipodi:role="line"
- id="tspan2163"
- x="8.7223587"
- y="12.776413" /></text>
- <text
- xml:space="preserve"
- style="font-size:14px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="10.687961"
- y="3.6855037"
- id="text2165"><tspan
- sodipodi:role="line"
- x="10.687961"
- y="3.6855037"
- id="tspan2169"></tspan><tspan
- sodipodi:role="line"
- x="10.687961"
- y="21.185504"
- id="tspan2162">Smi </tspan><tspan
- sodipodi:role="line"
- x="10.687961"
- y="38.685504"
- id="tspan2327">le </tspan></text>
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg>
+<svg version="1.1" baseProfile="full" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify"
+ id="Test File"
+ viewBox="-21 -21 42 42"
+ width="800"
+ height="800">
+
+<defs>
+<radialGradient id="shine"
+ cx=".2" cy=".2" r=".5" fx=".2" fy=".2">
+ <stop offset="0" stop-color="white" stop-opacity=".7"/>
+ <stop offset="1" stop-color="white" stop-opacity="0"/>
+</radialGradient>
+<radialGradient id="grad"
+ cx=".5" cy=".5" r=".5" >
+ <stop offset="0" stop-color="yellow"/>
+ <stop offset=".75" stop-color="yellow"/>
+ <stop offset=".95" stop-color="#ee0"/>
+ <stop offset="1" stop-color="#e8e800"/>
+</radialGradient>
+
+</defs>
+
+<circle r="20" stroke="black" stroke-width=".15" fill="url(#grad)"/>
+<circle r="20" fill="url(#shine)"/>
+<g id="right">
+ <ellipse rx="2.5" ry="4" cx="-6" cy="-7" fill="black"/>
+ <path fill="none" stroke="black" stroke-width=".5" stroke-linecap="round" d="M 10.6,2.7 a 4,4,0 0,0 4,3"/>
+</g>
+<use xlink:href="#right" transform="scale(-1,1)"/>
+<path fill="none" stroke="black" stroke-width=".75" d="M -12,5 A 13.5,13.5,0 0,0 12,5 A 13,13,0 0,1 -12,5"/>
</svg>
diff --git a/smile.py b/smile.py
index f6c6913..51212e1 100755
--- a/smile.py
+++ b/smile.py
@@ -3,6 +3,9 @@
# test ambulantglue
import os, sys, time
+import subprocess
+from datetime import datetime
+from time import strftime
import pygtk
pygtk.require('2.0')
@@ -11,10 +14,11 @@ import gtk
from sugar.activity import activity
from sugar.datastore import datastore
from sugar.graphics.toolbutton import ToolButton
+
import ambulantglue
+
from path import path
import zipfile
-import subprocess
BASE = path("/media/0BF7-0F5D") / 'sandbox'
DATASTORE = '/home/olpc/.sugar/default/datastore/store'
@@ -22,6 +26,7 @@ DATAPATH = path(activity.get_activity_root()) / "data"
ACTIVITYPATH = path(activity.get_bundle_path())
SMILPATH = ACTIVITYPATH / 'smils'
BUNDLEPATH = DATAPATH / 'bundle'
+DATEFORMAT = "%Y-%m-%d %H:%M:%S"
SELECTTOOLBAR = 1
class SmileActivity(activity.Activity):
@@ -29,7 +34,7 @@ class SmileActivity(activity.Activity):
def __init__ (self, handle):
activity.Activity.__init__(self, handle)
self.set_title("Smile")
- self.connect("destroy", self.destroy)
+ self.connect("destroy", self.set_exit)
self.exit = False
#setup chooser screen
box = gtk.VBox(homogeneous=False)
@@ -42,9 +47,9 @@ class SmileActivity(activity.Activity):
self.chooserscreen = box
# Create the standard activity toolbox; add our toolbar
self.entry = gtk.Entry()
- self.entry.connect("activate", self.set_smil)
+ self.entry.connect("activate", self.activate_cb)
self.entry.show()
- selectTB = SelectToolBar(self.chooser, self.play_cb, self.entry, self.choosebundle, self.destroy)
+ selectTB = SelectToolBar(self)
self.toolbox = activity.ActivityToolbox(self)
self.toolbox.add_toolbar("Select", selectTB)
# Open with slideshow toolbar
@@ -66,7 +71,7 @@ class SmileActivity(activity.Activity):
while gtk.events_pending():
gtk.main_iteration()
- def destroy(self):
+ def set_exit(self):
self.exit = True
def start(self):
@@ -77,6 +82,16 @@ class SmileActivity(activity.Activity):
self.player.play()
self.destroy()
+ def pause_cb(self, widget):
+ self.player.pause()
+
+ def stop_cb(self, widget):
+ self.player.stop()
+
+ def activate_cb(self, widget):
+ #ignore
+ pass
+
def choosebundle(self, widget, source, pth):
treeview = self.chooser.get_treeView()
treeview.set_model(self.chooser.set_store(source, pth))
@@ -85,12 +100,6 @@ class SmileActivity(activity.Activity):
self.chooserscreen.show_all()
print 'choosebundle done'
- def set_smil(self, widget):
- print self.entry.get_text()
- pth = BASE / self.entry.get_text()
- print 'pth=', pth
- self.start_smil(pth)
-
def read_file(self, file_path):
print 'read_file:', file_path
filepath = path(file_path)
@@ -150,6 +159,94 @@ class SmileActivity(activity.Activity):
src = filepath
dst = BUNDLEPATH / 'image.bmp'
path.copy(src, dst)
+ elif filepath.ext == '.ogg' or filepath.ext == '.oga':
+ self.doc = 'audioogg.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'audio.ogg'
+ path.copy(src, dst)
+ elif filepath.ext == '.m4a':
+ self.doc = 'audiom4a.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'audio.m4a'
+ path.copy(src, dst)
+ elif filepath.ext == '.mp3':
+ self.doc = 'audiomp3.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'audio.mp3'
+ path.copy(src, dst)
+ elif filepath.ext == '.wav':
+ self.doc = 'audiowav.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'audio.wav'
+ path.copy(src, dst)
+ elif filepath.ext == '.wma':
+ self.doc = 'audiowma.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'audio.wma'
+ path.copy(src, dst)
+ elif filepath.ext == '.mpg':
+ self.doc = 'videompg.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'video.mpg'
+ path.copy(src, dst)
+ elif filepath.ext == '.mov':
+ self.doc = 'videomov.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'video.mov'
+ path.copy(src, dst)
+ elif filepath.ext == '.wmv':
+ self.doc = 'videowmv.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'video.wmv'
+ path.copy(src, dst)
+ elif filepath.ext == '.avi':
+ self.doc = 'videoavi.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'video.avi'
+ path.copy(src, dst)
+ elif filepath.ext == '.ogg':
+ self.doc = 'videoogg.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'video.ogg'
+ path.copy(src, dst)
+ elif filepath.ext == '.mp4':
+ self.doc = 'videomp4.smil'
+ src = SMILPATH / self.doc
+ dst = BUNDLEPATH
+ path.copy(src, dst)
+ src = filepath
+ dst = BUNDLEPATH / 'video.mp4'
+ path.copy(src, dst)
elif filepath.ext == '.smxo':
z = zipfile.ZipFile(file_path, "r")
for i in z.infolist():
@@ -173,7 +270,9 @@ class SmileActivity(activity.Activity):
else:
print 'unknown extension', filepath.ext, filepath
#play smil document
+ self.entry.set_text(self.doc)
self.start_smil(BUNDLEPATH / self.doc)
+ self.play_cb(self.doc)
def start_smil(self, pth):
self.set_canvas(self.playerscreen)
@@ -184,10 +283,12 @@ class SmileActivity(activity.Activity):
def on_activated(self, widget, row, col):
print 'smxo on_activated'
model = widget.get_model()
- print 'row', model[row][0], model[row][1], model[row][2]
+ print 'row', model[row]
title = model[row][1]
- timestamp = model[row][2]
+ mime_type = model[row][2]
+ timestamp = model[row][3]
object = datastore.get(model[row][0])
+ object.destroy()
fn = object.file_path
print 'object filename', path(fn).exists(), fn
#open slideshow, set Navigation toolbar current
@@ -195,15 +296,18 @@ class SmileActivity(activity.Activity):
class SelectToolBar(gtk.Toolbar):
- def __init__(self, chooser, play_cb, entry, choosebundle, destroy):
+ def __init__(self, activity):
gtk.Toolbar.__init__(self)
- self.chooser = chooser
+ self.chooser = activity.chooser
+ entry = activity.entry
+ choosebundle = activity.choosebundle
+ set_exit = activity.set_exit
#get mount points
ds_mounts = datastore.mounts()
pendrive = -1
for i in range(0, len(ds_mounts), 1):
- print 'mount', i, ds_mounts[i]['uri'], ds_mounts[i]['title'], ds_mounts[i]['id']
+ print 'mount', i, ds_mounts[i]
if ds_mounts[i]['uri'].find('datastore') > 0:
journal = i
else:
@@ -225,21 +329,26 @@ class SelectToolBar(gtk.Toolbar):
self.show()
self.playbutton = ToolButton('gtk-media-play')
- self.playbutton.connect('clicked', play_cb)
+ self.playbutton.connect('clicked', activity.play_cb)
self.playbutton.show()
self.insert(self.playbutton, -1)
+ self.pausebutton = ToolButton('gtk-media-pause')
+ self.pausebutton.connect('clicked', activity.pause_cb)
+ self.pausebutton.show()
+ self.insert(self.pausebutton, -1)
+
+ self.stopbutton = ToolButton('gtk-media-stop')
+ self.playbutton.connect('clicked', activity.stop_cb)
+ self.stopbutton.show()
+ self.insert(self.stopbutton, -1)
+
self.toolitem = gtk.ToolItem()
self.toolitem.set_expand(True)
self.toolitem.show()
self.toolitem.add(entry)
self.insert(self.toolitem, -1)
- self.quitbutton = ToolButton('ooops')
- self.quitbutton.connect('clicked', destroy)
- self.quitbutton.show()
- self.insert(self.quitbutton, -1)
-
def choosebundle(self, widget, source, pth):
treeview = self.chooser.get_treeView()
treeview.set_model(self.chooser.set_store(source, pth))
@@ -270,17 +379,21 @@ class Smxoview(gtk.VBox):
column.set_sort_column_id(1)
treeView.append_column(column)
rendererText = gtk.CellRendererText()
- column = gtk.TreeViewColumn("Date", rendererText, text=2)
- column.set_sort_order(gtk.SORT_DESCENDING)
+ column = gtk.TreeViewColumn("Media", rendererText, text=2)
column.set_sort_column_id(2)
treeView.append_column(column)
+ rendererText = gtk.CellRendererText()
+ column = gtk.TreeViewColumn("Date", rendererText, text=3)
+ column.set_sort_order(gtk.SORT_DESCENDING)
+ column.set_sort_column_id(3)
+ treeView.append_column(column)
def get_treeView(self):
return self.treeView
def set_store(self, mountpoint, pth):
print 'set_store', mountpoint, pth
- store = gtk.ListStore(str, str, str)
+ store = gtk.ListStore(str, str, str, str)
#get objects from the local datastore
media_list = []
media_list.append('application/x-smile')
@@ -290,17 +403,23 @@ class Smxoview(gtk.VBox):
media_list.append('image/bmp')
media_list.append('image/gif')
media_list.append('image/tiff')
+ media_list.append('audio/mp4')
+ media_list.append('application/ogg')
+ media_list.append('audio/mpeg')
+ media_list.append('audio/x-wav')
+ media_list.append('audio/x-ms-wma')
+ media_list.append('video/mpeg')
+ media_list.append('video/quicktime')
+ media_list.append('video/x-ms-wmv')
+ media_list.append('video/x-msvideo')
+ media_list.append('video/mp4')
ds_objects, num_objects = datastore.find({'mountpoints':[mountpoint], 'mime_type': media_list})
for f in ds_objects:
object = f.object_id
title = f.metadata['title']
- try:
- t = f.metadata['timestamp']
- except:
- t = 0
- #timestamp = datetime.fromtimestamp(t)
- timestamp = t
- store.append([object, title, timestamp])
+ mime_type = f.metadata['mime_type']
+ date = f.metadata['mtime'].replace('T',' ')
+ store.append([object, title, mime_type, date])
f.destroy()
print 'return smxo store', len(store)
return store