Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/smile.py
diff options
context:
space:
mode:
Diffstat (limited to 'smile.py')
-rwxr-xr-xsmile.py183
1 files changed, 151 insertions, 32 deletions
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