Adding the file backend as a choice in the UI
authorEd Page <eopage@byu.net>
Sun, 26 Apr 2009 01:35:42 +0000 (20:35 -0500)
committerEd Page <eopage@byu.net>
Sun, 26 Apr 2009 01:35:42 +0000 (20:35 -0500)
src/doneit_glade.py
src/file_backend.py
src/file_view.py [new file with mode: 0644]

index a699ae5..abedb35 100755 (executable)
@@ -212,7 +212,14 @@ class DoneIt(object):
                with gtk_toolbox.gtk_lock():
                        rtmView = rtm_view.RtmView(self._widgetTree, self.__errorDisplay)
                self._todoUIs[rtmView.name()] = rtmView
-               self._defaultUIName = rtmView.name()
+
+               import file_view
+               defaultStoragePath = "%s/data.txt" % self._user_data
+               with gtk_toolbox.gtk_lock():
+                       fileView = file_view.FileView(self._widgetTree, self.__errorDisplay, defaultStoragePath)
+               self._todoUIs[fileView.name()] = fileView
+
+               self._defaultUIName = fileView.name()
 
                config = ConfigParser.SafeConfigParser()
                config.read(self._user_settings)
index 78360c2..954e38e 100644 (file)
@@ -19,14 +19,23 @@ class FileBackend(object):
                        "items": self._items,
                        "locations": self._locations,
                }
-               pickle.dump(state, self._filename)
+               with open(self._filename, "wb") as pickleFile:
+                       pickle.dump(state, pickleFile)
 
        def load(self):
-               state = pickle.load(self._filename)
+               try:
+                       with open(self._filename, "rb") as pickleFile:
+                               state = pickle.load(pickleFile)
+               except IOError, e:
+                       if e.errno != 2:
+                               raise
                self._projects = state["projects"]
                self._items = state["items"]
                self._locations = state["locations"]
 
+               if len(self._projects) == 0:
+                       self.add_project("Inbox")
+
        def add_project(self, name):
                projId = uuid.uuid4().hex
                projDetails = {
diff --git a/src/file_view.py b/src/file_view.py
new file mode 100644 (file)
index 0000000..5ba94fe
--- /dev/null
@@ -0,0 +1,52 @@
+"""
+@todo Remove blocking operations from UI thread
+"""
+
+import common_view
+
+import gtk_toolbox
+import file_backend
+
+
+class FileView(common_view.CommonView):
+
+       def __init__(self, widgetTree, errorDisplay, defaultPath):
+               super(FileView, self).__init__(widgetTree, errorDisplay)
+               self._path = defaultPath
+
+       @staticmethod
+       def name():
+               return "File"
+
+       def load_settings(self, config):
+               """
+               @note Thread Agnostic
+               """
+               path = config.get(self.name(), "path")
+               if path is not None:
+                       self._path
+
+       def save_settings(self, config):
+               """
+               @note Thread Agnostic
+               """
+               self._manager.save()
+               config.add_section(self.name())
+               config.set(self.name(), "path", self._path)
+
+       def login(self):
+               """
+               @note UI Thread
+               """
+               if self._manager is not None:
+                       return
+
+               self._manager = file_backend.FileBackend(self._path)
+               self._manager.load()
+
+       def logout(self):
+               """
+               @note Thread Agnostic
+               """
+               self._manager.save()
+               self._manager = None