mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement #4909 (Feature request: allow URL arguments to ebook-convert --cover)
This commit is contained in:
parent
72454ee6c4
commit
ad117486c1
@ -233,14 +233,18 @@ def create_option_parser(args, log):
|
||||
|
||||
return parser, plumber
|
||||
|
||||
def abspath(x):
|
||||
if x.startswith('http:') or x.startswith('https:'):
|
||||
return x
|
||||
return os.path.abspath(os.path.expanduser(x))
|
||||
|
||||
def main(args=sys.argv):
|
||||
log = Log()
|
||||
parser, plumber = create_option_parser(args, log)
|
||||
opts = parser.parse_args(args)[0]
|
||||
y = lambda q : os.path.abspath(os.path.expanduser(q))
|
||||
for x in ('read_metadata_from_opf', 'cover'):
|
||||
if getattr(opts, x, None) is not None:
|
||||
setattr(opts, x, y(getattr(opts, x)))
|
||||
setattr(opts, x, abspath(getattr(opts, x)))
|
||||
recommendations = [(n.dest, getattr(opts, n.dest),
|
||||
OptionRecommendation.HIGH) \
|
||||
for n in parser.options_iter()
|
||||
|
@ -424,7 +424,7 @@ OptionRecommendation(name='author_sort',
|
||||
|
||||
OptionRecommendation(name='cover',
|
||||
recommended_value=None, level=OptionRecommendation.LOW,
|
||||
help=_('Set the cover to the specified file.')),
|
||||
help=_('Set the cover to the specified file or URL')),
|
||||
|
||||
OptionRecommendation(name='comments',
|
||||
recommended_value=None, level=OptionRecommendation.LOW,
|
||||
@ -638,6 +638,20 @@ OptionRecommendation(name='timestamp',
|
||||
continue
|
||||
setattr(mi, x, val)
|
||||
|
||||
def download_cover(self, url):
|
||||
from calibre import browser
|
||||
from PIL import Image
|
||||
from cStringIO import StringIO
|
||||
from calibre.ptempfile import PersistentTemporaryFile
|
||||
self.log('Downloading cover from %r'%url)
|
||||
br = browser()
|
||||
raw = br.open_novisit(url).read()
|
||||
buf = StringIO(raw)
|
||||
pt = PersistentTemporaryFile('.jpg')
|
||||
pt.close()
|
||||
img = Image.open(buf)
|
||||
img.convert('RGB').save(pt.name)
|
||||
return pt.name
|
||||
|
||||
def read_user_metadata(self):
|
||||
'''
|
||||
@ -655,6 +669,8 @@ OptionRecommendation(name='timestamp',
|
||||
mi = MetaInformation(opf)
|
||||
self.opts_to_mi(mi)
|
||||
if mi.cover:
|
||||
if mi.cover.startswith('http:') or mi.cover.startswith('https:'):
|
||||
mi.cover = self.download_cover(mi.cover)
|
||||
mi.cover_data = ('', open(mi.cover, 'rb').read())
|
||||
mi.cover = None
|
||||
self.user_metadata = mi
|
||||
|
Loading…
x
Reference in New Issue
Block a user