Ticket #901: sugar-901.patch

File sugar-901.patch, 3.8 KB (added by alsroot, 15 years ago)
  • filepicker.py

    From 74b2ff309837a422d4e33dc2d178310fbfc58901 Mon Sep 17 00:00:00 2001
    From: Aleksey Lim <alsroot@member.fsf.org>
    Date: Fri, 18 Sep 2009 11:03:10 +0000
    Subject: browse should use a better name when uploading an entry from the journal #901
    
    ---
     filepicker.py |   54 +++++++++++++++++++++++++++++++++++++++---------------
     1 files changed, 39 insertions(+), 15 deletions(-)
    
    diff --git a/filepicker.py b/filepicker.py
    index 4a39fdd..9af28aa 100644
    a b import logging 
    1818import os
    1919import tempfile
    2020import shutil
     21import re
     22from gettext import gettext as _
    2123
    2224import gtk
    2325import hulahop
    from xpcom import components 
    2729from xpcom.components import interfaces
    2830from xpcom.server.factory import Factory
    2931
     32from sugar import mime
    3033from sugar.graphics.objectchooser import ObjectChooser
     34from sugar.activity.activity import get_activity_root
    3135
    32 _temp_files_to_clean = []
     36_temp_dirs_to_clean = []
    3337
    3438def cleanup_temp_files():
    35     for temp_file in _temp_files_to_clean:
    36         if os.path.exists(temp_file):
    37             os.remove(temp_file)
    38             _temp_files_to_clean.remove(temp_file)
     39    while _temp_dirs_to_clean:
     40        temp_dir = _temp_dirs_to_clean.pop()
     41        if os.path.isdir(temp_dir):
     42            shutil.rmtree(temp_dir, ignore_errors=True)
    3943        else:
    4044            logging.debug('filepicker.cleanup_temp_files: no file %r'
    41                           % temp_file)
     45                          % temp_dir)
    4246
    4347class FilePicker:
    4448    _com_interfaces_ = interfaces.nsIFilePicker
    class FilePicker: 
    6771
    6872    def show(self):
    6973        chooser = ObjectChooser(parent=self._parent)
     74        jobject = None
    7075        try:
    7176            result = chooser.run()
    7277            if result == gtk.RESPONSE_ACCEPT:
    73                 logging.debug('FilePicker.show: %r' %
    74                               chooser.get_selected_object())
    7578                jobject = chooser.get_selected_object()
     79                logging.debug('FilePicker.show: %r', jobject)
     80
    7681                if jobject and jobject.file_path:
    77                     ext = os.path.splitext(jobject.file_path)[1]
    78                     f, new_temp = tempfile.mkstemp(ext)
    79                     del f
     82                    tmp_dir = tempfile.mkdtemp(
     83                            prefix='', # tmp/tmp.. looks ugly
     84                            dir=os.path.join(get_activity_root(), 'tmp'))
     85                    self._file = os.path.join(tmp_dir,
     86                            self._basename_strip(jobject))
     87
     88                    os.rename(jobject.file_path, self._file)
    8089
    81                     global _temp_files_to_clean
    82                     _temp_files_to_clean.append(new_temp)
    83                     shutil.copy(jobject.file_path, new_temp)
     90                    global _temp_dirs_to_clean
     91                    _temp_dirs_to_clean.append(tmp_dir)
    8492
    85                     self._file = new_temp
     93                    logging.debug('FilePicker.show: file=%r', self._file)
    8694        finally:
     95            if jobject is not None:
     96                jobject.destroy()
    8797            chooser.destroy()
    8898            del chooser
    8999
    class FilePicker: 
    92102        else:
    93103            return interfaces.nsIFilePicker.returnCancel
    94104
     105    def _basename_strip(self, jobject):
     106        name = jobject.metadata.get('title', _('No Name'))
     107        name = name.replace(os.sep, ' ').strip()
     108
     109        root_, mime_extension = os.path.splitext(jobject.file_path)
     110
     111        if not name.endswith(mime_extension):
     112            if re.search('\.\S+$', name) is None:
     113                # add mime_type extension only
     114                # if 'title' doesn't have any extensions
     115                name = name + mime_extension
     116
     117        return name
     118
    95119    def set_defaultExtension(self, default_extension):
    96120        logging.warning('FilePicker.set_defaultExtension: UNIMPLEMENTED')
    97121