Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/GetIABooksActivity.py
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@sugarlabs.org>2011-04-01 18:24:29 (GMT)
committer Gonzalo Odiard <godiard@sugarlabs.org>2011-04-01 18:24:29 (GMT)
commit5a165ea0af52edaa58cc6d0cc6c80e3f949b36e8 (patch)
tree740128d998ae8bff912cc0472ad2148f47b67ea8 /GetIABooksActivity.py
parent7e3ae304d7a0a391e9a1db9721fccc15b432196d (diff)
Implement REST client for Internet Archive server.
The OPDS server implementation in Internet Archive is not working very well
Diffstat (limited to 'GetIABooksActivity.py')
-rwxr-xr-xGetIABooksActivity.py65
1 files changed, 28 insertions, 37 deletions
diff --git a/GetIABooksActivity.py b/GetIABooksActivity.py
index d3d02db..fa3edab 100755
--- a/GetIABooksActivity.py
+++ b/GetIABooksActivity.py
@@ -38,7 +38,6 @@ from sugar.graphics.xocolor import XoColor
from sugar import profile
from sugar.activity import activity
from sugar.bundle.activitybundle import ActivityBundle
-from sugar import network
from sugar.datastore import datastore
from sugar.graphics.alert import NotifyAlert
from sugar.graphics.alert import Alert
@@ -53,31 +52,13 @@ import opds
import languagenames
import devicemanager
-_MIMETYPES = {'PDF': u'application/pdf', 'EPUB': u'application/epub+zip'}
+_MIMETYPES = {'PDF': u'application/pdf', 'PDF BW': u'application/pdf-bw',
+ 'EPUB': u'application/epub+zip', 'DJVU': u'image/x.djvu'}
_SOURCES = {}
_SOURCES_CONFIG = {}
_logger = logging.getLogger('get-ia-books-activity')
-
-class ReadURLDownloader(network.GlibURLDownloader):
- """URLDownloader that provides content-length and content-type."""
-
- def get_content_length(self):
- """Return the content-length of the download."""
- if self._info is not None:
- length = self._info.headers.get('Content-Length')
- if length is not None:
- return int(length)
- else:
- return 0
-
- def get_content_type(self):
- """Return the content-type of the download."""
- if self._info is not None:
- return self._info.headers.get('Content-type')
- return None
-
READ_STREAM_SERVICE = 'read-activity-http'
@@ -321,14 +302,10 @@ class GetIABooksActivity(activity.Activity):
self.show_book_data()
def __language_changed_cb(self, combo):
- search_terms = self.get_search_terms()
- if search_terms == '':
- self.find_books(None)
- else:
- self.find_books(search_terms)
+ self.find_books(self.get_search_terms())
def __search_entry_activate_cb(self, entry):
- self.find_books(entry.props.text)
+ self.find_books(self.get_search_terms())
def __get_book_cb(self, button):
self.get_book()
@@ -469,15 +446,21 @@ class GetIABooksActivity(activity.Activity):
book_data += _('Publisher:\t') + self.selected_publisher + '\n\n'
self.selected_language_code = self.selected_book.get_language()
if self.selected_language_code != '':
- self.selected_language = \
- self._lang_code_handler.get_full_language_name(
- self.selected_book.get_language())
+ try:
+ self.selected_language = \
+ self._lang_code_handler.get_full_language_name(
+ self.selected_book.get_language())
+ except:
+ self.selected_language = self.selected_book.get_language()
book_data += _('Language:\t') + self.selected_language + '\n\n'
if self.source != 'local_books':
- self.download_url = self.selected_book.get_download_links()[\
- self.format_combo.props.value]
- if len(self.download_url) > 0:
- book_data += _('Link:\t\t') + self.download_url
+ try:
+ self.download_url = self.selected_book.get_download_links()[\
+ self.format_combo.props.value]
+ if len(self.download_url) > 0:
+ book_data += _('Link:\t\t') + self.download_url
+ except:
+ pass
textbuffer = self.textview.get_buffer()
textbuffer.set_text('\n' + book_data)
self.enable_button(True)
@@ -521,7 +504,7 @@ class GetIABooksActivity(activity.Activity):
def download_image(self, url):
path = os.path.join(self.get_activity_root(), 'instance',
'tmp%i' % time.time())
- self._getter = ReadURLDownloader(url)
+ self._getter = opds.ReadURLDownloader(url)
self._getter.connect("finished", self._get_image_result_cb)
self._getter.connect("progress", self._get_image_progress_cb)
self._getter.connect("error", self._get_image_error_cb)
@@ -618,7 +601,11 @@ class GetIABooksActivity(activity.Activity):
self._books_toolbar.search_entry.grab_focus()
return
- if self.source in _SOURCES_CONFIG:
+ if self.source == 'Internet Archive':
+ self.queryresults = \
+ opds.InternetArchiveQueryResult(search_text,
+ query_language, self)
+ elif self.source in _SOURCES_CONFIG:
repo_configuration = _SOURCES_CONFIG[self.source]
self.queryresults = opds.RemoteQueryResult(repo_configuration,
search_text, query_language, self.window)
@@ -696,7 +683,7 @@ class GetIABooksActivity(activity.Activity):
self._books_toolbar.search_entry.set_sensitive(False)
path = os.path.join(self.get_activity_root(), 'instance',
'tmp%i' % time.time())
- self._getter = ReadURLDownloader(url)
+ self._getter = opds.ReadURLDownloader(url)
self._getter.connect("finished", self._get_book_result_cb)
self._getter.connect("progress", self._get_book_progress_cb)
self._getter.connect("error", self._get_book_error_cb)
@@ -765,6 +752,10 @@ class GetIABooksActivity(activity.Activity):
journal_entry.metadata['keep'] = '0'
journal_entry.metadata['mime_type'] = \
self.format_combo.props.value
+ # Fix fake mime type for black&white pdfs
+ if journal_entry.metadata['mime_type'] == _MIMETYPES['PDF BW']:
+ journal_entry.metadata['mime_type'] = _MIMETYPES['PDF']
+
journal_entry.metadata['buddies'] = ''
journal_entry.metadata['icon-color'] = profile.get_color().to_string()
textbuffer = self.textview.get_buffer()