This commit is contained in:
Kovid Goyal 2023-04-22 11:01:56 +05:30
parent 679877607d
commit dba94e1b5b
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
6 changed files with 24 additions and 15 deletions

View File

@ -60,6 +60,7 @@ COVER_FILE_NAME = 'cover.jpg'
METADATA_FILE_NAME = 'metadata.opf' METADATA_FILE_NAME = 'metadata.opf'
DEFAULT_TRASH_EXPIRY_TIME_SECONDS = 14 * 86400 DEFAULT_TRASH_EXPIRY_TIME_SECONDS = 14 * 86400
TRASH_DIR_NAME = '.caltrash' TRASH_DIR_NAME = '.caltrash'
DATA_DIR_NAME = 'data'
BOOK_ID_PATH_TEMPLATE = ' ({})' BOOK_ID_PATH_TEMPLATE = ' ({})'
CUSTOM_DATA_TYPES = frozenset(('rating', 'text', 'comments', 'datetime', CUSTOM_DATA_TYPES = frozenset(('rating', 'text', 'comments', 'datetime',
'int', 'float', 'bool', 'series', 'composite', 'enumeration')) 'int', 'float', 'bool', 'series', 'composite', 'enumeration'))

View File

@ -5,18 +5,21 @@ __license__ = 'GPL v3'
__copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
import os import os
from functools import partial
from contextlib import suppress from contextlib import suppress
from functools import partial
from calibre import prepare_string_for_xml, force_unicode from calibre import force_unicode, prepare_string_for_xml
from calibre.ebooks.metadata import fmt_sidx, rating_to_stars
from calibre.ebooks.metadata.search_internet import name_for, url_for_author_search, url_for_book_search, qquote, DEFAULT_AUTHOR_SOURCE
from calibre.ebooks.metadata.sources.identify import urls_from_identifiers
from calibre.constants import filesystem_encoding from calibre.constants import filesystem_encoding
from calibre.db.backend import DATA_DIR_NAME
from calibre.ebooks.metadata import fmt_sidx, rating_to_stars
from calibre.ebooks.metadata.search_internet import (
DEFAULT_AUTHOR_SOURCE, name_for, qquote, url_for_author_search, url_for_book_search,
)
from calibre.ebooks.metadata.sources.identify import urls_from_identifiers
from calibre.library.comments import comments_to_html, markdown from calibre.library.comments import comments_to_html, markdown
from calibre.utils.icu import sort_key from calibre.utils.date import format_date, is_date_undefined
from calibre.utils.formatter import EvalFormatter from calibre.utils.formatter import EvalFormatter
from calibre.utils.date import is_date_undefined, format_date from calibre.utils.icu import sort_key
from calibre.utils.localization import calibre_langcode_to_name from calibre.utils.localization import calibre_langcode_to_name
from calibre.utils.serialize import json_dumps from calibre.utils.serialize import json_dumps
from polyglot.binary import as_hex_unicode from polyglot.binary import as_hex_unicode
@ -213,7 +216,7 @@ def mi_to_html(
link = '<a href="{}" title="{}">{}</a>{}'.format(action(scheme, book_id=book_id, loc=loc), link = '<a href="{}" title="{}">{}</a>{}'.format(action(scheme, book_id=book_id, loc=loc),
prepare_string_for_xml(path, True), _('Click to open'), extra) prepare_string_for_xml(path, True), _('Click to open'), extra)
if not isdevice: if not isdevice:
data_path = os.path.join(path, 'data') data_path = os.path.join(path, DATA_DIR_NAME)
with suppress(OSError): with suppress(OSError):
if os.listdir(data_path): if os.listdir(data_path):
link += ' \xa0 <a href="{}" title="{}">{}</a>'.format( link += ' \xa0 <a href="{}" title="{}">{}</a>'.format(

View File

@ -9,12 +9,13 @@ import json
import os import os
import time import time
from functools import partial from functools import partial
from qt.core import QAction, QIcon, pyqtSignal, QDialog from qt.core import QAction, QDialog, QIcon, pyqtSignal
from calibre.constants import ismacos, iswindows from calibre.constants import ismacos, iswindows
from calibre.db.backend import DATA_DIR_NAME
from calibre.gui2 import ( from calibre.gui2 import (
Dispatcher, config, elided_text, error_dialog, info_dialog, open_local_file, Dispatcher, config, elided_text, error_dialog, info_dialog, open_local_file,
question_dialog question_dialog,
) )
from calibre.gui2.actions import InterfaceAction from calibre.gui2.actions import InterfaceAction
from calibre.gui2.dialogs.choose_format import ChooseFormatDialog from calibre.gui2.dialogs.choose_format import ChooseFormatDialog
@ -283,7 +284,7 @@ class ViewAction(InterfaceAction):
def view_data_folder_for_id(self, id_): def view_data_folder_for_id(self, id_):
path = self.gui.library_view.model().db.abspath(id_, index_is_id=True) path = self.gui.library_view.model().db.abspath(id_, index_is_id=True)
open_local_file(os.path.join(path, 'data')) open_local_file(os.path.join(path, DATA_DIR_NAME))
def view_book(self, triggered): def view_book(self, triggered):
rows = self.gui.current_view().selectionModel().selectedRows() rows = self.gui.current_view().selectionModel().selectedRows()

View File

@ -15,6 +15,7 @@ from qt.core import (
from calibre import fit_image, sanitize_file_name from calibre import fit_image, sanitize_file_name
from calibre.constants import config_dir, iswindows from calibre.constants import config_dir, iswindows
from calibre.db.backend import DATA_DIR_NAME
from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks import BOOK_EXTENSIONS
from calibre.ebooks.metadata.book.base import Metadata, field_metadata from calibre.ebooks.metadata.book.base import Metadata, field_metadata
from calibre.ebooks.metadata.book.render import mi_to_html from calibre.ebooks.metadata.book.render import mi_to_html
@ -476,7 +477,7 @@ def create_copy_links(menu, data=None):
link(_('Link to show book in calibre'), f'calibre://show-book/{library_id}/{book_id}') link(_('Link to show book in calibre'), f'calibre://show-book/{library_id}/{book_id}')
link(_('Link to show book details in a popup window'), f'calibre://book-details/{library_id}/{book_id}') link(_('Link to show book details in a popup window'), f'calibre://book-details/{library_id}/{book_id}')
mi = db.new_api.get_proxy_metadata(book_id) mi = db.new_api.get_proxy_metadata(book_id)
data_path = os.path.join(db.backend.library_path, mi.path, 'data') data_path = os.path.join(db.backend.library_path, mi.path, DATA_DIR_NAME)
with suppress(OSError): with suppress(OSError):
if os.listdir(data_path): if os.listdir(data_path):
if iswindows: if iswindows:

View File

@ -19,6 +19,7 @@ from qt.core import (
) )
from calibre import xml_replace_entities from calibre import xml_replace_entities
from calibre.db.backend import DATA_DIR_NAME
from calibre.ebooks.chardet import xml_to_unicode from calibre.ebooks.chardet import xml_to_unicode
from calibre.gui2 import ( from calibre.gui2 import (
NO_URL_FORMATTING, choose_dir, choose_files, error_dialog, gprefs, is_dark_theme, NO_URL_FORMATTING, choose_dir, choose_files, error_dialog, gprefs, is_dark_theme,
@ -707,7 +708,7 @@ class EditorWidget(QTextEdit, LineEditECM): # {{{
d.bb = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok|QDialogButtonBox.StandardButton.Cancel) d.bb = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok|QDialogButtonBox.StandardButton.Cancel)
d.br = b = QPushButton(_('&File')) d.br = b = QPushButton(_('&File'))
base = os.path.dirname(self.base_url.toLocalFile()) if self.base_url else os.getcwd() base = os.path.dirname(self.base_url.toLocalFile()) if self.base_url else os.getcwd()
data_path = os.path.join(base, 'data') data_path = os.path.join(base, DATA_DIR_NAME)
if self.base_url: if self.base_url:
os.makedirs(data_path, exist_ok=True) os.makedirs(data_path, exist_ok=True)

View File

@ -12,13 +12,15 @@ import traceback
from calibre import isbytestring from calibre import isbytestring
from calibre.constants import filesystem_encoding from calibre.constants import filesystem_encoding
from calibre.db.backend import COVER_FILE_NAME, METADATA_FILE_NAME, TRASH_DIR_NAME from calibre.db.backend import (
COVER_FILE_NAME, DATA_DIR_NAME, METADATA_FILE_NAME, TRASH_DIR_NAME,
)
from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks import BOOK_EXTENSIONS
from calibre.utils.localization import _ from calibre.utils.localization import _
from polyglot.builtins import iteritems from polyglot.builtins import iteritems
EBOOK_EXTENSIONS = frozenset(BOOK_EXTENSIONS) EBOOK_EXTENSIONS = frozenset(BOOK_EXTENSIONS)
NORMALS = frozenset({METADATA_FILE_NAME, COVER_FILE_NAME, 'data'}) NORMALS = frozenset({METADATA_FILE_NAME, COVER_FILE_NAME, DATA_DIR_NAME})
IGNORE_AT_TOP_LEVEL = frozenset({'metadata.db', 'metadata_db_prefs_backup.json', 'metadata_pre_restore.db', 'full-text-search.db', TRASH_DIR_NAME}) IGNORE_AT_TOP_LEVEL = frozenset({'metadata.db', 'metadata_db_prefs_backup.json', 'metadata_pre_restore.db', 'full-text-search.db', TRASH_DIR_NAME})
''' '''