Hello community, here is the log from the commit of package folder-color for openSUSE:Factory checked in at 2015-05-07 08:29:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/folder-color (Old) and /work/SRC/openSUSE:Factory/.folder-color.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "folder-color" Changes: -------- --- /work/SRC/openSUSE:Factory/folder-color/folder-color.changes 2015-03-30 19:33:50.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.folder-color.new/folder-color.changes 2015-05-07 08:29:21.000000000 +0200 @@ -1,0 +2,7 @@ +Wed May 6 11:34:12 UTC 2015 - [email protected] + +- Update to 0.0.78: + * Orange colour changed to Humanity. + * Dark recent inside. + +------------------------------------------------------------------- Old: ---- folder-color-caja_0.0.70_all.tar.gz folder-color-common_0.0.70_all.tar.gz folder-color_0.0.70_all.tar.gz New: ---- folder-color-caja_0.0.78.tar.gz folder-color-common_0.0.78.tar.gz folder-color_0.0.78.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ folder-color.spec ++++++ --- /var/tmp/diff_new_pack.6yolx5/_old 2015-05-07 08:29:21.000000000 +0200 +++ /var/tmp/diff_new_pack.6yolx5/_new 2015-05-07 08:29:21.000000000 +0200 @@ -19,15 +19,15 @@ %define _name folder_color %define _version 0.0.7x Name: folder-color -Version: 0.0.70 +Version: 0.0.78 Release: 0 Summary: Change a directory colour in Caja and Nautilus License: GPL-3.0+ Group: Productivity/File utilities Url: https://launchpad.net/folder-color -Source0: https://launchpad.net/%{name}/trunk/%{_version}/+download/%{name}-common_%{version}_all.tar.gz -Source1: https://launchpad.net/%{name}/trunk/%{_version}/+download/%{name}-caja_%{version}_all.tar.gz -Source2: https://launchpad.net/%{name}/trunk/%{_version}/+download/%{name}_%{version}_all.tar.gz +Source0: https://launchpad.net/%{name}/trunk/%{_version}/+download/%{name}-common_%{version}.tar.gz +Source1: https://launchpad.net/%{name}/trunk/%{_version}/+download/%{name}-caja_%{version}.tar.gz +Source2: https://launchpad.net/%{name}/trunk/%{_version}/+download/%{name}_%{version}.tar.gz BuildRequires: fdupes BuildRequires: hicolor-icon-theme BuildRequires: intltool ++++++ folder-color-caja_0.0.70_all.tar.gz -> folder-color-caja_0.0.78.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color-caja/caja-extension/folder-color.py new/folder-color-caja/caja-extension/folder-color.py --- old/folder-color-caja/caja-extension/folder-color.py 2015-03-29 12:04:42.000000000 +0200 +++ new/folder-color-caja/caja-extension/folder-color.py 2015-05-01 18:19:13.000000000 +0200 @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Folder Color 0.0.70 +# Folder Color 0.0.78 # Copyright (C) 2012-2015 Marcos Alvarez Costales https://launchpad.net/~costales # # Folder Color is free software; you can redistribute it and/or modify @@ -16,7 +16,7 @@ # along with Folder Color; if not, see http://www.gnu.org/licenses # for more information. -import os, urllib, gettext, glob, webbrowser, operator, shutil, ConfigParser +import os, urllib, gettext, glob, webbrowser, operator, shutil, ConfigParser, subprocess from gi.repository import Caja, Gtk, GObject, Gio, GLib # i18n @@ -31,22 +31,29 @@ self.DEFAULT_PATH_THEME = '' - self.PLACES = 'places' - self.EMBLEMS = 'emblems' - self.CUSTOM = 'custom' + self.PLACES = 'places' + self.EMBLEMS = 'emblems' + self.CUSTOM = 'custom' + self.GLOBALCOLOR = 'globalcolor' self.FOLDER = 'folder' - self.PRE_PLACES = '_'.join([self.FOLDER, 'color']) - self.PRE_EMBLEMS = '_'.join([self.FOLDER, 'emblem']) - self.PRE_CUSTOMS = '_'.join([self.FOLDER, 'custom']) - - self.SEARCH_PLACES = '_'.join([self.PRE_PLACES, '*.svg']) - self.SEARCH_EMBLEMS = '_'.join([self.PRE_EMBLEMS, '*.svg']) - self.SEARCH_CUSTOMS = ''.join([self.PRE_CUSTOMS, '*.svg']) - - self.CHECK_PLACE = 'folder_color_blue' - self.CHECK_EMBLEM = 'folder_emblem_favorite' - self.CHECK_CUSTOM = 'folder_custom' + self.PRE_PLACES = 'folder_color' + self.PRE_EMBLEMS = 'folder_emblem' + self.PRE_CUSTOMS = 'folder_custom' + + self.SEARCH_PLACES = 'folder_color_*.svg' + self.SEARCH_EMBLEMS = 'folder_emblem_*.svg' + self.SEARCH_CUSTOMS = 'folder_custom*.svg' + self.SEARCH_GLOBALCOLOR = 'folder_color_globalcolor.svg' + + self.CHECK_PLACE = 'folder_color_blue' + self.CHECK_EMBLEM = 'folder_emblem_favorite' + self.CHECK_CUSTOM = 'folder_custom' + self.CHECK_GLOBALCOLOR = 'folder_color_globalcolor' + + self.EXTRA_HOME = 'folder_extraicons_%s_home' + self.EXTRA_REMOTE = 'folder_extraicons_%s_remote' + self.EXTRA_RECENT = 'folder_extraicons_%s_recent' self.DESKTOP = 'desktop' self.DOCUMENTS = 'documents' @@ -59,6 +66,7 @@ self.DEFAULT_ICONS = ('undo', 'edit', 'picker', 'preferences', 'default', self.DESKTOP, self.DOCUMENTS, self.DOWNLOADS, self.MUSIC, self.PICTURES, self.PUBLIC, self.TEMPLATES, self.VIDEOS) self.DEFAULT_FOLDERS = self._get_default_folders() + self.ICON_RESOLUTIONS = {'16': '16x16', '22': '22x22', '24': '24x24', '32': '32x32', '48': '48x48', '64': '64x64'} self.SYSTEM_PATH_THEME = '/usr/share/icons' self.USER_PATH_THEME = os.path.join(os.getenv('HOME'), '.icons') @@ -71,12 +79,12 @@ self.VALUE_LIGHT = 'value_light' self.VALUE_MIDDLE = 'value_middle' self.VALUE_DARK = 'value_dark' - + # Caja crashed? Allow future Preference dialogs if remove_pid: self.lock.remove() - def get_iconname(self, folder, name, what='places'): + def get_iconname(self, folder, name, what='places', get_px='48'): """For 'green' returns folder_color_green_downloads""" if what == self.PLACES: prefix = self.PRE_PLACES @@ -89,7 +97,7 @@ if folder in self.DEFAULT_FOLDERS: iconname = '_'.join([prefix, name.replace(' ', '_').lower(), self.DEFAULT_FOLDERS[folder]]) - filename = ''.join([self.get_path(what), iconname, '.svg']) + filename = ''.join([self.get_path(what, get_px), iconname, '.svg']) if os.path.isfile(filename): # Exist? return iconname @@ -103,16 +111,18 @@ icon_name = icon_name.replace(self.PRE_PLACES, '').replace(self.PRE_EMBLEMS, '').replace('_', ' ').strip() return icon_name - def get_path(self, what='places'): + def get_path(self, what='places', get_px='48'): """Get current path. By example: /usr/share/icons/hicolor/48x48/places/""" icon = Gtk.IconTheme.get_default() if what == self.PLACES: - icon_path = icon.lookup_icon(self.CHECK_PLACE, 48, 0) + icon_path = icon.lookup_icon(self.CHECK_PLACE, int(get_px), 0) elif what == self.EMBLEMS: icon_path = icon.lookup_icon(self.CHECK_EMBLEM, 24, 0) elif what == self.CUSTOM: - icon_path = icon.lookup_icon(self.CHECK_CUSTOM, 48, 0) + icon_path = icon.lookup_icon(self.CHECK_CUSTOM, int(get_px), 0) + elif what == self.GLOBALCOLOR: + icon_path = icon.lookup_icon(self.CHECK_GLOBALCOLOR, 16, 0) else: return '' @@ -136,6 +146,8 @@ path = ''.join([self.get_path(what), self.SEARCH_EMBLEMS]) elif what == self.CUSTOM: path = ''.join([self.get_path(what), self.SEARCH_CUSTOMS]) + elif what == self.GLOBALCOLOR: + path = ''.join([self.get_path(what), self.SEARCH_GLOBALCOLOR]) else: return available_items @@ -179,7 +191,8 @@ def _reload_icon(self, folder): """Reload the current folder icon""" - os.system('touch "%s"' % folder) + proc = subprocess.Popen(['touch', folder], shell=False) + proc.communicate() def _get_default_folders(self): """Default user folders""" @@ -232,9 +245,12 @@ """Set an emblem""" # TODO: Use Gio if emblem: - os.system('gvfs-set-attribute -t stringv "%s" metadata::emblems "%s"' % (folder, emblem)) + cmd = ['gvfs-set-attribute', '-t', 'stringv', folder, 'metadata::emblems', emblem] else: - os.system('gvfs-set-attribute -t unset "%s" metadata::emblems' % folder) + cmd = ['gvfs-set-attribute', '-t', 'unset', folder, 'metadata::emblems'] + + proc = subprocess.Popen(cmd, shell=False) + proc.communicate() self._reload_icon(folder) @@ -304,7 +320,6 @@ pass except: pass - pass def get_file_items(self, window, items): """Caja invoke this function in its startup > Then, create menu entry""" @@ -312,7 +327,25 @@ if not self._check_generate_menu(items): return # Return menu - return self._generate_menu(items) + return self._generate_menu(items, self._check_generate_restore(items)) + + def _check_generate_restore(self, items): + # For each dir, search custom icon or emblem + for item in items: + if item.is_gone(): + continue + + folder_name = urllib.unquote(item.get_uri()[7:]) + folder = Gio.File.new_for_path(folder_name) + info = folder.query_info('metadata', 0, None) + if info.get_attribute_as_string('metadata::custom-icon-name'): + return True + if info.get_attribute_as_string('metadata::custom-icon'): + return True + if info.get_attribute_as_string('metadata::emblems'): + return True + + return False def _check_generate_menu(self, items): """Show the menu?""" @@ -336,7 +369,7 @@ # All OK > Generate menu return True - def _generate_menu(self, items): + def _generate_menu(self, items, show_restore): """Generate menu: Color | Custom? | Restore | Emblems? | Preferences""" # Main menu [1 or +1 folder(s)] if len(items) > 1: @@ -377,24 +410,31 @@ submenu.append_item(item) # Restore - item_sep = Caja.MenuItem(name='ChangeFolderEmblemMenu::Sep', label=_("Restore:"), sensitive=False) - submenu.append_item(item_sep) - - item_restore = Caja.MenuItem(name='ChangeFolderColorMenu::Restore', label=_("Default"), icon='folder_color_undo') - item_restore.connect('activate', self._menu_activate_restore, items) - submenu.append_item(item_restore) - - # Preferences - path = self.foldercolor.get_current_icontheme()[0] - if path: + if show_restore: + item_sep = Caja.MenuItem(name='ChangeFolderEmblemMenu::Sep', label=_("Restore:"), sensitive=False) + submenu.append_item(item_sep) + + item_restore = Caja.MenuItem(name='ChangeFolderColorMenu::Restore', label=_("Default"), icon='folder_color_undo') + item_restore.connect('activate', self._menu_activate_restore, items) + submenu.append_item(item_restore) + + # Global Color + path_theme,customs = self.foldercolor.get_available_icons('globalcolor') + if len(customs) and path_theme == self.DEFAULT_PATH_THEME: # Show Global Color only if the theme wants that item_sep = Caja.MenuItem(name='ChangeFolderColorMenu::Sep2', label=_("Edit:"), sensitive=False) submenu.append_item(item_sep) - item = Caja.MenuItem(name=''.join(['ChangeFolderColorMenu::"preferences"']), label=_("Global Color"), icon='folder_color_preferences') + item = Caja.MenuItem(name=''.join(['ChangeFolderColorMenu::"preferences"']), label=_("Global Color"), icon='folder_color_globalcolor') item.connect('activate', self._menu_activate_preferences) submenu.append_item(item) + elif not os.path.exists(self.foldercolor.HIDE_DONATION): + item_sep = Caja.MenuItem(name='ChangeFolderColorMenu::Sep2', label=_("Support:"), sensitive=False) + submenu.append_item(item_sep) + item = Caja.MenuItem(name=''.join(['ChangeFolderColorMenu::"donate"']), label=_("Donate? Click to hide")) + item.connect('activate', self._on_donate_menu) + submenu.append_item(item) return top_menuitem, - + def _menu_activate_color(self, menu, color, folders): """Set Custom Color""" for each_folder in folders: @@ -498,7 +538,18 @@ win.show_all() Gtk.main() + def _on_donate_menu(self, btn): + """Open from contextual menu""" + webbrowser.open(self.foldercolor.URL_DONATE) + try: + os.makedirs(self.foldercolor.HIDE_DONATION) + except OSError as exception: + pass + except: + pass + def _on_donate_hide(self, null): + """Open from global color window""" self.vbox_donate.hide() # Hide donation after show it try: @@ -557,14 +608,13 @@ """Set default global color""" def __init__(self): self.foldercolor = FolderColor() - pass def restore(self): """Restore theme to default""" path, name, index = self.foldercolor.get_current_icontheme() if not path: return - fc_name = '.'.join([name, 'foldercolor']) # Only remove a Folder Color theme + fc_name = '.'.join([name, 'foldercolor']) # Folder Color theme local_theme = os.path.join(self.foldercolor.USER_PATH_THEME, fc_name) self._set_theme(name) @@ -592,197 +642,105 @@ return cfg.get(section, 'Inherits') return '' - def _cp_file(self, src, dst): - if os.path.isfile(src): - try: - shutil.copy2(src, dst) - except: - pass + def _cp_icon(self, src_file, dst_file): + try: + shutil.copy2(src_file, dst_file) + except: + pass def _generate_local_theme(self, name, inherit, color): """Generate a inherit local theme from system theme""" # Create folder name = '.'.join([name, 'foldercolor']) # Generate a Folder Color theme try: - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, '16x16', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, '22x22', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, '24x24', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places') + if not os.path.exists(dst_path): + os.makedirs(dst_path) except OSError as exception: pass except: pass - - # Generate icons + + # Generate regular icons for folder in self.foldercolor.DEFAULT_FOLDERS: - # scalable - src_file = ''.join([self.foldercolor.get_path(), self.foldercolor.get_iconname(folder, color), '.svg']) - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(folder)) - self._cp_file(src_file, dst_file) - # 16x16 - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('/scalable/', '/16x16/') - self._cp_file(src_file_16, dst_file_16) - # 22x22 - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('/scalable/', '/22x22/') - self._cp_file(src_file_22, dst_file_22) - # 24x24 - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('/scalable/', '/24x24/') - self._cp_file(src_file_24, dst_file_24) - - # folder.svg - src_file = ''.join([self.foldercolor.get_path(), self.foldercolor.get_iconname('', color), '.svg']) - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 0)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # inode-directory.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 1)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # user-home.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 2)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # folder_home.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 3)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # network-workgroup.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 4)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # folder-remote.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 5)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # document-open-recent.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 6)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + # Get source default icon for a resolution + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.get_iconname(folder, color, 'places', resolution), '.svg']) + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(folder)) + self._cp_icon(src_file, dst_file) + + # Generate no regular icons: default, home, remote + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.get_iconname('', color, 'places', resolution), '.svg']) + + # folder.svg & inode-directory.svg + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 0)) # folder.svg + self._cp_icon(src_file, dst_file) + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 1)) # inode-directory.svg + self._cp_icon(src_file, dst_file) + + # user-home.svg & folder_home.svg + src_icon_default_folder = src_file + # Exist home? If not > default folder icon + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.EXTRA_HOME % color, '.svg']) + if not os.path.isfile(src_file): + src_file = src_icon_default_folder + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 2)) # user-home.svg + self._cp_icon(src_file, dst_file) + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 3)) # folder_home.svg + self._cp_icon(src_file, dst_file) + + # network-workgroup.svg & folder-remote.svg + # Exist remote? If not > default folder icon + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.EXTRA_REMOTE % color, '.svg']) + if not os.path.isfile(src_file): + src_file = src_icon_default_folder + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 4)) # network-workgroup.svg + self._cp_icon(src_file, dst_file) + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 5)) # folder-remote.svg + self._cp_icon(src_file, dst_file) + + # document-open-recent.svg + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.EXTRA_RECENT % color, '.svg']) + if not os.path.isfile(src_file): + src_file = src_icon_default_folder + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 6)) # document-open-recent.svg + self._cp_icon(src_file, dst_file) # Generate index.theme index_file = '/'.join([os.path.join(self.foldercolor.USER_PATH_THEME, name), 'index.theme']) cfg = ConfigParser.ConfigParser() cfg.optionxform = str cfg.add_section('Icon Theme') - cfg.set('Icon Theme', 'Name', name) - cfg.set('Icon Theme', 'Hidden', 'true') - cfg.set('Icon Theme', 'Comment', 'Generated by Folder Color') - cfg.set('Icon Theme', 'Inherits', inherit) - cfg.set('Icon Theme', 'Directories', 'scalable/places,16x16/places,22x22/places,24x24/places') - cfg.add_section('scalable/places') - cfg.set('scalable/places', 'Size', '48') - cfg.set('scalable/places', 'Context', 'Places') - cfg.set('scalable/places', 'Type', 'Scalable') - cfg.add_section('16x16/places') - cfg.set('16x16/places', 'Size', '16') - cfg.set('16x16/places', 'Context', 'Places') - cfg.set('16x16/places', 'Type', 'Threshold') - cfg.add_section('22x22/places') - cfg.set('22x22/places', 'Size', '22') - cfg.set('22x22/places', 'Context', 'Places') - cfg.set('22x22/places', 'Type', 'Threshold') - cfg.add_section('24x24/places') - cfg.set('24x24/places', 'Size', '24') - cfg.set('24x24/places', 'Context', 'Places') - cfg.set('24x24/places', 'Type', 'Threshold') + cfg.set('Icon Theme', 'Name', name) + cfg.set('Icon Theme', 'Hidden', 'true') + cfg.set('Icon Theme', 'Comment', 'Generated by Folder Color') + cfg.set('Icon Theme', 'Inherits', inherit) + + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + section = '/'.join([resolution_x, 'places']) # 16x16/places + try: + all_px = ','.join([all_px, section]) + except: + all_px = section + cfg.set('Icon Theme', 'Directories', all_px) + + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + section = '/'.join([resolution_x, 'places']) # 16x16/places + cfg.add_section(section) + cfg.set(section, 'Size', resolution) + cfg.set(section, 'Context', 'Places') + cfg.set(section, 'Type', 'Threshold') + f = open(index_file, 'w') cfg.write(f) f.close() - + # Reload icon cache os.system('gtk-update-icon-cache -q "%s"' % os.path.join(self.foldercolor.USER_PATH_THEME, name)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color-caja/debian/changelog new/folder-color-caja/debian/changelog --- old/folder-color-caja/debian/changelog 2015-03-29 12:04:42.000000000 +0200 +++ new/folder-color-caja/debian/changelog 2015-05-01 18:19:13.000000000 +0200 @@ -1,7 +1,7 @@ -folder-color-caja (0.0.70) trusty; urgency=low +folder-color-caja (0.0.78) trusty; urgency=low - * Fixed #1437800: No transparency in custom colors - * Updated translations + * Orange color changed to Humanity + * Dark recent inside - -- costales <[email protected]> Sat, 28 Mar 2015 18:12:31 +0000 + -- costales <[email protected]> Fri, 1 May 2015 18:04:31 +0000 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color-caja/debian/control new/folder-color-caja/debian/control --- old/folder-color-caja/debian/control 2015-03-29 12:04:42.000000000 +0200 +++ new/folder-color-caja/debian/control 2015-05-01 18:19:13.000000000 +0200 @@ -1,7 +1,7 @@ Source: folder-color-caja Section: utils Priority: extra -Standards-Version: 0.0.70 +Standards-Version: 0.0.78 Maintainer: costales <[email protected]> Build-Depends: python-distutils-extra, debhelper (>=7) Homepage: https://code.launchpad.net/folder-color diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color-caja/setup.py new/folder-color-caja/setup.py --- old/folder-color-caja/setup.py 2015-03-29 12:04:41.000000000 +0200 +++ new/folder-color-caja/setup.py 2015-05-01 18:19:12.000000000 +0200 @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Folder Color 0.0.70 - http://launchpad.net/folder-color +# Folder Color 0.0.78 - http://launchpad.net/folder-color # Copyright (C) 2012-2015 Marcos Alvarez Costales https://launchpad.net/~costales # # folder-color is free software; you can redistribute it and/or modify @@ -26,7 +26,7 @@ # Setup stage DistUtilsExtra.auto.setup( name = "folder-color-caja", - version = "0.0.70", + version = "0.0.78", description = "Change your folder color in Caja", author = "Marcos Alvarez Costales https://launchpad.net/~costales", author_email = "https://launchpad.net/~costales", ++++++ folder-color-common_0.0.70_all.tar.gz -> folder-color-common_0.0.78.tar.gz ++++++ ++++ 69948 lines of diff (skipped) ++++++ folder-color_0.0.70_all.tar.gz -> folder-color_0.0.78.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color/debian/changelog new/folder-color/debian/changelog --- old/folder-color/debian/changelog 2015-03-29 12:04:28.000000000 +0200 +++ new/folder-color/debian/changelog 2015-05-01 18:19:04.000000000 +0200 @@ -1,7 +1,7 @@ -folder-color (0.0.70) trusty; urgency=low +folder-color (0.0.78) trusty; urgency=low - * Fixed #1437800: No transparency in custom colors - * Updated translations + * Orange color changed to Humanity + * Dark recent inside - -- costales <[email protected]> Sat, 28 Mar 2015 18:12:31 +0000 + -- costales <[email protected]> Fri, 1 May 2015 18:04:31 +0000 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color/debian/control new/folder-color/debian/control --- old/folder-color/debian/control 2015-03-29 12:04:28.000000000 +0200 +++ new/folder-color/debian/control 2015-05-01 18:19:04.000000000 +0200 @@ -1,7 +1,7 @@ Source: folder-color Section: utils Priority: extra -Standards-Version: 0.0.70 +Standards-Version: 0.0.78 Maintainer: costales <[email protected]> Build-Depends: python-distutils-extra, debhelper (>=7) Homepage: https://code.launchpad.net/folder-color diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color/nautilus-extension/folder-color.py new/folder-color/nautilus-extension/folder-color.py --- old/folder-color/nautilus-extension/folder-color.py 2015-03-29 12:03:51.000000000 +0200 +++ new/folder-color/nautilus-extension/folder-color.py 2015-05-01 18:18:43.000000000 +0200 @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Folder Color 0.0.70 +# Folder Color 0.0.78 # Copyright (C) 2012-2015 Marcos Alvarez Costales https://launchpad.net/~costales # # Folder Color is free software; you can redistribute it and/or modify @@ -16,7 +16,7 @@ # along with Folder Color; if not, see http://www.gnu.org/licenses # for more information. -import os, urllib, gettext, glob, webbrowser, operator, shutil, ConfigParser +import os, urllib, gettext, glob, webbrowser, operator, shutil, ConfigParser, subprocess from gi.repository import Nautilus, Gtk, GObject, Gio, GLib # i18n @@ -31,22 +31,29 @@ self.DEFAULT_PATH_THEME = '' - self.PLACES = 'places' - self.EMBLEMS = 'emblems' - self.CUSTOM = 'custom' + self.PLACES = 'places' + self.EMBLEMS = 'emblems' + self.CUSTOM = 'custom' + self.GLOBALCOLOR = 'globalcolor' self.FOLDER = 'folder' - self.PRE_PLACES = '_'.join([self.FOLDER, 'color']) - self.PRE_EMBLEMS = '_'.join([self.FOLDER, 'emblem']) - self.PRE_CUSTOMS = '_'.join([self.FOLDER, 'custom']) - - self.SEARCH_PLACES = '_'.join([self.PRE_PLACES, '*.svg']) - self.SEARCH_EMBLEMS = '_'.join([self.PRE_EMBLEMS, '*.svg']) - self.SEARCH_CUSTOMS = ''.join([self.PRE_CUSTOMS, '*.svg']) - - self.CHECK_PLACE = 'folder_color_blue' - self.CHECK_EMBLEM = 'folder_emblem_favorite' - self.CHECK_CUSTOM = 'folder_custom' + self.PRE_PLACES = 'folder_color' + self.PRE_EMBLEMS = 'folder_emblem' + self.PRE_CUSTOMS = 'folder_custom' + + self.SEARCH_PLACES = 'folder_color_*.svg' + self.SEARCH_EMBLEMS = 'folder_emblem_*.svg' + self.SEARCH_CUSTOMS = 'folder_custom*.svg' + self.SEARCH_GLOBALCOLOR = 'folder_color_globalcolor.svg' + + self.CHECK_PLACE = 'folder_color_blue' + self.CHECK_EMBLEM = 'folder_emblem_favorite' + self.CHECK_CUSTOM = 'folder_custom' + self.CHECK_GLOBALCOLOR = 'folder_color_globalcolor' + + self.EXTRA_HOME = 'folder_extraicons_%s_home' + self.EXTRA_REMOTE = 'folder_extraicons_%s_remote' + self.EXTRA_RECENT = 'folder_extraicons_%s_recent' self.DESKTOP = 'desktop' self.DOCUMENTS = 'documents' @@ -59,6 +66,7 @@ self.DEFAULT_ICONS = ('undo', 'edit', 'picker', 'preferences', 'default', self.DESKTOP, self.DOCUMENTS, self.DOWNLOADS, self.MUSIC, self.PICTURES, self.PUBLIC, self.TEMPLATES, self.VIDEOS) self.DEFAULT_FOLDERS = self._get_default_folders() + self.ICON_RESOLUTIONS = {'16': '16x16', '22': '22x22', '24': '24x24', '32': '32x32', '48': '48x48', '64': '64x64'} self.SYSTEM_PATH_THEME = '/usr/share/icons' self.USER_PATH_THEME = os.path.join(os.getenv('HOME'), '.icons') @@ -71,12 +79,12 @@ self.VALUE_LIGHT = 'value_light' self.VALUE_MIDDLE = 'value_middle' self.VALUE_DARK = 'value_dark' - + # Nautilus crashed? Allow future Preference dialogs if remove_pid: self.lock.remove() - def get_iconname(self, folder, name, what='places'): + def get_iconname(self, folder, name, what='places', get_px='48'): """For 'green' returns folder_color_green_downloads""" if what == self.PLACES: prefix = self.PRE_PLACES @@ -89,7 +97,7 @@ if folder in self.DEFAULT_FOLDERS: iconname = '_'.join([prefix, name.replace(' ', '_').lower(), self.DEFAULT_FOLDERS[folder]]) - filename = ''.join([self.get_path(what), iconname, '.svg']) + filename = ''.join([self.get_path(what, get_px), iconname, '.svg']) if os.path.isfile(filename): # Exist? return iconname @@ -103,16 +111,18 @@ icon_name = icon_name.replace(self.PRE_PLACES, '').replace(self.PRE_EMBLEMS, '').replace('_', ' ').strip() return icon_name - def get_path(self, what='places'): + def get_path(self, what='places', get_px='48'): """Get current path. By example: /usr/share/icons/hicolor/48x48/places/""" icon = Gtk.IconTheme.get_default() if what == self.PLACES: - icon_path = icon.lookup_icon(self.CHECK_PLACE, 48, 0) + icon_path = icon.lookup_icon(self.CHECK_PLACE, int(get_px), 0) elif what == self.EMBLEMS: icon_path = icon.lookup_icon(self.CHECK_EMBLEM, 24, 0) elif what == self.CUSTOM: - icon_path = icon.lookup_icon(self.CHECK_CUSTOM, 48, 0) + icon_path = icon.lookup_icon(self.CHECK_CUSTOM, int(get_px), 0) + elif what == self.GLOBALCOLOR: + icon_path = icon.lookup_icon(self.CHECK_GLOBALCOLOR, 16, 0) else: return '' @@ -136,6 +146,8 @@ path = ''.join([self.get_path(what), self.SEARCH_EMBLEMS]) elif what == self.CUSTOM: path = ''.join([self.get_path(what), self.SEARCH_CUSTOMS]) + elif what == self.GLOBALCOLOR: + path = ''.join([self.get_path(what), self.SEARCH_GLOBALCOLOR]) else: return available_items @@ -179,7 +191,8 @@ def _reload_icon(self, folder): """Reload the current folder icon""" - os.system('touch "%s"' % folder) + proc = subprocess.Popen(['touch', folder], shell=False) + proc.communicate() def _get_default_folders(self): """Default user folders""" @@ -232,9 +245,12 @@ """Set an emblem""" # TODO: Use Gio if emblem: - os.system('gvfs-set-attribute -t stringv "%s" metadata::emblems "%s"' % (folder, emblem)) + cmd = ['gvfs-set-attribute', '-t', 'stringv', folder, 'metadata::emblems', emblem] else: - os.system('gvfs-set-attribute -t unset "%s" metadata::emblems' % folder) + cmd = ['gvfs-set-attribute', '-t', 'unset', folder, 'metadata::emblems'] + + proc = subprocess.Popen(cmd, shell=False) + proc.communicate() self._reload_icon(folder) @@ -304,7 +320,6 @@ pass except: pass - pass def get_file_items(self, window, items): """Nautilus invoke this function in its startup > Then, create menu entry""" @@ -312,7 +327,25 @@ if not self._check_generate_menu(items): return # Return menu - return self._generate_menu(items) + return self._generate_menu(items, self._check_generate_restore(items)) + + def _check_generate_restore(self, items): + # For each dir, search custom icon or emblem + for item in items: + if item.is_gone(): + continue + + folder_name = urllib.unquote(item.get_uri()[7:]) + folder = Gio.File.new_for_path(folder_name) + info = folder.query_info('metadata', 0, None) + if info.get_attribute_as_string('metadata::custom-icon-name'): + return True + if info.get_attribute_as_string('metadata::custom-icon'): + return True + if info.get_attribute_as_string('metadata::emblems'): + return True + + return False def _check_generate_menu(self, items): """Show the menu?""" @@ -336,7 +369,7 @@ # All OK > Generate menu return True - def _generate_menu(self, items): + def _generate_menu(self, items, show_restore): """Generate menu: Color | Custom? | Restore | Emblems? | Preferences""" # Main menu [1 or +1 folder(s)] if len(items) > 1: @@ -377,24 +410,31 @@ submenu.append_item(item) # Restore - item_sep = Nautilus.MenuItem(name='ChangeFolderEmblemMenu::Sep', label=_("Restore:"), sensitive=False) - submenu.append_item(item_sep) - - item_restore = Nautilus.MenuItem(name='ChangeFolderColorMenu::Restore', label=_("Default"), icon='folder_color_undo') - item_restore.connect('activate', self._menu_activate_restore, items) - submenu.append_item(item_restore) - - # Preferences - path = self.foldercolor.get_current_icontheme()[0] - if path: + if show_restore: + item_sep = Nautilus.MenuItem(name='ChangeFolderEmblemMenu::Sep', label=_("Restore:"), sensitive=False) + submenu.append_item(item_sep) + + item_restore = Nautilus.MenuItem(name='ChangeFolderColorMenu::Restore', label=_("Default"), icon='folder_color_undo') + item_restore.connect('activate', self._menu_activate_restore, items) + submenu.append_item(item_restore) + + # Global Color + path_theme,customs = self.foldercolor.get_available_icons('globalcolor') + if len(customs) and path_theme == self.DEFAULT_PATH_THEME: # Show Global Color only if the theme wants that item_sep = Nautilus.MenuItem(name='ChangeFolderColorMenu::Sep2', label=_("Edit:"), sensitive=False) submenu.append_item(item_sep) - item = Nautilus.MenuItem(name=''.join(['ChangeFolderColorMenu::"preferences"']), label=_("Global Color"), icon='folder_color_preferences') + item = Nautilus.MenuItem(name=''.join(['ChangeFolderColorMenu::"preferences"']), label=_("Global Color"), icon='folder_color_globalcolor') item.connect('activate', self._menu_activate_preferences) submenu.append_item(item) + elif not os.path.exists(self.foldercolor.HIDE_DONATION): + item_sep = Nautilus.MenuItem(name='ChangeFolderColorMenu::Sep2', label=_("Support:"), sensitive=False) + submenu.append_item(item_sep) + item = Nautilus.MenuItem(name=''.join(['ChangeFolderColorMenu::"donate"']), label=_("Donate? Click to hide")) + item.connect('activate', self._on_donate_menu) + submenu.append_item(item) return top_menuitem, - + def _menu_activate_color(self, menu, color, folders): """Set Custom Color""" for each_folder in folders: @@ -498,7 +538,18 @@ win.show_all() Gtk.main() + def _on_donate_menu(self, btn): + """Open from contextual menu""" + webbrowser.open(self.foldercolor.URL_DONATE) + try: + os.makedirs(self.foldercolor.HIDE_DONATION) + except OSError as exception: + pass + except: + pass + def _on_donate_hide(self, null): + """Open from global color window""" self.vbox_donate.hide() # Hide donation after show it try: @@ -557,14 +608,13 @@ """Set default global color""" def __init__(self): self.foldercolor = FolderColor() - pass def restore(self): """Restore theme to default""" path, name, index = self.foldercolor.get_current_icontheme() if not path: return - fc_name = '.'.join([name, 'foldercolor']) # Only remove a Folder Color theme + fc_name = '.'.join([name, 'foldercolor']) # Folder Color theme local_theme = os.path.join(self.foldercolor.USER_PATH_THEME, fc_name) self._set_theme(name) @@ -592,197 +642,105 @@ return cfg.get(section, 'Inherits') return '' - def _cp_file(self, src, dst): - if os.path.isfile(src): - try: - shutil.copy2(src, dst) - except: - pass + def _cp_icon(self, src_file, dst_file): + try: + shutil.copy2(src_file, dst_file) + except: + pass def _generate_local_theme(self, name, inherit, color): """Generate a inherit local theme from system theme""" # Create folder name = '.'.join([name, 'foldercolor']) # Generate a Folder Color theme try: - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, '16x16', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, '22x22', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) - dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, '24x24', 'places') - if not os.path.exists(dst_path): - os.makedirs(dst_path) + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + dst_path = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places') + if not os.path.exists(dst_path): + os.makedirs(dst_path) except OSError as exception: pass except: pass - - # Generate icons + + # Generate regular icons for folder in self.foldercolor.DEFAULT_FOLDERS: - # scalable - src_file = ''.join([self.foldercolor.get_path(), self.foldercolor.get_iconname(folder, color), '.svg']) - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(folder)) - self._cp_file(src_file, dst_file) - # 16x16 - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('/scalable/', '/16x16/') - self._cp_file(src_file_16, dst_file_16) - # 22x22 - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('/scalable/', '/22x22/') - self._cp_file(src_file_22, dst_file_22) - # 24x24 - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('/scalable/', '/24x24/') - self._cp_file(src_file_24, dst_file_24) - - # folder.svg - src_file = ''.join([self.foldercolor.get_path(), self.foldercolor.get_iconname('', color), '.svg']) - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 0)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # inode-directory.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 1)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # user-home.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 2)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # folder_home.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 3)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # network-workgroup.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 4)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # folder-remote.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 5)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) - - # document-open-recent.svg - dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, 'scalable', 'places', self._get_folder_icon(None, 6)) - self._cp_file(src_file, dst_file) - - src_file_16 = src_file.replace('/48', '/16').replace('48/', '16/') - dst_file_16 = dst_file.replace('scalable', '16x16') - self._cp_file(src_file_16, dst_file_16) - - src_file_22 = src_file.replace('/48', '/22').replace('48/', '22/') - dst_file_22 = dst_file.replace('scalable', '22x22') - self._cp_file(src_file_22, dst_file_22) - - src_file_24 = src_file.replace('/48', '/24').replace('48/', '24/') - dst_file_24 = dst_file.replace('scalable', '24x24') - self._cp_file(src_file_24, dst_file_24) + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + # Get source default icon for a resolution + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.get_iconname(folder, color, 'places', resolution), '.svg']) + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(folder)) + self._cp_icon(src_file, dst_file) + + # Generate no regular icons: default, home, remote + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.get_iconname('', color, 'places', resolution), '.svg']) + + # folder.svg & inode-directory.svg + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 0)) # folder.svg + self._cp_icon(src_file, dst_file) + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 1)) # inode-directory.svg + self._cp_icon(src_file, dst_file) + + # user-home.svg & folder_home.svg + src_icon_default_folder = src_file + # Exist home? If not > default folder icon + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.EXTRA_HOME % color, '.svg']) + if not os.path.isfile(src_file): + src_file = src_icon_default_folder + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 2)) # user-home.svg + self._cp_icon(src_file, dst_file) + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 3)) # folder_home.svg + self._cp_icon(src_file, dst_file) + + # network-workgroup.svg & folder-remote.svg + # Exist remote? If not > default folder icon + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.EXTRA_REMOTE % color, '.svg']) + if not os.path.isfile(src_file): + src_file = src_icon_default_folder + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 4)) # network-workgroup.svg + self._cp_icon(src_file, dst_file) + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 5)) # folder-remote.svg + self._cp_icon(src_file, dst_file) + + # document-open-recent.svg + src_file = ''.join([self.foldercolor.get_path('places', resolution), self.foldercolor.EXTRA_RECENT % color, '.svg']) + if not os.path.isfile(src_file): + src_file = src_icon_default_folder + # Generate + dst_file = os.path.join(self.foldercolor.USER_PATH_THEME, name, resolution_x, 'places', self._get_folder_icon(None, 6)) # document-open-recent.svg + self._cp_icon(src_file, dst_file) # Generate index.theme index_file = '/'.join([os.path.join(self.foldercolor.USER_PATH_THEME, name), 'index.theme']) cfg = ConfigParser.ConfigParser() cfg.optionxform = str cfg.add_section('Icon Theme') - cfg.set('Icon Theme', 'Name', name) - cfg.set('Icon Theme', 'Hidden', 'true') - cfg.set('Icon Theme', 'Comment', 'Generated by Folder Color') - cfg.set('Icon Theme', 'Inherits', inherit) - cfg.set('Icon Theme', 'Directories', 'scalable/places,16x16/places,22x22/places,24x24/places') - cfg.add_section('scalable/places') - cfg.set('scalable/places', 'Size', '48') - cfg.set('scalable/places', 'Context', 'Places') - cfg.set('scalable/places', 'Type', 'Scalable') - cfg.add_section('16x16/places') - cfg.set('16x16/places', 'Size', '16') - cfg.set('16x16/places', 'Context', 'Places') - cfg.set('16x16/places', 'Type', 'Threshold') - cfg.add_section('22x22/places') - cfg.set('22x22/places', 'Size', '22') - cfg.set('22x22/places', 'Context', 'Places') - cfg.set('22x22/places', 'Type', 'Threshold') - cfg.add_section('24x24/places') - cfg.set('24x24/places', 'Size', '24') - cfg.set('24x24/places', 'Context', 'Places') - cfg.set('24x24/places', 'Type', 'Threshold') + cfg.set('Icon Theme', 'Name', name) + cfg.set('Icon Theme', 'Hidden', 'true') + cfg.set('Icon Theme', 'Comment', 'Generated by Folder Color') + cfg.set('Icon Theme', 'Inherits', inherit) + + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + section = '/'.join([resolution_x, 'places']) # 16x16/places + try: + all_px = ','.join([all_px, section]) + except: + all_px = section + cfg.set('Icon Theme', 'Directories', all_px) + + for resolution,resolution_x in self.foldercolor.ICON_RESOLUTIONS.iteritems(): + section = '/'.join([resolution_x, 'places']) # 16x16/places + cfg.add_section(section) + cfg.set(section, 'Size', resolution) + cfg.set(section, 'Context', 'Places') + cfg.set(section, 'Type', 'Threshold') + f = open(index_file, 'w') cfg.write(f) f.close() - + # Reload icon cache os.system('gtk-update-icon-cache -q "%s"' % os.path.join(self.foldercolor.USER_PATH_THEME, name)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/folder-color/setup.py new/folder-color/setup.py --- old/folder-color/setup.py 2015-03-29 12:04:28.000000000 +0200 +++ new/folder-color/setup.py 2015-05-01 18:19:04.000000000 +0200 @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Folder Color 0.0.70 - http://launchpad.net/folder-color +# Folder Color 0.0.78 - http://launchpad.net/folder-color # Copyright (C) 2012-2015 Marcos Alvarez Costales https://launchpad.net/~costales # # folder-color is free software; you can redistribute it and/or modify @@ -26,7 +26,7 @@ # Setup stage DistUtilsExtra.auto.setup( name = "folder-color", - version = "0.0.70", + version = "0.0.78", description = "Change your folder color in Nautilus", author = "Marcos Alvarez Costales https://launchpad.net/~costales", author_email = "https://launchpad.net/~costales",
