Add mtime to ListEntry

This commit is contained in:
Kovid Goyal 2025-01-21 07:51:06 +05:30
parent 9ab99b34c2
commit fe4e0aa6b7
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 14 additions and 9 deletions

View File

@ -5,6 +5,7 @@ __license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2012, Kovid Goyal <kovid at kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import datetime
import importlib import importlib
import json import json
import os import os
@ -19,7 +20,7 @@ from calibre.constants import iswindows, numeric_version
from calibre.devices.errors import PathError from calibre.devices.errors import PathError
from calibre.devices.mtp.base import debug from calibre.devices.mtp.base import debug
from calibre.devices.mtp.defaults import DeviceDefaults 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.ptempfile import PersistentTemporaryDirectory, SpooledTemporaryFile
from calibre.utils.filenames import shorten_components_to from calibre.utils.filenames import shorten_components_to
from calibre.utils.icu import lower as icu_lower from calibre.utils.icu import lower as icu_lower
@ -41,6 +42,7 @@ class ListEntry(NamedTuple):
name: str name: str
is_folder: bool is_folder: bool
size: int size: int
mtime: datetime.datetime
class MTP_DEVICE(BASE): class MTP_DEVICE(BASE):
@ -389,7 +391,7 @@ class MTP_DEVICE(BASE):
def list_folder_by_name(self, parent, *names): def list_folder_by_name(self, parent, *names):
' List the contents of the folder parent/ + "/".join(names). Works with folders not cached in FilesystemCache. ' ' 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): def prepare_addable_books(self, paths):
tdir = PersistentTemporaryDirectory('_prepare_mtp') tdir = PersistentTemporaryDirectory('_prepare_mtp')

View File

@ -23,6 +23,15 @@ from calibre.utils.icu import lower, sort_key
bexts = frozenset(BOOK_EXTENSIONS) - {'mbp', 'tan', 'rar', 'zip', 'xml'} 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: class ListEntry:
@ -55,13 +64,7 @@ class FileOrFolder:
self.name = force_unicode(n, 'utf-8') self.name = force_unicode(n, 'utf-8')
self.size = entry.get('size', 0) self.size = entry.get('size', 0)
md = entry.get('modified', 0) md = entry.get('modified', 0)
try: self.last_modified = convert_timestamp(md)
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_mod_string = self.last_modified.strftime('%Y/%m/%d %H:%M') self.last_mod_string = self.last_modified.strftime('%Y/%m/%d %H:%M')
self.last_modified = as_utc(self.last_modified) self.last_modified = as_utc(self.last_modified)