mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix news not uploading to device automatically
This commit is contained in:
parent
b51e6b73a7
commit
16ab9fbf02
@ -65,6 +65,11 @@ class HTMLProcessor(Processor):
|
|||||||
self.extract_css()
|
self.extract_css()
|
||||||
if opts.verbose > 2:
|
if opts.verbose > 2:
|
||||||
self.debug_tree('nocss')
|
self.debug_tree('nocss')
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
for meta in list(self.root.xpath('//meta')):
|
||||||
|
meta.getparent().remove(meta)
|
||||||
|
Processor.save(self)
|
||||||
|
|
||||||
#self.collect_font_statistics()
|
#self.collect_font_statistics()
|
||||||
|
|
||||||
|
@ -27,11 +27,10 @@ from calibre.ptempfile import PersistentTemporaryDirectory, PersistentTemporaryF
|
|||||||
from calibre.utils.zipfile import ZipFile
|
from calibre.utils.zipfile import ZipFile
|
||||||
|
|
||||||
def tostring(root, pretty_print=False):
|
def tostring(root, pretty_print=False):
|
||||||
return html.tostring(root, encoding='utf-8', method='xml',
|
return html.tostring(root, encoding='utf-8', method='xml',
|
||||||
pretty_print=pretty_print,
|
include_meta_content_type=True,
|
||||||
include_meta_content_type=True)
|
pretty_print=pretty_print)
|
||||||
|
|
||||||
|
|
||||||
class Link(object):
|
class Link(object):
|
||||||
'''
|
'''
|
||||||
Represents a link in a HTML file.
|
Represents a link in a HTML file.
|
||||||
@ -313,6 +312,14 @@ class PreProcessor(object):
|
|||||||
return html
|
return html
|
||||||
|
|
||||||
class Parser(PreProcessor, LoggingInterface):
|
class Parser(PreProcessor, LoggingInterface):
|
||||||
|
# SELF_CLOSING_TAGS = 'hr|br|link|img|meta|input|area|base|basefont'
|
||||||
|
# SELF_CLOSING_RULES = [re.compile(p[0]%SELF_CLOSING_TAGS, re.IGNORECASE) for p in
|
||||||
|
# [
|
||||||
|
# (r'<(?P<tag>%s)(?P<attrs>(\s+[^<>]*){0,1})(?<!/)>',
|
||||||
|
# '<\g<tag>\g<attrs> />'),
|
||||||
|
# (),
|
||||||
|
# ]
|
||||||
|
# ]
|
||||||
|
|
||||||
def __init__(self, htmlfile, opts, tdir, resource_map, htmlfiles, name='htmlparser'):
|
def __init__(self, htmlfile, opts, tdir, resource_map, htmlfiles, name='htmlparser'):
|
||||||
LoggingInterface.__init__(self, logging.getLogger(name))
|
LoggingInterface.__init__(self, logging.getLogger(name))
|
||||||
@ -347,10 +354,10 @@ class Parser(PreProcessor, LoggingInterface):
|
|||||||
Save processed HTML into the content directory.
|
Save processed HTML into the content directory.
|
||||||
Should be called after all HTML processing is finished.
|
Should be called after all HTML processing is finished.
|
||||||
'''
|
'''
|
||||||
|
ans = tostring(self.root, pretty_print=self.opts.pretty_print)
|
||||||
|
ans = re.compile(r'<html>', re.IGNORECASE).sub('<html xmlns="http://www.w3.org/1999/xhtml">', ans[:1000]) + ans[1000:]
|
||||||
|
|
||||||
with open(self.save_path(), 'wb') as f:
|
with open(self.save_path(), 'wb') as f:
|
||||||
ans = tostring(self.root, pretty_print=self.opts.pretty_print)
|
|
||||||
ans = re.compile(r'<html>', re.IGNORECASE).sub('<html xmlns="http://www.w3.org/1999/xhtml">', ans)
|
|
||||||
ans = re.compile(r'<head[^<>]*?>', re.IGNORECASE).sub('<head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n', ans)
|
|
||||||
f.write(ans)
|
f.write(ans)
|
||||||
return f.name
|
return f.name
|
||||||
|
|
||||||
@ -369,15 +376,14 @@ class Parser(PreProcessor, LoggingInterface):
|
|||||||
if self.opts.verbose:
|
if self.opts.verbose:
|
||||||
self.log_exception('lxml based parsing failed')
|
self.log_exception('lxml based parsing failed')
|
||||||
self.root = soupparser.fromstring(src)
|
self.root = soupparser.fromstring(src)
|
||||||
self.head = self.body = None
|
head = self.root.xpath('./head')
|
||||||
head = self.root.xpath('//head')
|
self.head = head[0] if head else etree.SubElement(self.root, 'head')
|
||||||
if head:
|
self.body = self.root.body
|
||||||
self.head = head[0]
|
|
||||||
body = self.root.xpath('//body')
|
|
||||||
if body:
|
|
||||||
self.body = body[0]
|
|
||||||
for a in self.root.xpath('//a[@name]'):
|
for a in self.root.xpath('//a[@name]'):
|
||||||
a.set('id', a.get('name'))
|
a.set('id', a.get('name'))
|
||||||
|
if not self.head.xpath('./title'):
|
||||||
|
title = etree.SubElement(self.head, 'title')
|
||||||
|
title.text = _('Unknown')
|
||||||
|
|
||||||
def debug_tree(self, name):
|
def debug_tree(self, name):
|
||||||
'''
|
'''
|
||||||
@ -455,11 +461,11 @@ class Processor(Parser):
|
|||||||
|
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
head = self.head if self.head is not None else self.body
|
|
||||||
style_path = os.path.basename(self.save_path())+'.css'
|
style_path = os.path.basename(self.save_path())+'.css'
|
||||||
style = etree.SubElement(head, 'link', attrib={'type':'text/css', 'rel':'stylesheet',
|
style = etree.SubElement(self.head, 'link', attrib={'type':'text/css', 'rel':'stylesheet',
|
||||||
'href':'resources/'+style_path})
|
'href':'resources/'+style_path,
|
||||||
style.tail = '\n\n'
|
'charset':'UTF-8'})
|
||||||
|
style.tail = '\n'
|
||||||
style_path = os.path.join(os.path.dirname(self.save_path()), 'resources', style_path)
|
style_path = os.path.join(os.path.dirname(self.save_path()), 'resources', style_path)
|
||||||
open(style_path, 'wb').write(self.css.encode('utf-8'))
|
open(style_path, 'wb').write(self.css.encode('utf-8'))
|
||||||
return Parser.save(self)
|
return Parser.save(self)
|
||||||
@ -584,6 +590,7 @@ class Processor(Parser):
|
|||||||
if cn: cn += ' '
|
if cn: cn += ' '
|
||||||
cn += classname
|
cn += classname
|
||||||
font.set('class', cn)
|
font.set('class', cn)
|
||||||
|
font.tag = 'span'
|
||||||
|
|
||||||
for elem in self.root.xpath('//*[@style]'):
|
for elem in self.root.xpath('//*[@style]'):
|
||||||
setting = elem.get('style')
|
setting = elem.get('style')
|
||||||
|
@ -806,7 +806,7 @@ class Main(MainWindow, Ui_MainWindow):
|
|||||||
if job.exception is not None:
|
if job.exception is not None:
|
||||||
self.job_exception(job)
|
self.job_exception(job)
|
||||||
return
|
return
|
||||||
to_device = self.device_connected and fmt in self.device_manager.device_class.FORMATS
|
to_device = self.device_connected and fmt.lower() in self.device_manager.device_class.FORMATS
|
||||||
self._add_books([pt.name], to_device)
|
self._add_books([pt.name], to_device)
|
||||||
if to_device:
|
if to_device:
|
||||||
self.status_bar.showMessage(_('News fetched. Uploading to device.'), 2000)
|
self.status_bar.showMessage(_('News fetched. Uploading to device.'), 2000)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user