mirror of
https://github.com/kovidgoyal/calibre.git
synced 2026-01-11 06:30:32 -05:00
106 lines
4.4 KiB
Python
106 lines
4.4 KiB
Python
## Copyright (C) 2007 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.Warning
|
|
from PyQt4.QtCore import QThread, SIGNAL, QObject
|
|
|
|
from libprs500.devices.prs500.driver import PRS500
|
|
|
|
class DeviceDetector(QThread):
|
|
'''
|
|
Worker thread that polls the USB ports for devices. Emits the
|
|
signal connected(PyQt_PyObject, PyQt_PyObject) on connection and
|
|
disconnection events.
|
|
'''
|
|
def __init__(self, sleep_time=2000):
|
|
'''
|
|
@param sleep_time: Time to sleep between device probes in millisecs
|
|
@type sleep_time: integer
|
|
'''
|
|
self.devices = ([PRS500, False],)
|
|
self.sleep_time = sleep_time
|
|
QThread.__init__(self)
|
|
|
|
def run(self):
|
|
while True:
|
|
for device in self.devices:
|
|
connected = device[0].is_connected()
|
|
if connected and not device[1]:
|
|
self.emit(SIGNAL('connected(PyQt_PyObject, PyQt_PyObject)'), device[0], True)
|
|
device[1] ^= True
|
|
elif not connected and device[1]:
|
|
self.emit(SIGNAL('connected(PyQt_PyObject, PyQt_PyObject)'), device[0], False)
|
|
device[1] ^= True
|
|
self.msleep(self.sleep_time)
|
|
|
|
|
|
|
|
class DeviceManager(QObject):
|
|
def __init__(self, device_class):
|
|
QObject.__init__(self)
|
|
self.device_class = device_class
|
|
self.device = device_class()
|
|
|
|
def device_removed(self):
|
|
self.device = None
|
|
|
|
def info_func(self):
|
|
''' Return callable that returns device information and free space on device'''
|
|
def get_device_information(updater):
|
|
'''Get device information'''
|
|
self.device.set_progress_reporter(updater)
|
|
info = self.device.get_device_information(end_session=False)
|
|
info = [i.replace('\x00', '').replace('\x01', '') for i in info]
|
|
cp = self.device.card_prefix(end_session=False)
|
|
fs = self.device.free_space()
|
|
return info, cp, fs
|
|
return get_device_information
|
|
|
|
def books_func(self):
|
|
'''Return callable that returns the list of books on device as two booklists'''
|
|
def books(updater):
|
|
'''Get metadata from device'''
|
|
self.device.set_progress_reporter(updater)
|
|
mainlist = self.device.books(oncard=False, end_session=False)
|
|
cardlist = self.device.books(oncard=True)
|
|
return (mainlist, cardlist)
|
|
return books
|
|
|
|
def sync_booklists_func(self):
|
|
'''Upload booklists to device'''
|
|
def sync_booklists(updater, booklists):
|
|
'''Sync metadata to device'''
|
|
self.device.set_progress_reporter(updater)
|
|
self.device.sync_booklists(booklists, end_session=False)
|
|
return self.device.card_prefix(end_session=False), self.device.free_space()
|
|
return sync_booklists
|
|
|
|
def upload_books_func(self):
|
|
'''Upload books to device'''
|
|
def upload_books(updater, files, names, on_card=False):
|
|
'''Upload books to device: '''
|
|
return self.device.upload_books(files, names, on_card, end_session=False)
|
|
return upload_books
|
|
|
|
def add_books_to_metadata(self, locations, metadata, booklists):
|
|
self.device_class.add_books_to_metadata(locations, metadata, booklists)
|
|
|
|
def delete_books_func(self):
|
|
'''Remove books from device'''
|
|
def delete_books(updater, paths):
|
|
'''Delete books from device'''
|
|
self.device.delete_books(paths, end_session=True)
|
|
return delete_books
|
|
|
|
def remove_books_from_metadata(self, paths, booklists):
|
|
self.device_class.remove_books_from_metadata(paths, booklists) |