/usr/share/gallery-uploader/galleryuploader_lib/browser.py is in gallery-uploader 2.5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76  | import os
from gi.repository import Gio, GObject
from itertools import count
from galleryuploader_lib.thumbnails import Thumbnailer
from galleryuploader_lib.dialogs import build_builder
class Browser(object):
    new_id = count().next
    def __init__(self):
        self.dialog_builder = build_builder('browser')
        self.dialog = self.dialog_builder.get_object('dialog')
        self.list = self.dialog_builder.get_object('list')
        self.icons = self.dialog_builder.get_object('icons')
        self.filechooser = self.dialog_builder.get_object('filechooser')
        self.icons.set_text_column(1)
        self.icons.set_pixbuf_column(2)
                
        self.current_folder = Gio.File.new_for_path('.').get_path()
#        print "self.current_folder", self.current_folder
        self.thumbnailer = Thumbnailer()
        self.thumbnailer.start()
        self.populate()
        self.alive = True
        GObject.timeout_add(100, self.monitor)
    
    def run(self):
        resp = self.dialog.run()
        self.thumbnailer.go = False
        if resp:
            return self.get_filenames()
        else:
            return None
    def destroy(self):
        self.alive = False
        self.dialog.destroy()
    
    def get_filenames(self):
        """
        Retrieve paths corresponding to selected thumbnails.
        """
        retval = []
        def iterator(iconview, path, *args):
            full_path = os.path.join( os.path.realpath( os.curdir ),
                           self.list.get_value(self.list.get_iter( path ), 1 ) )
            retval.append( full_path )
        self.icons.selected_foreach( iterator )
        return retval
    def populate(self):
        self.list.clear()
        curdir = os.path.realpath( os.curdir )
        dir_content = os.listdir( curdir )
        dir_content.sort()
        self.thumbnailer.reset(dir_content, basedir=curdir)
        
    def monitor(self):
        if self.alive == False:
            return False
    
        if not self.filechooser.get_filename():
            return True
        if self.current_folder != self.filechooser.get_filename():
            self.current_folder = self.filechooser.get_filename()
            os.chdir(self.current_folder)
            self.populate()
            return True
        while self.thumbnailer.done:
            thing, uri, thumbnail = self.thumbnailer.done.pop(0)
            self.list.append([self.new_id(), thing, thumbnail])
        return True
 |