From fe4e0aa6b79b6a77d66490d754f8ed1cce5176e3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 21 Jan 2025 07:51:06 +0530 Subject: [PATCH] Add mtime to ListEntry --- src/calibre/devices/mtp/driver.py | 6 ++++-- src/calibre/devices/mtp/filesystem_cache.py | 17 ++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/calibre/devices/mtp/driver.py b/src/calibre/devices/mtp/driver.py index 150149463e..78fdb82af4 100644 --- a/src/calibre/devices/mtp/driver.py +++ b/src/calibre/devices/mtp/driver.py @@ -5,6 +5,7 @@ __license__ = 'GPL v3' __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' +import datetime import importlib import json import os @@ -19,7 +20,7 @@ from calibre.constants import iswindows, numeric_version from calibre.devices.errors import PathError from calibre.devices.mtp.base import debug from calibre.devices.mtp.defaults import DeviceDefaults -from calibre.devices.mtp.filesystem_cache import FileOrFolder +from calibre.devices.mtp.filesystem_cache import FileOrFolder, convert_timestamp from calibre.ptempfile import PersistentTemporaryDirectory, SpooledTemporaryFile from calibre.utils.filenames import shorten_components_to from calibre.utils.icu import lower as icu_lower @@ -41,6 +42,7 @@ class ListEntry(NamedTuple): name: str is_folder: bool size: int + mtime: datetime.datetime class MTP_DEVICE(BASE): @@ -389,7 +391,7 @@ class MTP_DEVICE(BASE): def list_folder_by_name(self, parent, *names): ' List the contents of the folder parent/ + "/".join(names). Works with folders not cached in FilesystemCache. ' - return tuple(ListEntry(x['name'], x['is_folder'], x['size']) for x in self.list_mtp_folder_by_name(parent, *names)) + return tuple(ListEntry(x['name'], x['is_folder'], x['size'], convert_timestamp(x['modified'])) for x in self.list_mtp_folder_by_name(parent, *names)) def prepare_addable_books(self, paths): tdir = PersistentTemporaryDirectory('_prepare_mtp') diff --git a/src/calibre/devices/mtp/filesystem_cache.py b/src/calibre/devices/mtp/filesystem_cache.py index c5f6c8a921..b9a48579cc 100644 --- a/src/calibre/devices/mtp/filesystem_cache.py +++ b/src/calibre/devices/mtp/filesystem_cache.py @@ -23,6 +23,15 @@ from calibre.utils.icu import lower, sort_key bexts = frozenset(BOOK_EXTENSIONS) - {'mbp', 'tan', 'rar', 'zip', 'xml'} +def convert_timestamp(md): + try: + if isinstance(md, tuple): + return datetime(*(list(md)+[local_tz])) + else: + return datetime.fromtimestamp(md, local_tz) + except Exception: + return datetime.fromtimestamp(0, local_tz) + class ListEntry: @@ -55,13 +64,7 @@ class FileOrFolder: self.name = force_unicode(n, 'utf-8') self.size = entry.get('size', 0) md = entry.get('modified', 0) - try: - if isinstance(md, tuple): - self.last_modified = datetime(*(list(md)+[local_tz])) - else: - self.last_modified = datetime.fromtimestamp(md, local_tz) - except Exception: - self.last_modified = datetime.fromtimestamp(0, local_tz) + self.last_modified = convert_timestamp(md) self.last_mod_string = self.last_modified.strftime('%Y/%m/%d %H:%M') self.last_modified = as_utc(self.last_modified)