diff --git a/configure.in b/configure.in index 82d929966..86ebd51ea 100644 --- a/configure.in +++ b/configure.in @@ -94,22 +94,23 @@ src/const.py src/Makefile src/cli/Makefile src/gen/Makefile -src/gen/display/Makefile -src/gen/proxy/Makefile src/gen/db/Makefile +src/gen/display/Makefile src/gen/lib/Makefile -src/gen/utils/Makefile +src/gen/mime/Makefile src/gen/plug/Makefile src/gen/plug/docbackend/Makefile src/gen/plug/docgen/Makefile src/gen/plug/menu/Makefile +src/gen/proxy/Makefile +src/gen/utils/Makefile src/gui/Makefile src/gui/editors/Makefile src/gui/editors/displaytabs/Makefile src/gui/selectors/Makefile src/gui/views/Makefile src/gui/views/treemodels/Makefile -src/Mime/Makefile +src/gui/widgets/Makefile src/GrampsLogger/Makefile src/Merge/Makefile src/docgen/Makefile @@ -124,7 +125,6 @@ src/Filters/Rules/MediaObject/Makefile src/Filters/Rules/Repository/Makefile src/Filters/Rules/Note/Makefile src/Filters/SideBar/Makefile -src/gui/widgets/Makefile src/Simple/Makefile src/GrampsLocale/Makefile src/PluginUtils/Makefile diff --git a/po/POTFILES.in b/po/POTFILES.in index 997e9692b..186f727a0 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -54,21 +54,6 @@ src/cli/grampscli.py src/gen/__init__.py src/gen/updatecallback.py -# gen display API -src/gen/display/name.py - -# gen utils API -src/gen/utils/__init__.py -src/gen/utils/callback.py -src/gen/utils/callman.py - -# gen proxy API -src/gen/proxy/living.py -src/gen/proxy/private.py -src/gen/proxy/proxybase.py -src/gen/proxy/filter.py -src/gen/proxy/__init__.py - # gen db API src/gen/db/backup.py src/gen/db/base.py @@ -78,6 +63,9 @@ src/gen/db/dbconst.py src/gen/db/__init__.py src/gen/db/undoredo.py +# gen display API +src/gen/display/name.py + # gen lib API src/gen/lib/witness.py src/gen/lib/__init__.py @@ -135,6 +123,12 @@ src/gen/lib/researcher.py src/gen/lib/familyreltype.py src/gen/lib/ldsord.py +# gen mime API +src/gen/mime/__init__.py +src/gen/mime/_gnomemime.py +src/gen/mime/_pythonmime.py +src/gen/mime/_winmime.py + # gen plugin API src/gen/plug/__init__.py src/gen/plug/_docgenplugin.py @@ -179,6 +173,18 @@ src/gen/plug/docbackend/__init__.py src/gen/plug/docbackend/cairobackend.py src/gen/plug/docbackend/docbackend.py +# gen proxy API +src/gen/proxy/living.py +src/gen/proxy/private.py +src/gen/proxy/proxybase.py +src/gen/proxy/filter.py +src/gen/proxy/__init__.py + +# gen utils API +src/gen/utils/__init__.py +src/gen/utils/callback.py +src/gen/utils/callman.py + # gui - GUI code src/gui/__init__.py src/gui/dbguielement.py @@ -349,11 +355,6 @@ src/GrampsLogger/_GtkHandler.py src/GrampsLogger/__init__.py src/GrampsLogger/_RotateHandler.py -# Mime package -src/Mime/_GnomeMime.py -src/Mime/__init__.py -src/Mime/_PythonMime.py - # plugins directory src/plugins/BookReport.py src/plugins/bookreport.gpr.py diff --git a/src/Makefile.am b/src/Makefile.am index 7056f2c57..02fed8dfa 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -15,7 +15,6 @@ SUBDIRS = \ images \ Merge \ mapstraction \ - Mime \ PluginUtils \ plugins \ ReportBase \ diff --git a/src/ThumbNails.py b/src/ThumbNails.py index c034a551d..d2239d2b6 100644 --- a/src/ThumbNails.py +++ b/src/ThumbNails.py @@ -47,7 +47,6 @@ import gobject # #------------------------------------------------------------------------- import const -import Mime #------------------------------------------------------------------------- # diff --git a/src/gen/Makefile.am b/src/gen/Makefile.am index 811e2f44a..ed5bc7c82 100644 --- a/src/gen/Makefile.am +++ b/src/gen/Makefile.am @@ -6,7 +6,8 @@ SUBDIRS = \ db \ display \ - lib\ + lib \ + mime \ plug \ proxy \ utils diff --git a/src/gen/__init__.py b/src/gen/__init__.py index dd4efb2e7..b65d8f63e 100644 --- a/src/gen/__init__.py +++ b/src/gen/__init__.py @@ -30,4 +30,4 @@ The gen module provides 5 packages. 5. gen.utils provides some generic utilities """ -__all__ = [ "proxy", "db", "lib", "utils", "plug" ] +__all__ = [ "db", "display", "lib", "mime", "plug", "proxy", "utils" ] diff --git a/src/Mime/Makefile.am b/src/gen/mime/Makefile.am similarity index 65% rename from src/Mime/Makefile.am rename to src/gen/mime/Makefile.am index 7662053d1..37707b8f5 100644 --- a/src/Mime/Makefile.am +++ b/src/gen/mime/Makefile.am @@ -1,4 +1,4 @@ -# This is the src/Mime level Makefile for Gramps +# This is the src/gen/mime level Makefile for Gramps # We could use GNU make's ':=' syntax for nice wildcard use, # but that is not necessarily portable. # If not using GNU make, then list all .py files individually @@ -7,17 +7,17 @@ pkgdatadir = $(datadir)/@PACKAGE@/Mime pkgdata_PYTHON = \ __init__.py\ - _GnomeMime.py\ - _WinMime.py\ - _PythonMime.py + _gnomemime.py\ + _winmime.py\ + _pythonmime.py -pkgpyexecdir = @pkgpyexecdir@/Mime -pkgpythondir = @pkgpythondir@/Mime +pkgpyexecdir = @pkgpyexecdir@/gen/mime +pkgpythondir = @pkgpythondir@/gen/mime # Clean up all the byte-compiled files MOSTLYCLEANFILES = *pyc *pyo -GRAMPS_PY_MODPATH = "../" +GRAMPS_PY_MODPATH = "../../" pycheck: (export PYTHONPATH=$(GRAMPS_PY_MODPATH); \ diff --git a/src/Mime/__init__.py b/src/gen/mime/__init__.py similarity index 83% rename from src/Mime/__init__.py rename to src/gen/mime/__init__.py index 93ba56b8b..64320c197 100644 --- a/src/Mime/__init__.py +++ b/src/gen/mime/__init__.py @@ -19,12 +19,12 @@ # try: - from _GnomeMime import * + from _gnomemime import get_description, get_type, mime_type_is_defined except: try: - from _WinMime import * + from _winmime import get_description, get_type, mime_type_is_defined except: - from _PythonMime import * + from _pythonmime import get_description, get_type, mime_type_is_defined def base_type(val): return val.split('/')[0] diff --git a/src/Mime/_GnomeMime.py b/src/gen/mime/_gnomemime.py similarity index 78% rename from src/Mime/_GnomeMime.py rename to src/gen/mime/_gnomemime.py index 3b9ada56f..22fb164fd 100644 --- a/src/Mime/_GnomeMime.py +++ b/src/gen/mime/_gnomemime.py @@ -31,33 +31,6 @@ except: from gen.ggettext import gettext as _ -def get_application(type): - """Return the application command and application name of the - specified mime type""" - try: - applist = mime_get_short_list_applications(type) - if applist: - applist = [mime_get_default_application(type)] + applist - for prog in applist: - if _is_good_command(prog[2]): - return (prog[2],prog[1]) - else: - return None - else: - return None - except: - return None - -def _is_good_command(cmd): - """ - We don't know what to do with certain substitution values. - If we find one, skip the command. - """ - for sub in [ "%m", "%i", "%c" ]: - if cmd.find(sub) != -1: - return False - return True - def get_description(type): """Return the description of the specified mime type.""" try: @@ -82,3 +55,17 @@ def mime_type_is_defined(type): except: return False + #------------------------------------------------------------------------- +# +# private functions +# +#------------------------------------------------------------------------- +def _is_good_command(cmd): + """ + We don't know what to do with certain substitution values. + If we find one, skip the command. + """ + for sub in [ "%m", "%i", "%c" ]: + if cmd.find(sub) != -1: + return False + return True \ No newline at end of file diff --git a/src/Mime/_PythonMime.py b/src/gen/mime/_pythonmime.py similarity index 93% rename from src/Mime/_PythonMime.py rename to src/gen/mime/_pythonmime.py index 6ca245915..28664e458 100644 --- a/src/Mime/_PythonMime.py +++ b/src/gen/mime/_pythonmime.py @@ -41,11 +41,6 @@ mimetypes.add_type('application/x-gramps-package','.gpkg') mimetypes.add_type('application/x-gramps-package','.GPKG') mimetypes.add_type('text/x-comma-separated-values', '.csv') -def get_application(mime_type): - """Return the application command and application name of the - specified mime type""" - return None - def get_description(mime_type): """Return the description of the specified mime type""" return _type_map.get(mime_type,_("unknown")) diff --git a/src/Mime/_WinMime.py b/src/gen/mime/_winmime.py similarity index 67% rename from src/Mime/_WinMime.py rename to src/gen/mime/_winmime.py index 3ff2a87c6..43daed64d 100644 --- a/src/Mime/_WinMime.py +++ b/src/gen/mime/_winmime.py @@ -31,66 +31,14 @@ Mime utility functions for the MS Windows platform #------------------------------------------------------------------------- import os from _winreg import * -from gen.ggettext import gettext as _ #------------------------------------------------------------------------- # # Gramps modules # #------------------------------------------------------------------------- -import _PythonMime - - -def get_application(mime_type): - """Return the application command and application name of the - specified mime type""" - extension = _get_extension(mime_type) - progid = _get_prog_id(extension) - - if not progid: - return None - - # Find the application associated with this program ID - hcr = ConnectRegistry(None, HKEY_CLASSES_ROOT) - subkey = OpenKey(hcr, "%s\shell\open\command" % progid) - if subkey: - name, command, data_type = EnumValue(subkey, 0) - if data_type == REG_EXPAND_SZ: - command = command.replace( '%SystemRoot%', - os.getenv('SystemRoot') ) - CloseKey(hcr) - else: - return None - CloseKey(subkey) - - # Find a friendly name for the application - if command.startswith('"'): - app = command.split('"')[1] - elif command.startswith('rundll32.exe'): - # Get the description of the DLL instead of the application - app = command.split()[1].split(',')[0] - else: - app = command.split()[0] - - hcu = ConnectRegistry(None, HKEY_CURRENT_USER) - try: - subkey = OpenKey(hcu, "Software\Microsoft\Windows\ShellNoRoam\MUICache") - except WindowsError: - subkey = None - - desc = None - if subkey: - try: - desc, data_type = QueryValueEx(subkey, app) - except WindowsError: - # No friendly name exists. Use progid - desc = progid - CloseKey(subkey) - else: - desc = progid - CloseKey(hcu) - - return (command, desc) +import _pythonmime +from gen.ggettext import gettext as _ def get_description(mime_type): """Return the description of the specfied mime type""" @@ -110,7 +58,7 @@ def get_description(mime_type): def get_type(file): """Return the mime type of the specified file""" - return _PythonMime.get_type(file) + return _pythonmime.get_type(file) def mime_type_is_defined(mime_type): """ @@ -120,7 +68,7 @@ def mime_type_is_defined(mime_type): if extension: return True else: - return _PythonMime.mime_type_is_defined(mime_type) + return _pythonmime.mime_type_is_defined(mime_type) #------------------------------------------------------------------------- # diff --git a/src/gramps.py b/src/gramps.py index e115a0f03..dd4c8ad09 100644 --- a/src/gramps.py +++ b/src/gramps.py @@ -42,7 +42,7 @@ LOG = logging.getLogger(".") # GRAMPS modules # #------------------------------------------------------------------------- -from Mime import mime_type_is_defined +from gen.mime import mime_type_is_defined import TransUtils #------------------------------------------------------------------------- diff --git a/src/gui/editors/addmedia.py b/src/gui/editors/addmedia.py index f27df21c0..95f77ca70 100644 --- a/src/gui/editors/addmedia.py +++ b/src/gui/editors/addmedia.py @@ -53,7 +53,7 @@ import gtk import const import config import Utils -import Mime +import gen.mime import ThumbNails import GrampsDisplay import ManagedWindow @@ -162,7 +162,7 @@ class AddMediaObject(ManagedWindow.ManagedWindow): filename = Utils.relative_path(filename, pname) - mtype = Mime.get_type(full_file) + mtype = gen.mime.get_type(full_file) description = description or os.path.basename(filename) self.obj.set_description(description) @@ -197,7 +197,7 @@ class AddMediaObject(ManagedWindow.ManagedWindow): filename = Utils.find_file( filename) if filename: - mtype = Mime.get_type(filename) + mtype = gen.mime.get_type(filename) if mtype and mtype.startswith("image"): image = scale_image(filename, const.THUMBSCALE) else: diff --git a/src/gui/editors/displaytabs/gallerytab.py b/src/gui/editors/displaytabs/gallerytab.py index 8da1df0da..bc9103f73 100644 --- a/src/gui/editors/displaytabs/gallerytab.py +++ b/src/gui/editors/displaytabs/gallerytab.py @@ -52,7 +52,7 @@ import gen.lib import Utils import ThumbNails import Errors -import Mime +import gen.mime from DdTargets import DdTargets from buttontab import ButtonTab @@ -458,8 +458,8 @@ class GalleryTab(ButtonTab, DbGUIElement): protocol, site, mfile, j, k, l = urlparse.urlparse(d) if protocol == "file": name = Utils.fix_encoding(mfile) - mime = Mime.get_type(name) - if not Mime.is_valid_type(mime): + mime = gen.mime.get_type(name) + if not gen.mime.is_valid_type(mime): return photo = gen.lib.MediaObject() photo.set_path(name) @@ -477,28 +477,6 @@ class GalleryTab(ButtonTab, DbGUIElement): self.dbstate.db.transaction_commit(trans, _("Drag Media Object")) self.rebuild() -# elif protocol != "": -# import urllib -# u = urllib.URLopener() -# try: -# tfile, headers = u.retrieve(d) -# except (IOError,OSError), msg: -# t = _("Could not import %s") % d -# ErrorDialog(t,str(msg)) -# return -# tfile = Utils.fix_encoding(tfile) -# mime = GrampsMime.get_type(tfile) -# photo = gen.lib.MediaObject() -# photo.set_mime_type(mime) -# photo.set_description(d) -# photo.set_path(tfile) -# trans = self.db.transaction_begin() -# self.db.add_object(photo,trans) -# self.db.transaction_commit(trans,_("Drag Media Object")) -# oref = gen.lib.MediaRef() -# oref.set_reference_handle(photo.get_handle()) -# self.dataobj.add_media_reference(oref) -# self.add_thumbnail(oref) def handle_extra_type(self, objtype, obj): pass diff --git a/src/gui/editors/editmedia.py b/src/gui/editors/editmedia.py index e1d017620..1ffaa50e2 100644 --- a/src/gui/editors/editmedia.py +++ b/src/gui/editors/editmedia.py @@ -42,7 +42,7 @@ import gtk #------------------------------------------------------------------------- from gui.utils import open_file_with_default_application import gen.lib -import Mime +import gen.mime import ThumbNails import Utils from editprimary import EditPrimary @@ -138,7 +138,7 @@ class EditMedia(EditPrimary): self.draw_preview() def determine_mime(self): - descr = Mime.get_description(self.obj.get_mime_type()) + descr = gen.mime.get_description(self.obj.get_mime_type()) if descr: self.mimetext.set_text(descr) @@ -146,9 +146,9 @@ class EditMedia(EditPrimary): path_full = Utils.media_path_full(self.db, path) if path != self.obj.get_path() and path_full != self.obj.get_path(): #redetermine mime - mime = Mime.get_type(Utils.find_file(path_full)) + mime = gen.mime.get_type(Utils.find_file(path_full)) self.obj.set_mime_type(mime) - descr = Mime.get_description(mime) + descr = gen.mime.get_description(mime) if descr: self.mimetext.set_text(descr) else: diff --git a/src/gui/editors/editmediaref.py b/src/gui/editors/editmediaref.py index da153642f..bbfe4470c 100644 --- a/src/gui/editors/editmediaref.py +++ b/src/gui/editors/editmediaref.py @@ -43,7 +43,7 @@ import gtk #------------------------------------------------------------------------- from gui.utils import open_file_with_default_application import const -import Mime +import gen.mime import ThumbNails import Utils from gen.lib import NoteType @@ -110,7 +110,7 @@ class EditMediaRef(EditReference): self.rectangle) self.subpixmap.set_from_pixbuf(self.subpix) - mt = Mime.get_description(self.mtype) + mt = gen.mime.get_description(self.mtype) self.top.get_object("type").set_text(mt if mt else "") def _setup_fields(self): diff --git a/src/plugins/import/ImportXml.py b/src/plugins/import/ImportXml.py index 05b1449a7..17e08f57d 100644 --- a/src/plugins/import/ImportXml.py +++ b/src/plugins/import/ImportXml.py @@ -38,7 +38,7 @@ import re # #------------------------------------------------------------------------- from QuestionDialog import ErrorDialog, WarningDialog -import Mime +import gen.mime import gen.lib import Utils import DateHandler @@ -1678,7 +1678,7 @@ class GrampsParser(UpdateCallback): attr.set_type(key) attr.set_value(attrs[key]) self.photo.add_attribute(attr) - self.photo.set_mime_type(Mime.get_type(self.photo.get_path())) + self.photo.set_mime_type(gen.mime.get_type(self.photo.get_path())) self.db.add_object(self.photo, self.trans) #set correct change time self.db.commit_media_object(self.photo, self.trans, self.change) diff --git a/src/plugins/lib/libgedcom.py b/src/plugins/lib/libgedcom.py index 2186f830f..7f5867a0b 100644 --- a/src/plugins/lib/libgedcom.py +++ b/src/plugins/lib/libgedcom.py @@ -113,7 +113,7 @@ import Errors import const import gen.lib from gen.updatecallback import UpdateCallback -import Mime +import gen.mime import LdsUtils import Utils from DateHandler._DateParser import DateParser @@ -4981,7 +4981,7 @@ class GedcomParser(UpdateCallback): self.__warn(_("Could not import %s") % filename[0]) path = filename[0].replace('\\', os.path.sep) state.media.set_path(path) - state.media.set_mime_type(Mime.get_type(path)) + state.media.set_mime_type(gen.mime.get_type(path)) if not state.media.get_description(): state.media.set_description(path) @@ -5561,7 +5561,7 @@ class GedcomParser(UpdateCallback): photo.set_description(title) full_path = os.path.abspath(path) if os.path.isfile(full_path): - photo.set_mime_type(Mime.get_type(full_path)) + photo.set_mime_type(gen.mime.get_type(full_path)) else: photo.set_mime_type(MIME_MAP.get(form.lower(), 'unknown')) self.dbase.add_object(photo, self.trans) diff --git a/src/plugins/view/mediaview.py b/src/plugins/view/mediaview.py index b15bfffb5..426f2c021 100644 --- a/src/plugins/view/mediaview.py +++ b/src/plugins/view/mediaview.py @@ -54,7 +54,7 @@ import const import config import Utils import Bookmarks -import Mime +import gen.mime import gen.lib from gui.editors import EditMedia, DeleteMediaQuery import Errors @@ -190,8 +190,8 @@ class MediaView(ListView): protocol, site, mfile, j, k, l = urlparse.urlparse(d) if protocol == "file": name = Utils.fix_encoding(mfile) - mime = Mime.get_type(name) - if not Mime.is_valid_type(mime): + mime = gen.mime.get_type(name) + if not gen.mime.is_valid_type(mime): return photo = gen.lib.MediaObject() photo.set_path(name) diff --git a/src/plugins/webreport/NarrativeWeb.py b/src/plugins/webreport/NarrativeWeb.py index 0166bc0d7..862df4155 100644 --- a/src/plugins/webreport/NarrativeWeb.py +++ b/src/plugins/webreport/NarrativeWeb.py @@ -92,7 +92,7 @@ import Utils from gui.utils import ProgressMeter import ThumbNails import ImgManip -import Mime +import gen.mime from QuestionDialog import ErrorDialog, WarningDialog from gen.display.name import displayer as _nd from DateHandler import displayer as _dd @@ -2574,7 +2574,7 @@ class MediaPage(BasePage): # get media type to be used primarily with "img" tags mime_type = media.get_mime_type() - mtype = Mime.get_description(mime_type) + mtype = gen.mime.get_description(mime_type) if mime_type: note_only = False