Removed broken Export to CD on Gnome. This was never working on KDE or Windows. And no developer seems to be able to get it to run on their gnome system. It is very easy now to burn a backup of gramps to a cd using e.g., K3b or Brasero.

svn: r12923
This commit is contained in:
Raphael Ackermann 2009-08-08 16:35:36 +00:00
parent b7827030f5
commit e4495716a9
3 changed files with 0 additions and 331 deletions

View File

@ -398,7 +398,6 @@ src/plugins/drawreport/StatisticsChart.py
src/plugins/drawreport/TimeLine.py
# plugins/export directory
src/plugins/export/ExportCd.py
src/plugins/export/ExportCsv.py
src/plugins/export/ExportFtree.py
src/plugins/export/ExportGedcom.py

View File

@ -1,329 +0,0 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2008 Donald N. Allingham
# Copyright (C) 2008 Brian G. Matherly
# Contributions 2009 by Brad Crittenden <brad [AT] bradcrittenden.net>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
# $Id$
#
"Export to CD (nautilus)."
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
import os
import sys
from gettext import gettext as _
#------------------------------------------------------------------------
#
# Set up logging
#
#------------------------------------------------------------------------
import logging
log = logging.getLogger(".WriteCD")
#-------------------------------------------------------------------------
#
# GNOME/GTK modules
#
#-------------------------------------------------------------------------
import gtk
import Errors
#This is a GNOME only plugin
_gnome_session = os.getenv('GNOME_DESKTOP_SESSION_ID')
if not _gnome_session:
raise Errors.UnavailableError(
_("WriteCD is a GNOME plugin and you are not running GNOME"))
try:
import gnome
except ImportError:
raise Errors.UnavailableError(
_("Cannot be loaded because python bindings "
"for GNOME are not installed"))
try:
from gnomevfs import (URI, create, OPEN_WRITE, make_directory,
FileExistsError)
except:
from gnome.vfs import (URI, create, OPEN_WRITE, make_directory,
FileExistsError)
#This plugin only works if the 'burn://' scheme is supported.
try:
uri = URI('burn:///test.txt')
except TypeError:
raise Errors.UnavailableError(
_("Cannot be loaded because the 'burn://' scheme "
"is not supported."))
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from ExportXml import XmlWriter
from Utils import media_path_full
from QuestionDialog import ErrorDialog, MissingMediaDialog
from gen.plug import PluginManager, ExportPlugin
_title_string = _("Export to CD")
#-------------------------------------------------------------------------
#
# writeData
#
#-------------------------------------------------------------------------
def writeData(database, filename, option_box=None, callback=None):
writer = PackageWriter(database, filename, callback)
return writer.export()
#-------------------------------------------------------------------------
#
# PackageWriter
#
#-------------------------------------------------------------------------
class PackageWriter(object):
def __init__(self, database, filename="", cl=0, callback=None):
self.db = database
self.cl = cl
self.filename = filename
self.callback = callback
def export(self):
if self.cl:
return self.cl_run()
else:
return self.gui_run()
def cl_run(self):
base = os.path.basename(self.filename)
try:
uri = URI('burn:///%s' % base)
make_directory(uri, OPEN_WRITE)
except FileExistsError, msg:
ErrorDialog(_("CD export preparation failed"),
"1 %s " % str(msg))
return False
except:
uri_name = "burn:///" + base
ErrorDialog("CD export preparation failed",
'Could not create %s' % uri_name)
return False
for obj_id in self.db.get_media_object_handles():
obj = self.db.get_object_from_handle(obj_id)
oldfile = media_path_full(self.db, obj.get_path())
root = os.path.basename(oldfile)
if os.path.isfile(oldfile):
self.copy_file(oldfile, 'burn:///%s/%s' % (base, root))
else:
print "Warning: media file %s was not found, " % root, \
"so it was ignored."
# Write XML now
g = create('burn:///%s/data.gramps' % base, OPEN_WRITE )
gfile = XmlWriter(self.db, None, 2)
gfile.write_handle(g)
g.close()
return True
def gui_run(self):
missmedia_action = 0
base = os.path.basename(self.filename)
try:
uri = URI('burn:///%s' % base)
make_directory(uri, OPEN_WRITE)
except FileExistsError:
ErrorDialog(_("CD export preparation failed"),
"File already exists")
return False
except:
uri_name = "burn:///" + base
ErrorDialog(_("CD export preparation failed"),
_('Could not create %s') % uri_name)
return False
try:
uri = URI('burn:///%s/.thumb' % base)
make_directory(uri, OPEN_WRITE)
except FileExistsError, msg:
ErrorDialog("CD export preparation failed",
"4 %s " % str(msg))
return False
except:
uri_name = "burn:///" + base + "/.thumb"
ErrorDialog(_("CD export preparation failed"),
_('Could not create %s') % uri_name)
return False
#--------------------------------------------------------
def remove_clicked():
# File is lost => remove all references and the object itself
for p_id in self.db.iter_family_handles():
p = self.db.get_family_from_handle(p_id)
nl = p.get_media_list()
for o in nl:
if o.get_reference_handle() == self.object_handle:
nl.remove(o)
p.set_media_list(nl)
self.db.commit_family(p, None)
for key in self.db.iter_person_handles():
p = self.db.get_person_from_handle(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference_handle() == self.object_handle:
nl.remove(o)
p.set_media_list(nl)
self.db.commit_person(p, None)
for key in self.db.get_source_handles():
p = self.db.get_source_from_handle(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference_handle() == self.object_handle:
nl.remove(o)
p.set_media_list(nl)
self.db.commit_source(p, None)
for key in self.db.get_place_handles():
p = self.db.get_place_from_handle(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference_handle() == self.object_handle:
nl.remove(o)
p.set_media_list(nl)
self.db.commit_place(p, None)
for key in self.db.get_event_handles():
p = self.db.get_event_from_handle(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference_handle() == self.object_handle:
nl.remove(o)
p.set_media_list(nl)
self.db.commit_event(p, None)
self.db.remove_object(self.object_handle, None)
def leave_clicked():
# File is lost => do nothing, leave as is
pass
def select_clicked():
# File is lost => select a file to replace the lost one
def fs_close_window(obj):
pass
def fs_ok_clicked(obj):
newfile = unicode(fs_top.get_filename(),
sys.getfilesystemencoding())
if os.path.isfile(newfile):
self.copy_file(newfile, 'burn:///%s/%s' % (base, obase))
fs_top = gtk.FileChooserDialog("%s - GRAMPS" % _("Select file"),
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OK, gtk.RESPONSE_OK)
)
response = fs_top.run()
if response == gtk.RESPONSE_OK:
fs_ok_clicked(fs_top)
elif response == gtk.RESPONSE_CANCEL:
fs_close_window(fs_top)
fs_top.destroy()
#----------------------------------------------------------
# Write media files first, since the database may be modified
# during the process (i.e. when removing object)
for obj_id in self.db.get_media_object_handles():
obj = self.db.get_object_from_handle(obj_id)
oldfile = media_path_full(self.db, obj.get_path())
root = os.path.basename(oldfile)
if os.path.isfile(oldfile):
self.copy_file(oldfile, 'burn:///%s/%s' % (base, root))
else:
# File is lost => ask what to do
self.object_handle = obj.get_handle()
if missmedia_action == 0:
mmd = MissingMediaDialog(_("Media object could not be found"),
_("%(file_name)s is referenced in the database, but no longer exists. "
"The file may have been deleted or moved to a different location. "
"You may choose to either remove the reference from the database, "
"keep the reference to the missing file, or select a new file."
) % { 'file_name' : oldfile },
remove_clicked, leave_clicked, select_clicked)
missmedia_action = mmd.default_action
elif missmedia_action == 1:
remove_clicked()
elif missmedia_action == 2:
leave_clicked()
elif missmedia_action == 3:
select_clicked()
# Write XML now
uri = 'burn:///%s/data.gramps' % base
uri = uri.encode('utf8')
g = create(uri, OPEN_WRITE)
gfile = XmlWriter(self.db, self.callback, 2)
gfile.write_handle(g)
g.close()
os.system("nautilus --no-desktop burn:///")
return True
def copy_file(self, src, dest):
original = open(src, "r")
destobj = URI(dest)
target = create(destobj, OPEN_WRITE)
done = 0
while 1:
buf = original.read(2048)
if buf == '':
break
else:
target.write(buf)
target.close()
original.close()
#-------------------------------------------------------------------------
#
# Register the plugin
#
#-------------------------------------------------------------------------
_description = _('Exporting to CD copies all your data and media object files '
'to the CD Creator. You may later burn the CD with this data, '
'and that copy will be completely portable across different '
'machines and binary architectures.')
pmgr = PluginManager.get_instance()
plugin = ExportPlugin(name = _('_Export to CD (portable XML)'),
description = _description,
export_function = writeData,
extension = "burn",
config = None )
pmgr.register_plugin(plugin)

View File

@ -6,7 +6,6 @@
pkgdatadir = $(datadir)/@PACKAGE@/plugins/export
pkgdata_PYTHON = \
ExportCd.py \
ExportCsv.py \
ExportFtree.py \
ExportGedcom.py \