Web Radio Plugin
The web radio plugin can load pandora and grooveshark. This happens when a web radio tab is selected. After the web document is loaded, playing music will be paused.
This commit is contained in:
parent
853dde3ea7
commit
66a8c5169e
|
@ -8,9 +8,12 @@ import path
|
||||||
from map import Map
|
from map import Map
|
||||||
|
|
||||||
# Variables are not saved across sessions, but preferences are
|
# Variables are not saved across sessions, but preferences are
|
||||||
vars = None
|
vars = None
|
||||||
prefs = None
|
prefs = None
|
||||||
|
|
||||||
|
plugin = None
|
||||||
|
music = None
|
||||||
|
|
||||||
|
|
||||||
# Initialize helpful variables
|
# Initialize helpful variables
|
||||||
def init():
|
def init():
|
||||||
|
@ -29,4 +32,14 @@ def init_pref(key, value):
|
||||||
|
|
||||||
|
|
||||||
def startup():
|
def startup():
|
||||||
pass
|
global music
|
||||||
|
global plugin
|
||||||
|
import music
|
||||||
|
import plugin
|
||||||
|
music.init()
|
||||||
|
plugin.load_all()
|
||||||
|
|
||||||
|
|
||||||
|
def shutdown():
|
||||||
|
event.start("PREQUIT")
|
||||||
|
event.start("POSTQUIT")
|
||||||
|
|
|
@ -2,13 +2,15 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
exists = os.path.exists
|
exists = os.path.exists
|
||||||
expand = os.path.expanduser
|
expand = os.path.expanduser
|
||||||
join = os.path.join
|
splitext = os.path.splitext
|
||||||
mkdir = os.mkdir
|
join = os.path.join
|
||||||
rm = os.remove
|
mkdir = os.mkdir
|
||||||
walk = os.walk
|
rm = os.remove
|
||||||
sep = os.sep
|
ls = os.listdir
|
||||||
|
walk = os.walk
|
||||||
|
sep = os.sep
|
||||||
|
|
||||||
cp = None
|
cp = None
|
||||||
saria_dir = None
|
saria_dir = None
|
||||||
|
|
|
@ -1,12 +1,91 @@
|
||||||
# Bryan Schumaker (8/15/2010)
|
# Bryan Schumaker (8/15/2010)
|
||||||
|
|
||||||
path = None
|
# Lazy loaded modules
|
||||||
|
path = None
|
||||||
|
imp = None
|
||||||
|
|
||||||
def install(filepath):
|
# Runtime variables
|
||||||
|
p_dir = None
|
||||||
|
loaded = dict()
|
||||||
|
|
||||||
|
# Function variables
|
||||||
|
install = None
|
||||||
|
load_all = None
|
||||||
|
load_plugin = None
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
global path
|
global path
|
||||||
|
global p_dir
|
||||||
if path == None:
|
if path == None:
|
||||||
from libsaria import path
|
from libsaria import path
|
||||||
|
if p_dir == None:
|
||||||
|
p_dir = path.plugin_dir()
|
||||||
|
|
||||||
|
|
||||||
|
def install_once(filepath):
|
||||||
|
global install
|
||||||
|
init()
|
||||||
|
install = install_rest
|
||||||
|
install(filepath)
|
||||||
|
def install_rest(filepath):
|
||||||
|
global p_dir
|
||||||
|
global path
|
||||||
split = filepath.rsplit(path.sep, 1)
|
split = filepath.rsplit(path.sep, 1)
|
||||||
file = split[len(split)-1]
|
file = split[len(split)-1]
|
||||||
dest = path.join(path.plugin_dir(), file)
|
dest = path.join(p_dir, file)
|
||||||
path.cp(filepath, dest)
|
path.cp(filepath, dest)
|
||||||
|
split = path.splitext(file)
|
||||||
|
if split[len(split)-1] == ".py":
|
||||||
|
name = split[0]
|
||||||
|
load_plugin(name, dest)
|
||||||
|
install = install_once
|
||||||
|
|
||||||
|
|
||||||
|
def load_all_once():
|
||||||
|
global load_all
|
||||||
|
init()
|
||||||
|
load_all = load_all_rest
|
||||||
|
load_all()
|
||||||
|
def load_all_rest():
|
||||||
|
global load_plugin
|
||||||
|
global path
|
||||||
|
global p_dir
|
||||||
|
for file in path.ls(p_dir):
|
||||||
|
split = path.splitext(file)
|
||||||
|
if split[len(split)-1] == ".py":
|
||||||
|
load_plugin(split[0], path.join(p_dir, file))
|
||||||
|
load_all = load_all_once
|
||||||
|
|
||||||
|
|
||||||
|
def load_plugin_once(name, file):
|
||||||
|
global load_plugin
|
||||||
|
global imp
|
||||||
|
import imp
|
||||||
|
load_plugin = load_plugin_rest
|
||||||
|
load_plugin(name, file)
|
||||||
|
def load_plugin_rest(name, file):
|
||||||
|
global imp
|
||||||
|
global path
|
||||||
|
global loaded
|
||||||
|
|
||||||
|
if name in loaded:
|
||||||
|
mod = loaded[name]
|
||||||
|
if hasattr(mod, "stop"):
|
||||||
|
loaded[name].stop()
|
||||||
|
del globals()[name]
|
||||||
|
|
||||||
|
try:
|
||||||
|
mod = imp.load_source(name, file)
|
||||||
|
except Exception, e:
|
||||||
|
print "Error loading plugin: %s" % file
|
||||||
|
print e
|
||||||
|
|
||||||
|
try:
|
||||||
|
globals()[name] = mod
|
||||||
|
loaded[name] = mod
|
||||||
|
mod.start()
|
||||||
|
except Exception, e:
|
||||||
|
print "Error starting plugin: %s" % file
|
||||||
|
print e
|
||||||
|
load_plugin = load_plugin_once
|
||||||
|
|
|
@ -14,8 +14,7 @@ label = gtk.Label("Ocarina 4.1")
|
||||||
label.show()
|
label.show()
|
||||||
|
|
||||||
win = ocarina.get_window(prefs["window_size"])
|
win = ocarina.get_window(prefs["window_size"])
|
||||||
#win.move(0,0)
|
ocarina.set_window_title("Ocarina 4.1")
|
||||||
ocarina.add_tab("Test", label)
|
ocarina.add_tab("Test", label)
|
||||||
|
|
||||||
libsaria.startup()
|
|
||||||
ocarina.startup()
|
ocarina.startup()
|
||||||
|
|
|
@ -21,10 +21,12 @@ main_tabs = None
|
||||||
def startup():
|
def startup():
|
||||||
global gtk
|
global gtk
|
||||||
import gtk
|
import gtk
|
||||||
|
libsaria.startup()
|
||||||
gtk.main()
|
gtk.main()
|
||||||
|
|
||||||
def exit(widget, event):
|
def exit(widget, event):
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
libsaria.shutdown()
|
||||||
|
|
||||||
|
|
||||||
def get_tabs_once():
|
def get_tabs_once():
|
||||||
|
@ -45,6 +47,12 @@ def add_tab(text, content):
|
||||||
tabs = get_tabs()
|
tabs = get_tabs()
|
||||||
tabs.append_page(content, text)
|
tabs.append_page(content, text)
|
||||||
|
|
||||||
|
def remove_tab(content):
|
||||||
|
tabs = get_tabs()
|
||||||
|
n = tabs.page_num(content)
|
||||||
|
if n > 0:
|
||||||
|
tabs.remove_page(n)
|
||||||
|
|
||||||
|
|
||||||
def get_window_once(size):
|
def get_window_once(size):
|
||||||
global window
|
global window
|
||||||
|
@ -61,3 +69,7 @@ def get_window_rest(size=None):
|
||||||
main_window.resize(size[0], size[1])
|
main_window.resize(size[0], size[1])
|
||||||
return main_window
|
return main_window
|
||||||
get_window = get_window_once
|
get_window = get_window_once
|
||||||
|
|
||||||
|
def set_window_title(text):
|
||||||
|
window = get_window()
|
||||||
|
window.set_title(text)
|
||||||
|
|
|
@ -9,6 +9,8 @@ class Tabs(gtk.Notebook):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
gtk.Notebook.__init__(self)
|
gtk.Notebook.__init__(self)
|
||||||
self.set_tab_pos(gtk.POS_LEFT)
|
self.set_tab_pos(gtk.POS_LEFT)
|
||||||
|
self.connect("switch-page", self.switch_page)
|
||||||
|
self.cur_page = 0
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,3 +19,13 @@ class Tabs(gtk.Notebook):
|
||||||
label.set_angle(90)
|
label.set_angle(90)
|
||||||
gtk.Notebook.append_page(self, content, label)
|
gtk.Notebook.append_page(self, content, label)
|
||||||
self.set_tab_label_packing(content, True, True, gtk.PACK_START)
|
self.set_tab_label_packing(content, True, True, gtk.PACK_START)
|
||||||
|
|
||||||
|
|
||||||
|
def switch_page(self, notebook, page, page_num):
|
||||||
|
old = notebook.get_nth_page(self.cur_page)
|
||||||
|
if hasattr(old, "invisible"):
|
||||||
|
old.invisible()
|
||||||
|
new = notebook.get_nth_page(page_num)
|
||||||
|
if hasattr(new, "visible"):
|
||||||
|
new.visible()
|
||||||
|
self.cur_page = page_num
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
# Bryan Schumaker (8/14/2010)
|
||||||
|
|
||||||
|
import ocarina
|
||||||
|
music = ocarina.libsaria.music
|
||||||
|
gtk = ocarina.gtk
|
||||||
|
webkit = None
|
||||||
|
|
||||||
|
children = []
|
||||||
|
|
||||||
|
|
||||||
|
class WebRadio(gtk.ScrolledWindow):
|
||||||
|
def __init__(self, url):
|
||||||
|
gtk.ScrolledWindow.__init__(self)
|
||||||
|
self.url = url
|
||||||
|
self.web = None
|
||||||
|
self.show()
|
||||||
|
|
||||||
|
def visible(self):
|
||||||
|
if self.web == None:
|
||||||
|
self.web = webkit.WebView()
|
||||||
|
self.web.open(self.url)
|
||||||
|
#self.web.connect("load-finished", self.load_finished)
|
||||||
|
self.web.connect("document-load-finished", self.doc_load_finished)
|
||||||
|
self.add(self.web)
|
||||||
|
self.web.show()
|
||||||
|
|
||||||
|
def doc_load_finished(self, view, webframe):
|
||||||
|
music.pause()
|
||||||
|
|
||||||
|
def start():
|
||||||
|
global webkit
|
||||||
|
global children
|
||||||
|
import webkit
|
||||||
|
|
||||||
|
pandora = WebRadio("http://www.pandora.com")
|
||||||
|
children.append(pandora)
|
||||||
|
ocarina.add_tab("Pandora", pandora)
|
||||||
|
|
||||||
|
groove = WebRadio("http://www.grooveshark.com")
|
||||||
|
children.append(groove)
|
||||||
|
ocarina.add_tab("Groove Shark", groove)
|
||||||
|
|
||||||
|
|
||||||
|
def stop():
|
||||||
|
for child in children:
|
||||||
|
ocarina.remove_tab(child)
|
Loading…
Reference in New Issue