mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-11-24 07:23:02 -05:00
162 lines
6.7 KiB
Python
162 lines
6.7 KiB
Python
## Copyright (C) 2006 Kovid Goyal kovid@kovidgoyal.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.,
|
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
"""
|
|
Define the minimum interface that a device backend must satisfy to be used in
|
|
the GUI. A device backend must subclass the L{Device} class. See prs500.py for
|
|
a backend that implement the Device interface for the SONY PRS500 Reader.
|
|
"""
|
|
|
|
|
|
class Device(object):
|
|
"""
|
|
Defines the interface that should be implemented by backends that
|
|
communicate with an ebook reader.
|
|
|
|
The C{end_session} variables are used for USB session management. Sometimes
|
|
the front-end needs to call several methods one after another, in which case
|
|
the USB session should not be closed after each method call.
|
|
"""
|
|
# Ordered list of supported formats
|
|
FORMATS = ["lrf", "rtf", "pdf", "txt"]
|
|
VENDOR_ID = 0x0000
|
|
PRODUCT_ID = 0x0000
|
|
THUMBNAIL_HEIGHT = 68 # Height for thumbnails on device
|
|
|
|
def __init__(self, key='-1', log_packets=False, report_progress=None) :
|
|
"""
|
|
@param key: The key to unlock the device
|
|
@param log_packets: If true the packet stream to/from the device is logged
|
|
@param report_progress: Function that is called with a % progress
|
|
(number between 0 and 100) for various tasks
|
|
If it is called with -1 that means that the
|
|
task does not have any progress information
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
@classmethod
|
|
def is_connected(cls):
|
|
'''Return True iff the device is physically connected to the computer'''
|
|
raise NotImplementedError()
|
|
|
|
def set_progress_reporter(self, report_progress):
|
|
'''
|
|
@param report_progress: Function that is called with a % progress
|
|
(number between 0 and 100) for various tasks
|
|
If it is called with -1 that means that the
|
|
task does not have any progress information
|
|
'''
|
|
raise NotImplementedError()
|
|
|
|
def get_device_information(self, end_session=True):
|
|
"""
|
|
Ask device for device information. See L{DeviceInfoQuery}.
|
|
@return: (device name, device version, software version on device, mime type)
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def card_prefix(self, end_session=True):
|
|
'''
|
|
Return prefix to paths on the card or None if no cards present.
|
|
'''
|
|
raise NotImplementedError()
|
|
|
|
def total_space(self, end_session=True):
|
|
"""
|
|
Get total space available on the mountpoints:
|
|
1. Main memory
|
|
2. Memory Stick
|
|
3. SD Card
|
|
|
|
@return: A 3 element list with total space in bytes of (1, 2, 3). If a
|
|
particular device doesn't have any of these locations it should return 0.
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def free_space(self, end_session=True):
|
|
"""
|
|
Get free space available on the mountpoints:
|
|
1. Main memory
|
|
2. Card A
|
|
3. Card B
|
|
|
|
@return: A 3 element list with free space in bytes of (1, 2, 3). If a
|
|
particular device doesn't have any of these locations it should return -1.
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def books(self, oncard=False, end_session=True):
|
|
"""
|
|
Return a list of ebooks on the device.
|
|
@param oncard: If True return a list of ebooks on the storage card,
|
|
otherwise return list of ebooks in main memory of device.
|
|
If True and no books on card return empty list.
|
|
@return: A list of Books. Each Book object must have the fields:
|
|
title, authors, size, datetime (a UTC time tuple), path, thumbnail (can be None).
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def upload_books(self, files, names, on_card=False, end_session=True):
|
|
'''
|
|
Upload a list of books to the device. If a file already
|
|
exists on the device, it should be replaced.
|
|
@param files: A list of paths and/or file-like objects.
|
|
@param names: A list of file names that the books should have
|
|
once uploaded to the device. len(names) == len(files)
|
|
@return: A list of 3-element tuples. The list is meant to be passed
|
|
to L{add_books_to_metadata}.
|
|
'''
|
|
raise NotImplementedError()
|
|
|
|
@classmethod
|
|
def add_books_to_metadata(cls, locations, metadata, booklists):
|
|
'''
|
|
Add locations to the booklists. This function must not communicate with
|
|
the device.
|
|
@param locations: Result of a call to L{upload_books}
|
|
@param metadata: List of dictionaries. Each dictionary must have the
|
|
keys C{title}, C{authors}, C{cover}. The value of the C{cover} element
|
|
can be None or a three element tuple (width, height, data)
|
|
where data is the image data in JPEG format as a string.
|
|
@param booklists: A tuple containing the result of calls to
|
|
(L{books}(oncard=False), L{books}(oncard=True)).
|
|
'''
|
|
raise NotImplementedError
|
|
|
|
def delete_books(self, paths, end_session=True):
|
|
'''
|
|
Delete books at paths on device.
|
|
'''
|
|
raise NotImplementedError()
|
|
|
|
@classmethod
|
|
def remove_books_from_metadata(cls, paths, booklists):
|
|
'''
|
|
Remove books from the metadata list. This function must not communicate
|
|
with the device.
|
|
@param paths: paths to books on the device.
|
|
@param booklists: A tuple containing the result of calls to
|
|
(L{books}(oncard=False), L{books}(oncard=True)).
|
|
'''
|
|
raise NotImplementedError()
|
|
|
|
def sync_booklists(self, booklists, end_session=True):
|
|
'''
|
|
Update metadata on device.
|
|
@param booklists: A tuple containing the result of calls to
|
|
(L{books}(oncard=False), L{books}(oncard=True)).
|
|
'''
|
|
raise NotImplementedError()
|
|
|