2007-08-05 00:39:28 +00:00

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)