diff --git a/src/core/ct/path.py b/src/core/ct/path.py
index 6c0a4894..0294de3c 100644
--- a/src/core/ct/path.py
+++ b/src/core/ct/path.py
@@ -20,16 +20,27 @@ def join(a,b):
def exists(path):
- return os.path.exists( path )
+ return os.path.exists( expand(path) )
+
+
+def isdir(path):
+ if exists(path) == True:
+ return os.path.isdir( expand(path) )
+ return False
def ls(path):
try:
- return os.listdir(path)
+ return os.listdir( expand(path) )
except:
return None
+def mkdir(path):
+ if exists(path) == False:
+ os.mkdir(path)
+
+
def addPyPath(path):
mods = []
if exists(path) == True:
diff --git a/src/core/ocarina-core.py b/src/core/ocarina-core.py
index 8a9cb6ed..46ba53e6 100644
--- a/src/core/ocarina-core.py
+++ b/src/core/ocarina-core.py
@@ -4,17 +4,18 @@ __author__="bjschuma"
__date__ ="$Mar 13, 2010 4:19:31 PM$"
import ocarina
+import coredefaults
+ocarina.init()
+
from ct.message import write
import scripting
import manager
import cli
import gstreamer
-import coredefaults
+
def main():
- ocarina.init()
-
# Potentially the first thing printed
write("Welcome to Ocarina (core)", 1)
diff --git a/src/core/ocarina.py b/src/core/ocarina.py
index 63069eb9..0447378a 100644
--- a/src/core/ocarina.py
+++ b/src/core/ocarina.py
@@ -26,12 +26,7 @@ plugins = None
# Set default values
def init():
opts.parse()
- #vars["$user"] = path.expand("~")
- #vars["$ocarina"] = path.join(vars["$user"],".ocarina3")
- #vars["$verbose"] = 0
- #vars["$path"] = "coreplug"
- #vars["$prompt"] = ">>>"
- #vars["$playonload"] = True
+ path.mkdir(vars["$ocarina"])
# Set verbose value
if opts.opts.has("v") == True:
diff --git a/src/core/scripting.py b/src/core/scripting.py
index 37293836..d6557bd1 100644
--- a/src/core/scripting.py
+++ b/src/core/scripting.py
@@ -6,10 +6,12 @@
__author__="bjschuma"
__date__ ="$Mar 14, 2010 7:33:16 PM$"
+import re
from ct import cmd
import ocarina
-def runScript(file):
+
+def runOcaScript(file):
fin = open(file)
for line in fin:
# Do some formatting for each line
@@ -17,6 +19,17 @@ def runScript(file):
line = line.strip()
if len(line) > 0:
cmd.run(line)
+
+
+def runScript(file):
+ if re.match("(.*?)\.py",file) == None:
+ runOcaScript(file)
+ else:
+ try:
+ execfile(file)
+ except:
+ print "Error in: " + file
+
def init():
diff --git a/src/extra/et/db.py b/src/extra/db.py
similarity index 90%
rename from src/extra/et/db.py
rename to src/extra/db.py
index a1effa2c..46a78e09 100644
--- a/src/extra/et/db.py
+++ b/src/extra/db.py
@@ -7,10 +7,11 @@ __author__="bjschuma"
__date__ ="$Jan 27, 2010 6:21:27 PM$"
-from bt.message import write
+from ct.message import write
from sqlite3 import *
-from bt import sql
-import settings
+from et import sql
+from ct.path import expand
+#import settings
def init():
@@ -52,10 +53,11 @@ def init():
def newlib(name,path):
try:
- ins = sql.Insert('library',[None,name,path])
+ ins = sql.Insert('library',[None,name,expand(path)])
ins.execute()
+ return 0
except:
- pass
+ return -1
def rmtrk(trid):
@@ -128,15 +130,16 @@ def listlib():
result = sel.execute().fetchall()
id = settings.get("curlib")
curname = ""
- write("Id Name Count Path")
- write("---------------------------")
+ write("Id Name Count Path",2)
+ write("---------------------------",2)
for row in result:
if row[0] == id:
curname = row[1]
count = str( countlib(row[0]) )
write( str(row[0]) + " " +
- row[1] + " " + count + " " + row[2] )
- write("Current: "+curname)
+ row[1] + " " + count + " " + row[2],2 )
+ write("Current: "+curname,2)
+ return result
def getpath(dbid):
@@ -147,4 +150,7 @@ def getpath(dbid):
selt = sql.Select("path","track","id="+str(dbid))
track = selt.execute().fetchone()[0]
- return root+track
\ No newline at end of file
+ return root+track
+
+
+init()
\ No newline at end of file
diff --git a/src/extra/et/__init__.py b/src/extra/et/__init__.py
index fb8928c8..6fa7fdf6 100644
--- a/src/extra/et/__init__.py
+++ b/src/extra/et/__init__.py
@@ -1,4 +1,4 @@
__author__="bjschuma"
__date__ ="$Mar 14, 2010 9:53:12 PM$"
-__all__ = ["db", "sql", "times", "xm"]
\ No newline at end of file
+__all__ = ["needle", "scanlib", "sql", "times", "xm"]
\ No newline at end of file
diff --git a/src/extra/et/needle.py b/src/extra/et/needle.py
new file mode 100644
index 00000000..66d486f2
--- /dev/null
+++ b/src/extra/et/needle.py
@@ -0,0 +1,24 @@
+#! /usr/bin/python
+
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+__author__="bjschuma"
+__date__ ="$Dec 19, 2009 9:30:59 PM$"
+
+
+from threading import Thread
+
+
+class Needle(Thread):
+ def __init__(self, func, args=None):
+ Thread.__init__(self)
+ self.func = func
+ self.args = args
+
+
+ def run(self):
+ if self.args==None:
+ self.func()
+ else:
+ self.func(self.args)
\ No newline at end of file
diff --git a/src/extra/et/scanlib.py b/src/extra/et/scanlib.py
new file mode 100644
index 00000000..43523268
--- /dev/null
+++ b/src/extra/et/scanlib.py
@@ -0,0 +1,186 @@
+#! /usr/bin/python
+
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+__author__="bjschuma"
+__date__ ="$Jan 30, 2010 3:57:53 PM$"
+
+
+from et import sql
+#from bt import needle
+from ct.path import *
+from ct.message import write
+import ocarina
+
+import tagpy
+import re
+
+global total
+global scanned
+global added
+global root
+global goodFiles
+global search
+
+global libid
+
+total = 0
+added = 0
+scanned = 0
+root = ""
+goodFiles = ["ogg", "mp3"]
+
+
+# Generate search string (allows adding to goodFiles later)
+def genSearch():
+ global goodFiles
+ global search
+ search = ".*\.("
+ for index,file in enumerate(goodFiles):
+ if index > 0:
+ search += "|"
+ search += file
+ search += ")"
+
+genSearch()
+
+
+
+# Test if the file extension is in goodFiles
+def testPath(path):
+ global search
+ match = re.search(search,path,re.IGNORECASE)
+ if match == None:
+ return False
+ return True
+
+
+
+def incr(path):
+ global total
+ total += 1
+
+
+# Call to insert either an artist or an album
+def insartalb(table,value):
+ if value == "":
+ value = "Unknown "+table.title()
+ #value = value.replace("\'","\'\'")
+ sel = sql.Select("id",table,'name="' + value + '"')
+ result = sel.execute().fetchall()
+ if result == []:
+ ins = sql.Insert(table,[None,value])
+ ins.execute()
+ result = sel.execute().fetchall()
+ return result[0][0]
+
+
+# Call to insert a new track
+def instrk(arid, alid, title, length, path):
+ global root
+ global libid
+ if title == "":
+ title = "Unknown Title"
+
+ path = path[len(root):]
+
+ sel = sql.Select("id","track",'path="'+path+'"')
+ result = sel.execute().fetchall()
+
+ if result == []:
+ ins = sql.Insert("track", [None, arid, alid, 0, length, title, path] )
+ ins.execute()
+ result = sel.execute().fetchall()
+
+ trid = str(result[0][0])
+
+ where = "library='"+libid+"' AND track='"+trid+"'"
+ sel = sql.Select("*","libtrack",where)
+ result = sel.execute().fetchall()
+ if result == []:
+ ins = sql.Insert("libtrack",[int(libid),int(trid)])
+ ins.execute()
+
+
+
+def addtrk(path):
+ global added
+ global scanned
+
+ scanned += 1
+ try:
+ f = tagpy.FileRef(path)
+ t = f.tag()
+ added += 1
+ except:
+ return
+
+ try:
+ arid = insartalb("artist", t.artist)
+ alid = insartalb("album", t.album)
+
+ a = f.audioProperties()
+ instrk(arid, alid, t.title, a.length, path)
+ except:
+ write("Error adding: "+path)
+ #pass
+
+
+
+def scan(dir,func):
+ files = ls(dir)
+ for file in files:
+ path = join(dir,file)
+ if isdir(path) == True:
+ scan(path,func)
+ else:
+ if testPath(path) == True:
+ func(path)
+
+
+def go(name):
+ global total
+ global added
+ global scanned
+ global root
+ global libid
+ total = 0
+ added = 0
+ scanned = 0
+
+ sel = sql.Select("id,path","library","name='"+name+"'")
+ result = sel.execute().fetchall()
+ if result == []:
+ return
+ libid = str(result[0][0])
+ path = result[0][1]
+ root = path
+
+ ocarina.events.start("ocarina-scanlib-start")
+ # Start a thread to count the total number of files to scan
+ #totthr = needle.Needle(scan,(path,incr))
+ #totthr.start()
+ scan(path,incr)
+ #print "Done scanning"
+ #print total, added
+ scan(path,addtrk)
+ ocarina.events.start("ocarina-scanlib-stop")
+
+ # Start a thread to actually add tracks to the db
+ #scthr = needle.Needle(scan,(path,addtrk))
+ #scthr.start()
+
+
+def prcnt():
+ global total
+ global scanned
+ global added
+ write( str(scanned) + " / " + str(total) )
+ write( "Added " + str(added) + " tracks." )
+
+
+def progress():
+ global total
+ global added
+ return (added,total)
\ No newline at end of file
diff --git a/src/extra/et/sql.py b/src/extra/et/sql.py
index abd5cec9..d01d00f7 100644
--- a/src/extra/et/sql.py
+++ b/src/extra/et/sql.py
@@ -8,13 +8,13 @@ __author__="bjschuma"
__date__ ="$Jan 23, 2010 8:40:03 PM$"
import sqlite3
-import settings
+#import settings
from ct.path import *
import ocarina
def getdb():
- return join(ocarina.vars["$ocarina"]+"ocarina.db")
+ return join(ocarina.vars["$ocarina"],"ocarina.db")
def dbexists():
diff --git a/src/extra/extradefaults.py b/src/extra/extradefaults.py
index d6e9b267..a4082049 100644
--- a/src/extra/extradefaults.py
+++ b/src/extra/extradefaults.py
@@ -8,7 +8,9 @@ __date__ ="$Mar 15, 2010 9:56:53 PM$"
from ocarina import vars
-vars["$theme"] = "simple.xml"
+import coredefaults
+#vars["$theme"] = "themes/simple.xml"
+vars["$theme"] = "themes/classic.xml"
vars["$artist"] = ""
vars["$album"] = ""
vars["$title"] = ""
\ No newline at end of file
diff --git a/src/extra/guibuilder.py b/src/extra/guibuilder.py
index ef16b5a5..295df1b8 100644
--- a/src/extra/guibuilder.py
+++ b/src/extra/guibuilder.py
@@ -20,6 +20,32 @@ parts = dict()
global buildFunc
buildFunc = None
+global window
+window = None
+
+
+def buildTabs(node,tabs):
+ global buildFunc
+
+ for child in xm.children(node):
+ if child.nodeName=="tab":
+ label = None
+ content = None
+ for gchild in xm.children(child):
+ if gchild.nodeName == "tablabel":
+ for ggchild in xm.children(gchild):
+ item = buildFunc(ggchild)
+ if item != None:
+ label = item
+ elif gchild.nodeName == "tabcontent":
+ for ggchild in xm.children(gchild):
+ item = buildFunc(ggchild)
+ if item != None:
+ content = item
+
+ if content != None:
+ tabs.append_page(content,label)
+
def buildMenu(node,menu):
global buildFunc
@@ -83,13 +109,18 @@ def build(node):
fill(node,part)
elif (tag=="menubar") or (tag=="menuitem"):
buildMenu(node,part)
+ elif (tag=="tabs"):
+ buildTabs(node,part)
return part
def init():
- write("Building gui",1)
+ global window
+ if window != None:
+ window.hide()
+ write("Building gui from file: "+ocarina.vars["$theme"],1)
doc = xm.load(ocarina.vars["$theme"])
- build( xm.child(doc) )
+ window = build( xm.child(doc) )
buildFunc = build
diff --git a/src/extra/oGtk/__init__.py b/src/extra/oGtk/__init__.py
index 5fa0ebee..616151e4 100644
--- a/src/extra/oGtk/__init__.py
+++ b/src/extra/oGtk/__init__.py
@@ -2,5 +2,5 @@ __author__="bjschuma"
__date__ ="$Mar 14, 2010 10:21:40 PM$"
-__all__ = ["box", "button", "label", "label", "menu",
- "progbar", "songInfo", "window"]
\ No newline at end of file
+__all__ = ["box", "button", "dialog", "label", "label", "list", "menu",
+ "progbar", "songInfo", "tabs", "window"]
\ No newline at end of file
diff --git a/src/extra/oGtk/dialog.py b/src/extra/oGtk/dialog.py
new file mode 100644
index 00000000..d17f072e
--- /dev/null
+++ b/src/extra/oGtk/dialog.py
@@ -0,0 +1,73 @@
+#! /usr/bin/python
+
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+__author__="bjschuma"
+__date__ ="$Mar 18, 2010 11:48:15 AM$"
+
+
+import gtk
+import db
+import ocarina
+import scripting
+from oGtk import progbar
+
+class FileChooser(gtk.FileChooserDialog):
+ def __init__(self,title,seldir=False):
+ buttons = (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)
+ action=gtk.FILE_CHOOSER_ACTION_OPEN
+ gtk.FileChooserDialog.__init__(self,title,None,action=action,buttons=buttons)
+ if seldir == True:
+ self.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
+
+ def choose(self):
+ response = self.run()
+ self.hide()
+ file = ""
+ #print response
+ if response == gtk.RESPONSE_OK:
+ file = self.get_filename()
+ if response != gtk.RESPONSE_OK:
+ return None
+ return file
+
+
+
+class NewLibrary(gtk.Dialog):
+ def __init__(self):
+ buttons = (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,"Scan",gtk.RESPONSE_OK)
+ gtk.Dialog.__init__(self,"New Library",None,gtk.DIALOG_NO_SEPARATOR,buttons=buttons)
+
+ self.table = gtk.Table(2,3,False)
+
+ name = gtk.Label("Name: ")
+ dir = gtk.Label("Directory: ")
+ self.libname = gtk.Entry()
+ self.libname.set_text("New Library")
+ self.dir = gtk.Entry()
+ button = gtk.Button(None,gtk.STOCK_OPEN)
+ button.connect("clicked",self.onclick)
+
+ self.table.attach(name,0,1,0,1)
+ self.table.attach(self.libname,1,2,0,1)
+ self.table.attach(dir,0,1,1,2)
+ self.table.attach(self.dir,1,2,1,2)
+ self.table.attach(button,2,3,1,2)
+
+ self.table.show_all()
+ self.get_children()[0].pack_start(self.table,False,False,0)
+
+
+ def choose(self):
+ response = self.run()
+ self.hide()
+ if response == -5:
+ return (self.libname.get_text(), self.dir.get_text())
+ return (None,None)
+
+
+ def onclick(self,button):
+ dirresult = FileChooser("Select a directory",True).choose()
+ if dirresult != "":
+ self.dir.set_text(dirresult)
\ No newline at end of file
diff --git a/src/extra/oGtk/list.py b/src/extra/oGtk/list.py
new file mode 100644
index 00000000..259192cf
--- /dev/null
+++ b/src/extra/oGtk/list.py
@@ -0,0 +1,72 @@
+#! /usr/bin/python
+
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+__author__="bjschuma"
+__date__ ="$Mar 21, 2010 1:06:27 PM$"
+
+import gtk
+import guibuilder
+import db
+
+
+class SongList(gtk.ScrolledWindow):
+ def __init__(self):
+ gtk.ScrolledWindow.__init__(self)
+ self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+
+ self.list = gtk.ListStore(int,str,str,str,str,int)
+ self.tree = gtk.TreeView(self.list)
+ self.tree.set_reorderable(True)
+ cell = gtk.CellRendererText()
+ cols = ["Id","Title","Length","Artist","Album","Play Count"]
+ for i in range(len(cols)):
+ col = gtk.TreeViewColumn(cols[i],cell)
+ col.add_attribute(cell,'text',i)
+ col.set_resizable(True)
+ col.set_sort_column_id(i)
+ col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ col.set_min_width(2)
+ col.set_max_width(700)
+ col.set_fixed_width(150)
+ col.set_sort_indicator(True)
+ if cols[i] != "Id":
+ self.tree.append_column(col)
+
+ self.tree.set_rules_hint(True)
+ #self.tree.connect("row-activated",self.selectSong,"clicked",list)
+ #self.tree.connect("button_release_event",self.clicked)
+ self.sel = self.tree.get_selection()
+ self.sel.set_mode(gtk.SELECTION_MULTIPLE)
+ #self.list.set_sort_column_id(self.data.sortedCol,gtk.SORT_ASCENDING)
+ self.cols = self.tree.get_columns()
+ #self.loadCols()
+ #self.tree.show()
+ self.add(self.tree)
+ self.show_all()
+
+
+ # Add a row to the list
+ def insert(self,file):
+ self.list.insert(self.count,[file.id,file.title,file.length,file.artist,file.album,file.count])
+ self.count+=1
+ self.seconds+=file.duration
+
+
+
+class LibraryList(SongList):
+ def __init__(self):
+ SongList.__init__(self)
+ libid = db.libid("Music")
+ #print db.listlib()
+
+
+
+
+
+
+def make_songlist(attrs=None):return SongList()
+def make_librarylist(attrs=None):return LibraryList()
+guibuilder.parts["songlist"] = make_songlist
+guibuilder.parts["librarylist"] = make_librarylist
diff --git a/src/extra/oGtk/menu.py b/src/extra/oGtk/menu.py
index eefd153b..301eed19 100644
--- a/src/extra/oGtk/menu.py
+++ b/src/extra/oGtk/menu.py
@@ -11,6 +11,11 @@ import gtk
import ocarina
import guibuilder
from ct import cmd
+from oGtk import dialog
+from oGtk import window
+from et import scanlib
+from et import needle
+import db
class MenuBar(gtk.MenuBar):
@@ -88,23 +93,45 @@ class MenuStop(gtk.ImageMenuItem):
class MenuSongSelect(gtk.MenuItem):
def __init__(self):
- gtk.MenuItem.__init__(self,"Play File")
+ gtk.MenuItem.__init__(self,"Select song")
self.connect("activate",self.onclick)
self.show()
def onclick(self,menu):
- buttons = (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)
- chooser = gtk.FileChooserDialog("Select a song",None,action=gtk.FILE_CHOOSER_ACTION_OPEN,buttons=buttons)
- response = chooser.run()
- chooser.hide()
- file = ""
- if response == gtk.RESPONSE_OK:
- file = chooser.get_filename()
- #chooser.hide()
- if response != gtk.RESPONSE_OK:
- return
+ file = dialog.FileChooser("Select a song").choose()
+ if file!=None:
+ cmd.run("load " + file)
- cmd.run("load "+file)
+
+
+class MenuLibNew(gtk.MenuItem):
+ def __init__(self):
+ gtk.MenuItem.__init__(self,"New Library")
+ self.connect("activate",self.onclick)
+ self.show()
+
+ def onclick(self,menu):
+ choice = dialog.NewLibrary()
+ (name,path) = choice.choose()
+ del choice
+ if name != None:
+ db.newlib(name,path)
+ thread = needle.Needle(scanlib.go,name)
+ thread.start()
+
+
+class MenuTheme(gtk.MenuItem):
+ def __init__(self):
+ gtk.MenuItem.__init__(self,"Change Theme")
+ self.connect("activate", self.onclick)
+ self.show()
+
+ def onclick(self,menu):
+ file = dialog.FileChooser("Select a theme file").choose()
+ if file!=None:
+ print file
+ ocarina.vars["$theme"] = str(file)
+ guibuilder.init()
@@ -114,10 +141,14 @@ def make_menuplay(attrs=None):return MenuPlay()
def make_menupause(attrs=None):return MenuPause()
def make_menustop(attrs=None):return MenuStop()
def make_menusongsel(attrs=None):return MenuSongSelect()
+def make_menulibnew(attrs=None):return MenuLibNew()
+def make_menutheme(attrs=None):return MenuTheme()
guibuilder.parts["menubar"] = make_menubar
guibuilder.parts["menuitem"] = make_menuitem
guibuilder.parts["menuplay"] = make_menuplay
guibuilder.parts["menupause"] = make_menupause
guibuilder.parts["menustop"] = make_menustop
-guibuilder.parts["menusongsel"] = make_menusongsel
\ No newline at end of file
+guibuilder.parts["menusongsel"] = make_menusongsel
+guibuilder.parts["menulibnew"] = make_menulibnew
+guibuilder.parts["menutheme"] = make_menutheme
\ No newline at end of file
diff --git a/src/extra/oGtk/progbar.py b/src/extra/oGtk/progbar.py
index 8336ff52..cee7fa22 100644
--- a/src/extra/oGtk/progbar.py
+++ b/src/extra/oGtk/progbar.py
@@ -12,7 +12,11 @@ import gobject
import guibuilder
import gstreamer
+import ocarina
+
from et import times
+from et import scanlib
+
class ProgressBar(gtk.EventBox):
def __init__(self):
@@ -36,12 +40,37 @@ class ProgressBar(gtk.EventBox):
def updatebar(self):
- self.bar.set_fraction(gstreamer.getProgress())
- current = times.ftime(gstreamer.currentpos())
- duration = times.ftime(gstreamer.duration())
- self.bar.set_text(current + " / " + duration)
+ try:
+ self.bar.set_fraction(gstreamer.getProgress())
+ current = times.ftime(gstreamer.currentpos())
+ duration = times.ftime(gstreamer.duration())
+ self.bar.set_text(current + " / " + duration)
+ except:
+ pass
+ return True
+
+
+
+class LibScanBar(gtk.ProgressBar):
+ def __init__(self):
+ gtk.ProgressBar.__init__(self)
+ gobject.timeout_add(500,self.updatebar)
+ ocarina.events.invite("ocarina-scanlib-start",self.show)
+ ocarina.events.invite("ocarina-scanlib-stop",self.hide)
+
+
+ def updatebar(self):
+ (cur,tot) = scanlib.progress()
+ if cur > 0:
+ self.set_text(str(cur) + " / " + str(tot))
+ self.set_fraction(float(cur) / float(tot))
+ else:
+ self.set_text(str(tot))
+ self.set_fraction(0)
return True
def make_progbar(attrs):return ProgressBar()
-guibuilder.parts["progbar"] = make_progbar
\ No newline at end of file
+def make_libscanbar(attrs):return LibScanBar()
+guibuilder.parts["progbar"] = make_progbar
+guibuilder.parts["scanlibbar"] = make_libscanbar
\ No newline at end of file
diff --git a/src/extra/oGtk/tabs.py b/src/extra/oGtk/tabs.py
new file mode 100644
index 00000000..043ad5b6
--- /dev/null
+++ b/src/extra/oGtk/tabs.py
@@ -0,0 +1,20 @@
+#! /usr/bin/python
+
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+__author__="bjschuma"
+__date__ ="$Mar 21, 2010 12:47:11 PM$"
+
+
+import gtk
+import guibuilder
+
+class Tabs(gtk.Notebook):
+ def __init__(self):
+ gtk.Notebook.__init__(self)
+ self.show()
+
+
+def make_tabs(attrs=None):return Tabs()
+guibuilder.parts["tabs"] = make_tabs
diff --git a/src/extra/oGtk/window.py b/src/extra/oGtk/window.py
index 208d6a66..1762fe51 100644
--- a/src/extra/oGtk/window.py
+++ b/src/extra/oGtk/window.py
@@ -10,6 +10,7 @@ import gtk
import guibuilder
import ocarina
+from oGtk import progbar
class Window(gtk.Window):
def __init__(self, attrs):
@@ -36,5 +37,14 @@ class Window(gtk.Window):
ocarina.events.start(self.quitEvent)
+class LibScanWin(gtk.Window):
+ def __init__(self):
+ gtk.Window.__init__(self)
+ self.bar = progbar.LibScanBar()
+ self.add(self.bar)
+ self.bar.show()
+ self.show()
+
+
def make_window(attrs):return Window(attrs)
guibuilder.parts["window"] = make_window
\ No newline at end of file
diff --git a/src/extra/ocarina-extra.py b/src/extra/ocarina-extra.py
index 09cfb68b..b1cd378e 100644
--- a/src/extra/ocarina-extra.py
+++ b/src/extra/ocarina-extra.py
@@ -8,13 +8,15 @@ sys.path.append("core")
import ocarina
+import extradefaults
+ocarina.init()
+
from ct.message import write
import scripting
import manager
#import cli
import gstreamer
-import coredefaults
-import extradefaults
+
import guibuilder
from oGtk import *
@@ -25,7 +27,7 @@ gobject.threads_init()
def main():
- ocarina.init()
+ #ocarina.init()
# Potentially the first thing printed
write("Welcome to Ocarina (extra)", 1)
diff --git a/src/extra/sql.py b/src/extra/sql.py
deleted file mode 100644
index 5ec3ed3e..00000000
--- a/src/extra/sql.py
+++ /dev/null
@@ -1,136 +0,0 @@
-import os.path
-#! /usr/bin/python
-
-# To change this template, choose Tools | Templates
-# and open the template in the editor.
-
-__author__="bjschuma"
-__date__ ="$Jan 23, 2010 8:40:03 PM$"
-
-from bt.file import checkPath
-import sqlite3
-import settings
-from bt.file import *
-
-
-def getdb():
- return join(settings.get("appdir"), settings.get("appname")+".db")
-
-
-def dbexists():
- return checkPath(getdb())
-
-
-def connect():
- path = getdb()
- con = sqlite3.connect(path)
- con.text_factory = str
- return con
-
-
-def disconnect(con):
- con.commit()
- con.close()
-
-
-
-
-class Statement():
- def __init__(self):
- self.statement = ""
- self.con = connect()
- self.commit = True
-
- def __del__(self):
- self.con.close()
-
- def commitdb(self):
- self.con.commit()
-
- def execute(self,vals=None):
- if self.statement == "":
- return
- if vals==None:
- result = self.con.execute(self.statement)
- else:
- result = self.con.execute(self.statement,vals)
-
- if self.commit == True:
- self.commitdb()
- return result
-
-
-
-
-class CTable(Statement):
- def __init__(self,name):
- Statement.__init__(self)
- self.name = name
- self.cols = []
-
- def addcol(self,name,type,params=""):
- self.cols += [(name,type,params)]
-
- def execute(self):
- self.statement = "CREATE TABLE "+self.name + " ("
- for index,col in enumerate(self.cols):
- if not index == 0:
- self.statement += ", "
- self.statement += " " + col[0] + " " + col[1] + " " + col[2]
- self.statement += " );"
- return Statement.execute(self)
-
-
-
-
-class Select(Statement):
- def __init__(self,What,From,Where=None):
- Statement.__init__(self)
- self.commit = False
- self.What = What
- self.From = From
- self.Where = Where
-
- def execute(self):
- self.statement = "SELECT " + self.What
- self.statement += " FROM " + self.From
- if not self.Where==None:
- self.statement += " WHERE " + self.Where
- return Statement.execute(self)
-
-
-
-
-class Insert(Statement):
- def __init__(self,table,values=[]):
- Statement.__init__(self)
- self.table = table
- self.values = values
-
- def addval(self,val):
- self.values += [val]
-
- def execute(self):
- self.statement = "INSERT INTO "+ self.table + " VALUES("
- qs = ""
- for i in range(len(self.values)):
- if not i == 0:
- qs+=","
- qs+="?"
- #self.values[i] = str(self.values[i])
- self.statement+=qs + ")"
- Statement.execute(self, self.values)
-
-
-
-class Remove(Statement):
- def __init__(self,table,where=""):
- Statement.__init__(self)
- self.table = table
- self.where = where
-
- def execute(self):
- self.statement = "DELETE FROM " + self.table
- if not self.where=="":
- self.statement += " WHERE "+self.where
- Statement.execute(self)
diff --git a/src/themes/classic.xml b/src/themes/classic.xml
new file mode 100644
index 00000000..672b7be2
--- /dev/null
+++ b/src/themes/classic.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/simple.xml b/src/themes/simple.xml
similarity index 73%
rename from src/simple.xml
rename to src/themes/simple.xml
index d93a3ab8..c265a83a 100644
--- a/src/simple.xml
+++ b/src/themes/simple.xml
@@ -3,18 +3,15 @@
-
+
+
+