73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
class Http2:
|
|
provider = None
|
|
path_join = None
|
|
is_file = None
|
|
chapters = None
|
|
chapters_count = 0
|
|
|
|
def __init__(self, provider):
|
|
from manga_py.fs import path_join, is_file
|
|
self.provider = provider
|
|
self.path_join = path_join
|
|
self.is_file = is_file
|
|
|
|
def _get_name(self, idx):
|
|
return self.path_join(
|
|
self.provider._params.get('destination'),
|
|
self.provider._storage['manga_name'],
|
|
'{:0>3}-{}.{}'.format(
|
|
idx, self.provider.get_archive_name(),
|
|
self.provider._archive_type()
|
|
)
|
|
)
|
|
|
|
def __download(self, idx, name, url):
|
|
_min, _max = self._min_max_calculate()
|
|
self.provider._info.add_volume(
|
|
self.provider.chapter,
|
|
self.provider.get_archive_path()
|
|
)
|
|
|
|
self.provider.progress(self.chapters_count, idx)
|
|
|
|
if idx < _min or (idx >= _max > 0) or self.is_file(name):
|
|
return False
|
|
|
|
if not self.provider._simulate:
|
|
try:
|
|
self.provider.http().download_file(url, name, idx)
|
|
except Exception as e:
|
|
self.provider._info.set_last_volume_error(e)
|
|
|
|
def _min_max_calculate(self):
|
|
_min = self.provider._params.get('skip_volumes', 0)
|
|
_max = self.provider._params.get('max_volumes', 0)
|
|
self.chapters_count = len(self.chapters)
|
|
if _max > 0 or _min > 0:
|
|
if _max < self.chapters_count:
|
|
_max = self.chapters_count - _max
|
|
else:
|
|
_max = 0
|
|
self.chapters_count = self.chapters_count - _min - _max
|
|
if _max > 0 and _min > 0:
|
|
_max += _min - 1
|
|
return _min, _max
|
|
|
|
def download_archives(self, chapters=None):
|
|
if chapters is None:
|
|
chapters = self.provider._storage['chapters']
|
|
self.chapters = chapters
|
|
for idx, url in enumerate(chapters):
|
|
self.provider.before_download_chapter()
|
|
self.provider._storage['current_chapter'] = idx
|
|
name = self._get_name(idx)
|
|
idx, url, name = self.before_download(idx, url, name)
|
|
self.__download(idx, name, url)
|
|
self.after_download(idx, name)
|
|
|
|
def before_download(self, idx, url, _path):
|
|
return idx, url, _path
|
|
|
|
def after_download(self, idx, _path):
|
|
pass
|