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
|
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):
|
def main(args=sys.argv):
|
||||||
log = Log()
|
log = Log()
|
||||||
parser, plumber = create_option_parser(args, log)
|
parser, plumber = create_option_parser(args, log)
|
||||||
opts = parser.parse_args(args)[0]
|
opts = parser.parse_args(args)[0]
|
||||||
y = lambda q : os.path.abspath(os.path.expanduser(q))
|
|
||||||
for x in ('read_metadata_from_opf', 'cover'):
|
for x in ('read_metadata_from_opf', 'cover'):
|
||||||
if getattr(opts, x, None) is not None:
|
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),
|
recommendations = [(n.dest, getattr(opts, n.dest),
|
||||||
OptionRecommendation.HIGH) \
|
OptionRecommendation.HIGH) \
|
||||||
for n in parser.options_iter()
|
for n in parser.options_iter()
|
||||||
|
@ -424,7 +424,7 @@ OptionRecommendation(name='author_sort',
|
|||||||
|
|
||||||
OptionRecommendation(name='cover',
|
OptionRecommendation(name='cover',
|
||||||
recommended_value=None, level=OptionRecommendation.LOW,
|
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',
|
OptionRecommendation(name='comments',
|
||||||
recommended_value=None, level=OptionRecommendation.LOW,
|
recommended_value=None, level=OptionRecommendation.LOW,
|
||||||
@ -638,6 +638,20 @@ OptionRecommendation(name='timestamp',
|
|||||||
continue
|
continue
|
||||||
setattr(mi, x, val)
|
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):
|
def read_user_metadata(self):
|
||||||
'''
|
'''
|
||||||
@ -655,6 +669,8 @@ OptionRecommendation(name='timestamp',
|
|||||||
mi = MetaInformation(opf)
|
mi = MetaInformation(opf)
|
||||||
self.opts_to_mi(mi)
|
self.opts_to_mi(mi)
|
||||||
if mi.cover:
|
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_data = ('', open(mi.cover, 'rb').read())
|
||||||
mi.cover = None
|
mi.cover = None
|
||||||
self.user_metadata = mi
|
self.user_metadata = mi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user