diff --git a/libsaria/__init__.py b/libsaria/__init__.py index 66d2d4a2..12fc8c5c 100644 --- a/libsaria/__init__.py +++ b/libsaria/__init__.py @@ -1,7 +1,7 @@ # Bryan Schumaker (8/7/2010) __all__ = [ "collection", "music", - "data", "event", "map", "path"] + "data", "event", "map", "path", "plugin"] import event import path @@ -12,7 +12,8 @@ vars = None prefs = None -def startup(): +# Initialize helpful variables +def init(): global vars global prefs vars = Map() @@ -20,7 +21,12 @@ def startup(): event.start("POSTINIT") +# If a preference has not already been set, set pref[key] = value def init_pref(key, value): global prefs if prefs.get(key) == None: prefs[key] = value + + +def startup(): + pass diff --git a/libsaria/data.py b/libsaria/data.py index e7afb8aa..e43fcad0 100644 --- a/libsaria/data.py +++ b/libsaria/data.py @@ -2,11 +2,12 @@ from libsaria import path import cPickle as pickle +plugin = None PROTO = pickle.HIGHEST_PROTOCOL def save(item, file, ext="pickle"): - file = "%s.%s" % (path.join(path.sariadir(),file), ext) + file = "%s.%s" % (path.join(path.saria_dir(),file), ext) savefile(item, file) @@ -18,7 +19,7 @@ def savefile(item, file): def load(file, ext="pickle"): - file = "%s.%s" % (path.join(path.sariadir(),file),ext) + file = "%s.%s" % (path.join(path.saria_dir(),file),ext) return loadfile(file) @@ -32,3 +33,12 @@ def loadfile(file): return item +def universal_open(file): + global plugin + split = file.rsplit('.', 1) + ext = split[len(split)-1] + # Install and start a plugin + if ext == "py": + if plugin == None: + from libsaria import plugin + plugin.install(file) diff --git a/libsaria/path.py b/libsaria/path.py index 77d68dce..4830e73c 100644 --- a/libsaria/path.py +++ b/libsaria/path.py @@ -8,13 +8,50 @@ join = os.path.join mkdir = os.mkdir rm = os.remove walk = os.walk +sep = os.sep -dir = None -def sariadir(): - global dir - if dir == None: - dir = join(expand("~"), ".saria") - if exists(dir) == False: - mkdir(dir) - return dir +cp = None +saria_dir = None +plugin_dir = None +shutil = None +s_dir = None +p_dir = None + + +def saria_dir_once(): + global s_dir + global saria_dir + s_dir = join(expand("~"), ".saria") + if exists(s_dir) == False: + mkdir(s_dir) + saria_dir = saria_dir_rest + return s_dir +def saria_dir_rest(): + global s_dir + return s_dir +saria_dir = saria_dir_once + + +def plugin_dir_once(): + global p_dir + global saria_dir + saria = saria_dir() + p_dir = join(saria, "plugins") + if exists(p_dir) == False: + mkdir(p_dir) + plugin_dir = plugin_dir_rest + return p_dir +def plugin_dir_rest(): + global p_dir + return p_dir +plugin_dir = plugin_dir_once + + +def cp_once(src, dest): + global cp + global shutil + import shutil + cp = shutil.copy + cp(src, dest) +cp = cp_once diff --git a/libsaria/plugin.py b/libsaria/plugin.py new file mode 100644 index 00000000..7690b729 --- /dev/null +++ b/libsaria/plugin.py @@ -0,0 +1,12 @@ +# Bryan Schumaker (8/15/2010) + +path = None + +def install(filepath): + global path + if path == None: + from libsaria import path + split = filepath.rsplit(path.sep, 1) + file = split[len(split)-1] + dest = path.join(path.plugin_dir(), file) + path.cp(filepath, dest) diff --git a/ocarina.py b/ocarina.py index a5e27fb8..a1b4a5cf 100755 --- a/ocarina.py +++ b/ocarina.py @@ -4,7 +4,7 @@ import libsaria import ocarina -libsaria.startup() +libsaria.init() libsaria.init_pref("window_size", (800,600)) prefs = libsaria.prefs @@ -17,4 +17,5 @@ win = ocarina.get_window(prefs["window_size"]) #win.move(0,0) ocarina.add_tab("Test", label) +libsaria.startup() ocarina.startup() diff --git a/ocarina/__init__.py b/ocarina/__init__.py index d6c9d396..834551c1 100644 --- a/ocarina/__init__.py +++ b/ocarina/__init__.py @@ -9,8 +9,8 @@ tabs = None # Function override variables -get_main_tabs = None -get_window = None +get_tabs = None +get_window = None # Global variables for some objects @@ -27,37 +27,37 @@ def exit(widget, event): gtk.main_quit() -def get_main_tabs_init(): +def get_tabs_once(): global tabs - global get_main_tabs + global get_tabs global main_tabs import tabs main_tabs = tabs.Tabs() main_tabs - get_main_tabs = get_main_tabs_always + get_tabs = get_tabs_rest return main_tabs -def get_main_tabs_always(): +def get_tabs_rest(): global main_tabs return main_tabs -get_main_tabs = get_main_tabs_init +get_tabs = get_tabs_once def add_tab(text, content): - tabs = get_main_tabs() + tabs = get_tabs() tabs.append_page(content, text) -def get_window_init(size): +def get_window_once(size): global window global get_window global main_window import window main_window = window.Window(size) - main_window.add(get_main_tabs()) - get_window = get_window_always + main_window.add(get_tabs()) + get_window = get_window_rest return main_window -def get_window_always(size=None): +def get_window_rest(size=None): global main_window if size != None: main_window.resize(size[0], size[1]) return main_window -get_window = get_window_init +get_window = get_window_once diff --git a/ocarina/window.py b/ocarina/window.py index 8d1a83c9..4676aa70 100644 --- a/ocarina/window.py +++ b/ocarina/window.py @@ -3,6 +3,7 @@ import ocarina libsaria = ocarina.libsaria gtk = ocarina.gtk +data = None TARGET_TYPE_URI_LIST = 80 @@ -28,9 +29,12 @@ class Window(gtk.Window): def dnd_receive(self, widget, context, x, y, selection, type, time): + global data + if data == None: + from libsaria import data if type == TARGET_TYPE_URI_LIST: uri = selection.data.strip('\r\n\x00') import os for file in uri.split(): file = file[7:] - print file, os.path.isfile(file) + data.universal_open(file) diff --git a/plugins/web_radio.py b/plugins/web_radio.py new file mode 100644 index 00000000..e69de29b diff --git a/saria-test.py b/saria-test.py index cf4cfc40..a732a610 100755 --- a/saria-test.py +++ b/saria-test.py @@ -16,7 +16,7 @@ print "libsaria loaded (", after-before, ")" if len(sys.argv) == 1: before = now() - libsaria.startup() + libsaria.init() after = now() print "startup took", after-before print