src/extras/dir_iter.py
changeset 0 ca70ae20a155
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/extras/dir_iter.py	Tue Feb 16 10:07:05 2010 +0530
@@ -0,0 +1,78 @@
+# Copyright (c) 2005-2009 Nokia Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# dir_iter.py
+#
+# Utility module for filebrowser.
+#
+
+import sys
+import os
+import time
+
+
+class Directory_iter:
+
+    def __init__(self, drive_list):
+        self.drives = [((i, u"Drive")) for i in drive_list]
+        self.at_root = 1
+        self.path = '\\'
+
+    def pop(self):
+        if os.path.splitdrive(self.path)[1] == '\\':
+            self.path = '\\'
+            self.at_root = 1
+        else:
+            self.path = os.path.split(self.path)[0]
+
+    def add(self, i):
+        if self.at_root:
+            self.path = str(self.drives[i][0] + u'\\')
+            self.at_root = 0
+        else:
+            self.path = os.path.join(self.path, os.listdir(self.name())[i])
+
+    def name(self):
+        return self.path
+
+    def list_repr(self):
+        if self.at_root:
+            return self.drives
+        else:
+
+            def item_format(i):
+                full_name = os.path.join(str(self.name()), i)
+                try:
+                    time_field = time.strftime("%d.%m.%Y %H:%M",\
+                                 time.localtime(os.stat(full_name).st_mtime))
+                    info_field = time_field + "  " + \
+                                 str(os.stat(full_name).st_size) + "b"
+                    if os.path.isdir(full_name):
+                        name_field = "["+i+"]"
+                    else:
+                        name_field = i
+                except:
+                    info_field = "[inaccessible]"
+                    name_field = "["+i+"]"
+                return (unicode(name_field), unicode(info_field))
+            try:
+                l = map(item_format, os.listdir(self.name()))
+            except:
+                l = []
+            return l
+
+    def entry(self, i):
+        return os.path.join(self.name(), os.listdir(self.name())[i])