Register Guidelines E-Books Search Today's Posts Mark Forums Read

Go Back   MobileRead Forums > E-Book Software > Calibre

Notices

Reply
 
Thread Tools Search this Thread
Old 07-17-2011, 04:40 PM   #1
siebert
Developer
siebert has a complete set of Star Wars action figures.siebert has a complete set of Star Wars action figures.siebert has a complete set of Star Wars action figures.
 
Posts: 155
Karma: 280
Join Date: Nov 2010
Device: Kindle 3 (Keyboard) 3G / iPad 9 WiFi / Google Pixel 6a (Android)
Patch: Calibre adds tags to identify ebook formats created by calibre.

Hi,

for ebooks with several formats (in my case mostly epub and mobi) I'd like to know which format contains the original file and which one was created by calibre (normally by converting from the other format).

With the patch below (against 0.8.8) calibre automatically applies a tag named 'Converted <format>' where <format> is replaced by the name of the format (for example 'Converted EPUB'), when a conversion is performed.

If a format is deleted, the corresponding tag will also be removed by calibre.

If a mobi or epub file is added to calibre, the producer metadata field is searched for the string 'calibre'. If the field contains it, the file was created by calibre and the tag is set, too.

Ciao,
Steffen

Code:
diff --git a/src/calibre/ebooks/metadata/epub.py b/src/calibre/ebooks/metadata/epub.py
index d46c160..7165783 100644
--- a/src/calibre/ebooks/metadata/epub.py
+++ b/src/calibre/ebooks/metadata/epub.py
@@ -189,6 +189,13 @@ def get_metadata(stream, extract_cover=True):
     if mi.language is not None and not mi.has_identifier('language'):
         mi.set_identifier('language', mi.language)
     mi.timestamp = None
+    if mi.book_producer and mi.book_producer.find('calibre') != -1:
+        print "mi.book_producer = %s" % mi.book_producer
+        if not mi.tags:
+            mi.tags = ['Converted EPUB']
+        else:
+            if 'Converted EPUB' not in mi.tags:
+                mi.tags.append('Converted EPUB')
     return mi
 
 def get_quick_metadata(stream):
diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py
index 9c04009..4e2f998 100644
--- a/src/calibre/ebooks/mobi/reader.py
+++ b/src/calibre/ebooks/mobi/reader.py
@@ -103,6 +103,13 @@ class EXTHHeader(object):
             except:
                 pass
         elif id == 108:
+            producer = content.decode(codec, 'ignore')
+            if producer.find("calibre") != -1:
+                if not self.mi.tags:
+                    self.mi.tags = ['Converted MOBI']
+                else:
+                    if 'Converted MOBI' not in self.mi.tags:
+                        self.mi.tags.append('Converted MOBI')
             pass # Producer
         elif id == 113:
             pass # ASIN or UUID
diff --git a/src/calibre/gui2/actions/convert.py b/src/calibre/gui2/actions/convert.py
index 17fa0ad..660c8ff 100644
--- a/src/calibre/gui2/actions/convert.py
+++ b/src/calibre/gui2/actions/convert.py
@@ -174,6 +174,7 @@ class ConvertAction(InterfaceAction):
             with open(temp_files[-1].name, 'rb') as data:
                 self.gui.library_view.model().db.add_format(book_id, \
                     fmt, data, index_is_id=True)
+                self.gui.library_view.model().db.set_tags(book_id, ['Converted %s' % fmt], append=True)
             self.gui.status_bar.show_message(job.description + \
                     (' completed'), 2000)
         finally:
diff --git a/src/calibre/gui2/metadata/basic_widgets.py b/src/calibre/gui2/metadata/basic_widgets.py
index 227a225..c571f8b 100644
--- a/src/calibre/gui2/metadata/basic_widgets.py
+++ b/src/calibre/gui2/metadata/basic_widgets.py
@@ -1065,9 +1065,10 @@ class TagsEdit(MultiCompleteLineEdit): # {{{
 
 
     def commit(self, db, id_):
-        self.books_to_refresh |= db.set_tags(
-                id_, self.current_val, notify=False, commit=False,
-                allow_case_change=True)
+        if self.changed:
+            self.books_to_refresh |= db.set_tags(
+                    id_, self.current_val, notify=False, commit=False,
+                    allow_case_change=True)
         return True
 
 # }}}
diff --git a/src/calibre/library/database.py b/src/calibre/library/database.py
index 2138b2f..a9e8a74 100644
--- a/src/calibre/library/database.py
+++ b/src/calibre/library/database.py
@@ -1121,6 +1121,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
         id = index if index_is_id else self.id(index)
         self.conn.execute('DELETE FROM data WHERE book=? AND format=?', (id, ext.lower()))
         self.conn.commit()
+        self.unapply_tags(index, ['Converted %s' % ext])
 
     def set(self, row, column, val):
         '''
diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py
index 9d8a27d..cd19ef9 100644
--- a/src/calibre/library/database2.py
+++ b/src/calibre/library/database2.py
@@ -1353,6 +1353,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
             self.refresh_ids([id])
             if notify:
                 self.notify('metadata', [id])
+            self.unapply_tags(index, ['Converted %s' % format])
 
     def clean(self):
         '''

Last edited by siebert; 07-17-2011 at 04:44 PM.
siebert is offline   Reply With Quote
Old 07-18-2011, 02:07 PM   #2
Starson17
Wizard
Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.Starson17 can program the VCR without an owner's manual.
 
Posts: 4,004
Karma: 177841
Join Date: Dec 2009
Device: WinMo: IPAQ; Android: HTC HD2, Archos 7o; Java:Gravity T
Best place for proposed patches:
https://bugs.launchpad.net/calibre
Starson17 is offline   Reply With Quote
Advert
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Calibre library created in Windows.... phenomshel Library Management 12 07-22-2011 12:45 AM
TOC not showing in news created by calibre PoP Sony Reader 2 06-07-2011 07:06 PM
Is is possible to download to a K3 a calibre library created for a DX? ccarree Calibre 10 10-19-2010 07:39 AM
Wish to edit ebook created by Calibre in Dreamweaver CS5 purcelljf Calibre 1 08-08-2010 11:18 PM
Delete collections created with calibre VICTORSJG Calibre 7 03-18-2010 07:22 AM


All times are GMT -4. The time now is 12:16 PM.


MobileRead.com is a privately owned, operated and funded community.