Mercurial > urwid-satext
annotate urwid_satext/files_management.py @ 126:5ab6a5ebd3b5
added 0.6.1 tag
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 12 Jul 2016 20:37:19 +0200 |
parents | f2589475269f |
children | 1970df98643d |
rev | line source |
---|---|
21 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
64 | 4 # Urwid SàT extensions |
122 | 5 # Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org) |
64 | 6 # |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Lesser General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 # | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Lesser General Public License for more details. | |
16 # | |
17 # You should have received a copy of the GNU Lesser General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
21 | 19 |
20 import urwid | |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
21 import sat_widgets |
21 | 22 import os, os.path |
23 from xml.dom import minidom | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
24 import logging as log |
23 | 25 from time import time |
92
fdd0543677d4
use of new keys module in files_management
Goffi <goffi@goffi.org>
parents:
71
diff
changeset
|
26 from .keys import action_key_map as a_key |
34
875ff127b2dd
- i18n management: gettext integration + french translation
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
27 |
875ff127b2dd
- i18n management: gettext integration + french translation
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
28 import gettext |
875ff127b2dd
- i18n management: gettext integration + french translation
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
29 gettext.install('urwid_satext', unicode=True) |
21 | 30 |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
31 class PathEdit(sat_widgets.AdvancedEdit): |
23 | 32 """AdvancedEdit with manage file paths""" |
66 | 33 |
21 | 34 def keypress(self, size, key): |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
35 if key == u'~' and self.edit_pos==0: |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
36 expanded = os.path.expanduser(u'~') |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
37 self.set_edit_text(os.path.normpath(expanded+u'/'+self.edit_text)) |
23 | 38 self.set_edit_pos(len(expanded)+1) |
92
fdd0543677d4
use of new keys module in files_management
Goffi <goffi@goffi.org>
parents:
71
diff
changeset
|
39 elif key == a_key['EDIT_DELETE_LAST_WORD']: |
21 | 40 if self.edit_pos<2: |
41 return | |
42 before = self.edit_text[:self.edit_pos] | |
43 pos = (before[:-1] if before.endswith('/') else before).rfind("/")+1 | |
44 self.set_edit_text(before[:pos] + self.edit_text[self.edit_pos:]) | |
45 self.set_edit_pos(pos) | |
46 return | |
47 else: | |
66 | 48 return super(PathEdit, self).keypress(size, key) |
21 | 49 |
23 | 50 class FilesViewer(urwid.WidgetWrap): |
51 """List specialised for files""" | |
52 | |
58
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
53 def __init__(self, onPreviousDir, onDirClick, onFileClick = None): |
23 | 54 self.path='' |
55 self.key_cache = '' | |
56 self.key_time = time() | |
57 self.onPreviousDir = onPreviousDir | |
58 self.onDirClick = onDirClick | |
59 self.onFileClick = onFileClick | |
60 self.files_list = urwid.SimpleListWalker([]) | |
66 | 61 self.show_hidden = True |
23 | 62 listbox = urwid.ListBox(self.files_list) |
63 urwid.WidgetWrap.__init__(self, listbox) | |
64 | |
65 def keypress(self, size, key): | |
92
fdd0543677d4
use of new keys module in files_management
Goffi <goffi@goffi.org>
parents:
71
diff
changeset
|
66 if key==a_key['FILES_HIDDEN_HIDE']: |
23 | 67 #(un)hide hidden files |
68 self.show_hidden = not self.show_hidden | |
69 self.showDirectory(self.path) | |
92
fdd0543677d4
use of new keys module in files_management
Goffi <goffi@goffi.org>
parents:
71
diff
changeset
|
70 elif key==a_key['FILES_JUMP_DIRECTORIES']: |
23 | 71 #jump to directories |
72 if self.files_list: | |
73 self._w.set_focus(0) | |
92
fdd0543677d4
use of new keys module in files_management
Goffi <goffi@goffi.org>
parents:
71
diff
changeset
|
74 elif key==a_key['FILES_JUMP_FILES']: |
23 | 75 for idx in range(len(self.files_list)): |
76 if isinstance(self.files_list[idx].base_widget,urwid.Divider): | |
77 if idx<len(self.files_list)-1: | |
78 self._w.set_focus(idx+1) | |
79 break | |
80 elif len(key) == 1: | |
81 if time() - self.key_time > 2: | |
82 self.key_cache=key | |
83 else: | |
84 self.key_cache+=key | |
85 self.key_time = time() | |
86 for idx in range(len(self.files_list)): | |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
87 if isinstance(self.files_list[idx],sat_widgets.ClickableText) and self.files_list[idx].get_text().lower().startswith(self.key_cache.lower()): |
23 | 88 self._w.set_focus(idx) |
89 break | |
90 else: | |
91 return self._w.keypress(size, key) | |
92 | |
93 def showDirectory(self, path): | |
94 self.path = path | |
95 del self.files_list[:] | |
96 directories = [] | |
97 files = [] | |
98 try: | |
99 for filename in os.listdir(path): | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
100 if not isinstance(filename, unicode): |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
101 log.warning(u"file [{}] has a badly encode filename, ignoring it".format(filename.decode('utf-8', 'replace'))) |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
102 continue |
23 | 103 fullpath = os.path.join(path,filename) |
104 if os.path.isdir(fullpath): | |
105 directories.append(filename) | |
106 else: | |
107 files.append(filename) | |
108 except OSError: | |
66 | 109 self.files_list.append(urwid.Text(("warning",_("Impossible to list directory")),'center')) |
23 | 110 directories.sort() |
111 files.sort() | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
112 if os.path.abspath(path)!=u'/' and os.path.abspath(path) != u'//': |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
113 previous_wid = sat_widgets.ClickableText((u'directory',u'..')) |
23 | 114 urwid.connect_signal(previous_wid,'click',self.onPreviousDir) |
115 self.files_list.append(previous_wid) | |
116 for directory in directories: | |
117 if directory.startswith('.') and not self.show_hidden: | |
118 continue | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
119 dir_wid = sat_widgets.ClickableText((u'directory',directory)) |
23 | 120 urwid.connect_signal(dir_wid,'click',self.onDirClick) |
121 self.files_list.append(dir_wid) | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
122 self.files_list.append(urwid.AttrMap(urwid.Divider(u'-'),'separator')) |
23 | 123 for filename in files: |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
124 if filename.startswith(u'.') and not self.show_hidden: |
23 | 125 continue |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
126 file_wid = sat_widgets.ClickableText(filename) |
58
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
127 if self.onFileClick: |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
128 urwid.connect_signal(file_wid,'click',self.onFileClick) |
23 | 129 self.files_list.append(file_wid) |
130 | |
131 | |
21 | 132 class FileDialog(urwid.WidgetWrap): |
133 | |
112
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
134 def __init__(self, ok_cb, cancel_cb, message=None, title=_("Please select a file"), style=[]): |
23 | 135 """Create file dialog |
112
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
136 |
23 | 137 @param title: title of the window/popup |
112
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
138 @param message: message to display, or None to only show title and file dialog |
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
139 message will be passed to a Text widget, so markup can be used |
58
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
140 @param style: list of string: |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
141 - 'dir' if a dir path must be selected |
23 | 142 """ |
143 self.ok_cb = ok_cb | |
58
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
144 self._type = 'dir' if 'dir' in style else 'normal' |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
145 self.__home_path = os.path.expanduser(u'~') |
112
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
146 widgets = [] |
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
147 if message: |
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
148 widgets.append(urwid.Text(message)) |
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
149 widgets.append(urwid.Divider(u'─')) |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
150 self.path_wid = PathEdit(_(u'Path: ')) |
23 | 151 self.path_wid.setCompletionMethod(self._directory_completion) |
21 | 152 urwid.connect_signal(self.path_wid, 'change', self.onPathChange) |
112
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
153 widgets.append(self.path_wid) |
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
154 widgets.append(urwid.Divider(u'─')) |
b3e8edbe0a1e
FileDialog: a message can now be displayed above the file selector
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
155 header = urwid.Pile(widgets) |
21 | 156 bookm_list = urwid.SimpleListWalker([]) |
157 self.bookmarks = list(self.getBookmarks()) | |
158 self.bookmarks.sort() | |
159 for bookmark in self.bookmarks: | |
160 if bookmark.startswith(self.__home_path): | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
161 bookmark=u"~"+bookmark[len(self.__home_path):] |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
162 book_wid = sat_widgets.ClickableText(bookmark) |
21 | 163 urwid.connect_signal(book_wid, 'click', self.onBookmarkSelected) |
164 bookm_list.append(book_wid) | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
165 bookm_wid = urwid.Frame(urwid.ListBox(bookm_list), urwid.AttrMap(urwid.Text(_(u'Bookmarks'),'center'),'title')) |
58
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
166 self.files_wid = FilesViewer(self.onPreviousDir, self.onDirClick, self.onFileClick if self._type == 'normal' else None) |
21 | 167 center_row = urwid.Columns([('weight',2,bookm_wid), |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
168 ('weight',8,sat_widgets.VerticalSeparator(self.files_wid))]) |
23 | 169 |
170 buttons = [] | |
58
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
171 if self._type == 'dir': |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
172 buttons.append(sat_widgets.CustomButton(_('Ok'), self._validateDir)) |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
173 buttons.append(sat_widgets.CustomButton(_('Cancel'),cancel_cb)) |
23 | 174 max_len = max([button.getSize() for button in buttons]) |
175 buttons_wid = urwid.GridFlow(buttons,max_len,1,0,'center') | |
30
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
176 main_frame = sat_widgets.FocusFrame(center_row, header, buttons_wid) |
1aeb3540aa49
files reorganisation after project separation. new README, and COPYING files
Goffi <goffi@goffi.org>
parents:
26
diff
changeset
|
177 decorated = sat_widgets.LabelLine(main_frame, sat_widgets.SurroundedText(title)) |
21 | 178 urwid.WidgetWrap.__init__(self, decorated) |
23 | 179 self.path_wid.set_edit_text(os.getcwdu()) |
180 | |
58
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
181 def _validateDir(self, wid): |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
182 """ call ok callback if current path is a dir """ |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
183 path = os.path.abspath(self.path_wid.get_edit_text()) |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
184 if os.path.isdir(path): |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
185 self.ok_cb(path) |
7155b81ffdd5
new 'dir' style in FileDialog (get a dir path instead of a file
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
186 |
23 | 187 def _directory_completion(self, path, completion_data): |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
188 assert isinstance(path, unicode) |
23 | 189 path=os.path.abspath(path) |
190 if not os.path.isdir(path): | |
191 head,dir_start = os.path.split(path) | |
192 else: | |
193 head=path | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
194 dir_start=u'' |
23 | 195 try: |
196 filenames = os.listdir(head) | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
197 to_remove = [] |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
198 |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
199 # we remove badly encoded files |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
200 for filename in filenames: |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
201 if not isinstance(filename, unicode): |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
202 log.warning(u"file [{}] has a badly encode filename, ignoring it".format(filename.decode('utf-8', 'replace'))) |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
203 to_remove.append(filename) |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
204 for filename in to_remove: |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
205 filenames.remove(filename) |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
206 |
23 | 207 filenames.sort() |
208 try: | |
209 start_idx=filenames.index(completion_data['last_dir'])+1 | |
210 if start_idx == len(filenames): | |
211 start_idx = 0 | |
212 except (KeyError,ValueError): | |
213 start_idx = 0 | |
214 for idx in range(start_idx,len(filenames)) + range(0,start_idx): | |
215 full_path = os.path.join(head,filenames[idx]) | |
216 if filenames[idx].lower().startswith(dir_start.lower()) and os.path.isdir(full_path): | |
217 completion_data['last_dir'] = filenames[idx] | |
66 | 218 return full_path |
23 | 219 except OSError: |
220 pass | |
221 return path | |
21 | 222 |
223 def getBookmarks(self): | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
224 gtk_bookm = os.path.expanduser(u"~/.gtk-bookmarks") |
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
225 kde_bookm = os.path.expanduser(u"~/.kde/share/apps/kfileplaces/bookmarks.xml") |
21 | 226 bookmarks = set() |
227 try: | |
23 | 228 with open(gtk_bookm) as gtk_fd: |
229 for bm in gtk_fd.readlines(): | |
21 | 230 if bm.startswith("file:///"): |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
231 bookmarks.add(bm[7:].replace('\n','').decode('utf-8', 'replace')) |
21 | 232 except IOError: |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
233 log.info(_(u'No GTK bookmarks file found')) |
21 | 234 pass |
66 | 235 |
21 | 236 try: |
237 dom = minidom.parse(kde_bookm) | |
23 | 238 for elem in dom.getElementsByTagName('bookmark'): |
21 | 239 bm = elem.getAttribute("href") |
240 if bm.startswith("file:///"): | |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
241 bookmarks.add(bm[7:].decode('utf-8', 'replace')) |
21 | 242 except IOError: |
123
f2589475269f
file_management: unicode was badly handled. As a quick solution, we handle everything as unicode, and ignore badly encoded filenames, this may change in the future
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
243 log.info(_('No KDE bookmarks file found')) |
21 | 244 pass |
66 | 245 |
21 | 246 return bookmarks |
247 | |
248 def onBookmarkSelected(self, button): | |
249 self.path_wid.set_edit_text(os.path.expanduser(button.get_text())) | |
250 | |
23 | 251 def onPathChange(self, edit, path): |
252 if os.path.isdir(path): | |
253 self.files_wid.showDirectory(path) | |
254 | |
255 def onPreviousDir(self, wid): | |
256 path = os.path.abspath(self.path_wid.get_edit_text()) | |
257 if not os.path.isdir(path): | |
93
900014ae36b8
fixed unicode issue invalid method call in files_management
Goffi <goffi@goffi.org>
parents:
92
diff
changeset
|
258 path = os.path.dirname(path) |
23 | 259 self.path_wid.set_edit_text(os.path.split(path)[0]) |
260 | |
261 def onDirClick(self, wid): | |
262 path = os.path.abspath(self.path_wid.get_edit_text()) | |
263 if not os.path.isdir(path): | |
93
900014ae36b8
fixed unicode issue invalid method call in files_management
Goffi <goffi@goffi.org>
parents:
92
diff
changeset
|
264 path = os.path.dirname(path) |
23 | 265 self.path_wid.set_edit_text(os.path.join(path,wid.get_text())) |
66 | 266 |
23 | 267 def onFileClick(self, wid): |
268 self.ok_cb(os.path.abspath(os.path.join(self.files_wid.path,wid.get_text()))) |