Ticket #1915: 1915_all.patch
File 1915_all.patch, 12.8 KB (added by erikos, 14 years ago) |
---|
-
src/jarabe/journal/expandedentry.py
diff --git a/src/jarabe/journal/expandedentry.py b/src/jarabe/journal/expandedentry.py index c8e40c1..725c0f9 100644
a b class ExpandedEntry(hippo.CanvasBox): 260 260 lines = [ 261 261 _('Kind: %s') % (self._metadata.get('mime_type') or _('Unknown'),), 262 262 _('Date: %s') % (self._format_date(),), 263 _('Size: %s') % (format_size(model.get_file_size( 264 self._metadata['uid'])),)] 263 _('Size: %s') % (format_size(int(self._metadata.get('filesize', 264 model.get_file_size(self._metadata['uid']))))), 265 ] 265 266 266 267 for line in lines: 267 268 text = hippo.CanvasText(text=line, -
src/jarabe/journal/journaltoolbox.py
diff --git a/src/jarabe/journal/journaltoolbox.py b/src/jarabe/journal/journaltoolbox.py index 61671bc..75c6de5 100644
a b class SearchToolbar(gtk.Toolbar): 109 109 self.insert(tool_item, -1) 110 110 tool_item.show() 111 111 112 self._add_separator(expand=True) 113 114 self._sorting_button = SortingButton() 115 self._sorting_button.connect('clicked', self.__sorting_button_clicked_cb) 116 self.insert(self._sorting_button, -1) 117 self._sorting_button.connect('sort-property-changed', 118 self.__sort_changed_cb) 119 self._sorting_button.show() 120 112 121 # TODO: enable it when the DS supports saving the buddies. 113 122 #self._with_search_combo = self._get_with_search_combo() 114 123 #tool_item = ToolComboBox(self._with_search_combo) … … class SearchToolbar(gtk.Toolbar): 154 163 with_search.connect('changed', self._combo_changed_cb) 155 164 return with_search 156 165 166 def _add_separator(self, expand=False): 167 separator = gtk.SeparatorToolItem() 168 separator.props.draw = False 169 if expand: 170 separator.set_expand(True) 171 else: 172 separator.set_size_request(style.GRID_CELL_SIZE, 173 style.GRID_CELL_SIZE) 174 self.insert(separator, -1) 175 separator.show() 176 157 177 def _add_widget(self, widget, expand=False): 158 178 tool_item = gtk.ToolItem() 159 179 tool_item.set_expand(expand) … … class SearchToolbar(gtk.Toolbar): 191 211 if text: 192 212 query['query'] = text 193 213 214 property_, order = self._sorting_button.get_current_sort() 215 216 if order == gtk.SORT_ASCENDING: 217 sign = '+' 218 else: 219 sign = '-' 220 query['order_by'] = [sign + property_] 221 194 222 return query 195 223 196 224 def _get_date_range(self): … … class SearchToolbar(gtk.Toolbar): 213 241 def _combo_changed_cb(self, combo): 214 242 self._update_if_needed() 215 243 244 def __sort_changed_cb(self, button): 245 self._update_if_needed() 246 247 def __sorting_button_clicked_cb(self, button): 248 self._sorting_button.palette.popup(immediate=True, state=1) 249 216 250 def _update_if_needed(self): 217 251 new_query = self._build_query() 218 252 if self._query != new_query: … … class EntryToolbar(gtk.Toolbar): 456 490 activity_info.get_bundle_id()) 457 491 palette.menu.append(menu_item) 458 492 menu_item.show() 493 494 495 class SortingButton(ToolButton): 496 __gtype_name__ = 'JournalSortingButton' 497 498 __gsignals__ = { 499 'sort-property-changed': (gobject.SIGNAL_RUN_FIRST, 500 gobject.TYPE_NONE, 501 ([])), 502 } 503 504 _SORT_OPTIONS = [ 505 ('timestamp', 'view-lastedit', _('Sort by date modified')), 506 ('creation_time', 'view-created', _('Sort by date created')), 507 ('filesize', 'view-size', _('Sort by size')), 508 ] 509 510 def __init__(self): 511 ToolButton.__init__(self) 512 513 self._property = 'timestamp' 514 self._order = gtk.SORT_ASCENDING 515 516 self.props.tooltip = _('Sort view') 517 self.props.icon_name = 'view-lastedit' 518 519 for property_, icon, label in self._SORT_OPTIONS: 520 button = MenuItem(icon_name=icon, text_label=label) 521 button.connect('activate', 522 self.__sort_type_changed_cb, 523 property_, 524 icon) 525 button.show() 526 self.props.palette.menu.insert(button, -1) 527 528 def __sort_type_changed_cb(self, widget, property_, icon_name): 529 self._property = property_ 530 #FIXME: Implement sorting order 531 self._order = gtk.SORT_ASCENDING 532 self.emit('sort-property-changed') 533 534 self.props.icon_name = icon_name 535 536 def get_current_sort(self): 537 return (self._property, self._order) -
src/jarabe/journal/listmodel.py
diff --git a/src/jarabe/journal/listmodel.py b/src/jarabe/journal/listmodel.py index 07f8544..3378350 100644
a b import logging 19 19 import simplejson 20 20 import gobject 21 21 import gtk 22 import time 23 from gettext import gettext as _ 22 24 23 25 from sugar.graphics.xocolor import XoColor 24 26 from sugar.graphics import style … … class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): 48 50 COLUMN_ICON = 2 49 51 COLUMN_ICON_COLOR = 3 50 52 COLUMN_TITLE = 4 51 COLUMN_DATE = 5 52 COLUMN_PROGRESS = 6 53 COLUMN_BUDDY_1 = 7 54 COLUMN_BUDDY_2 = 8 55 COLUMN_BUDDY_3 = 9 53 COLUMN_TIMESTAMP = 5 54 COLUMN_CREATION_TIME = 6 55 COLUMN_FILESIZE = 7 56 COLUMN_PROGRESS = 8 57 COLUMN_BUDDY_1 = 9 58 COLUMN_BUDDY_2 = 10 59 COLUMN_BUDDY_3 = 11 56 60 57 61 _COLUMN_TYPES = {COLUMN_UID: str, 58 62 COLUMN_FAVORITE: bool, 59 63 COLUMN_ICON: str, 60 64 COLUMN_ICON_COLOR: object, 61 65 COLUMN_TITLE: str, 62 COLUMN_DATE: str, 66 COLUMN_TIMESTAMP: str, 67 COLUMN_CREATION_TIME: str, 68 COLUMN_FILESIZE: str, 63 69 COLUMN_PROGRESS: int, 64 70 COLUMN_BUDDY_1: object, 65 71 COLUMN_BUDDY_3: object, … … class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): 141 147 timestamp = int(metadata.get('timestamp', 0)) 142 148 self._cached_row.append(util.timestamp_to_elapsed_string(timestamp)) 143 149 150 try: 151 creation_time = float(metadata.get('creation_time')) 152 except (TypeError, ValueError): 153 self._cached_row.append(_('Unknown')) 154 else: 155 self._cached_row.append( 156 util.timestamp_to_elapsed_string(float(creation_time))) 157 158 try: 159 size = int(metadata.get('filesize')) 160 except (TypeError, ValueError): 161 self._cached_row.append(_('Unknown')) 162 else: 163 self._cached_row.append(util.format_size(size)) 164 144 165 self._cached_row.append(int(metadata.get('progress', 100))) 145 166 146 167 if metadata.get('buddies', ''): -
src/jarabe/journal/listview.py
diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py index 9e19f70..3d6281a 100644
a b class BaseListView(gtk.Bin): 97 97 self.cell_title = None 98 98 self.cell_icon = None 99 99 self._title_column = None 100 self. date_column = None100 self.sort_column = None 101 101 self._add_columns() 102 102 103 103 self.tree_view.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, … … class BaseListView(gtk.Bin): 190 190 date = util.timestamp_to_elapsed_string(timestamp) 191 191 date_width = self._get_width_for_string(date) 192 192 193 self. date_column = gtk.TreeViewColumn()194 self. date_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED195 self. date_column.props.fixed_width = date_width196 self. date_column.set_alignment(1)197 self. date_column.props.resizable = True198 self. date_column.props.clickable = True199 self. date_column.pack_start(cell_text)200 self. date_column.add_attribute(cell_text, 'text', ListModel.COLUMN_DATE)201 self.tree_view.append_column(self. date_column)193 self.sort_column = gtk.TreeViewColumn() 194 self.sort_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED 195 self.sort_column.props.fixed_width = date_width 196 self.sort_column.set_alignment(1) 197 self.sort_column.props.resizable = True 198 self.sort_column.props.clickable = True 199 self.sort_column.pack_start(cell_text) 200 self.sort_column.add_attribute(cell_text, 'text', ListModel.COLUMN_TIMESTAMP) 201 self.tree_view.append_column(self.sort_column) 202 202 203 203 def _get_width_for_string(self, text): 204 204 # Add some extra margin … … class BaseListView(gtk.Bin): 252 252 253 253 def update_with_query(self, query_dict): 254 254 logging.debug('ListView.update_with_query') 255 if 'order_by' not in query_dict: 256 query_dict['order_by'] = ['+timestamp'] 257 if query_dict['order_by'] != self._query.get('order_by'): 258 property_ = query_dict['order_by'][0][1:] 259 cell_text = self.sort_column.get_cell_renderers()[0] 260 self.sort_column.set_attributes(cell_text, 261 text=getattr(ListModel, 'COLUMN_' + property_.upper(), 262 ListModel.COLUMN_TIMESTAMP)) 255 263 self._query = query_dict 256 264 257 if 'order_by' not in self._query:258 self._query['order_by'] = ['+timestamp']259 260 265 self.refresh() 261 266 262 267 def refresh(self): … … class BaseListView(gtk.Bin): 415 420 416 421 while True: 417 422 x, y, width, height = self.tree_view.get_cell_area(path, 418 self. date_column)423 self.sort_column) 419 424 x, y = self.tree_view.convert_tree_to_widget_coords(x, y) 420 425 self.tree_view.queue_draw_area(x, y, width, height) 421 426 if path == end_path: -
src/jarabe/journal/model.py
diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py index ffc62e0..e84d77d 100644
a b import time 21 21 import shutil 22 22 from stat import S_IFMT, S_IFDIR, S_IFREG 23 23 import re 24 from operator import itemgetter 24 25 25 26 import gobject 26 27 import dbus … … DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' 36 37 DS_DBUS_PATH = '/org/laptop/sugar/DataStore' 37 38 38 39 # Properties the journal cares about. 39 PROPERTIES = ['uid', 'title', 'mtime', 'timestamp', ' keep', 'buddies',40 ' icon-color', 'mime_type', 'progress', 'activity', 'mountpoint',41 'activity _id', 'bundle_id']40 PROPERTIES = ['uid', 'title', 'mtime', 'timestamp', 'creation_time', 'filesize', 41 'keep', 'buddies', 'icon-color', 'mime_type', 'progress', 42 'activity', 'mountpoint', 'activity_id', 'bundle_id'] 42 43 43 44 MIN_PAGES_TO_CACHE = 3 44 45 MAX_PAGES_TO_CACHE = 5 … … class InplaceResultSet(BaseResultSet): 246 247 247 248 self._mime_types = query.get('mime_type', []) 248 249 250 self._sort = query.get('order_by', ['+timestamp'])[0] 251 249 252 def setup(self): 250 253 self._file_list = [] 251 254 self._recurse_dir(self._mount_point) … … class InplaceResultSet(BaseResultSet): 254 257 self._stopped = True 255 258 256 259 def setup_ready(self): 257 self._file_list.sort(lambda a, b: b[2] - a[2]) 260 if self._sort[1:] == 'filesize': 261 keygetter = itemgetter(3) 262 else: 263 keygetter = itemgetter(2) # timestamp 264 self._file_list.sort(lambda a, b: b - a, 265 key=keygetter, 266 reverse=self._sort[0]=='-') 258 267 self.ready.send(self) 259 268 260 269 def find(self, query): … … class InplaceResultSet(BaseResultSet): 273 282 files = self._file_list[offset:offset + limit] 274 283 275 284 entries = [] 276 for file_path, stat, mtime_ in files:285 for file_path, stat, mtime_, size_ in files: 277 286 metadata = _get_file_metadata(file_path, stat) 278 287 metadata['mountpoint'] = self._mount_point 279 288 entries.append(metadata) … … class InplaceResultSet(BaseResultSet): 331 340 add_to_list = False 332 341 333 342 if add_to_list: 334 file_info = (full_path, stat, int(stat.st_mtime) )343 file_info = (full_path, stat, int(stat.st_mtime), stat.st_size) 335 344 self._file_list.append(file_info) 336 345 337 346 self.progress.send(self) … … def _get_file_metadata(path, stat): 344 353 return {'uid': path, 345 354 'title': os.path.basename(path), 346 355 'timestamp': stat.st_mtime, 356 'filesize': stat.st_size, 347 357 'mime_type': gio.content_type_guess(filename=path), 348 358 'activity': '', 349 359 'activity_id': '',