Browse Source

Show percentage of DirectUnpack, when available

tags/2.2.0Alpha3
Safihre 8 years ago
parent
commit
4a21e7c217
  1. 4
      interfaces/Glitter/templates/static/javascripts/glitter.queue.js
  2. 25
      sabnzbd/directunpacker.py
  3. 4
      sabnzbd/nzbstuff.py

4
interfaces/Glitter/templates/static/javascripts/glitter.queue.js

@ -483,7 +483,7 @@ function QueueModel(parent, data) {
self.remainingMB = ko.observable(parseFloat(data.mbleft)); self.remainingMB = ko.observable(parseFloat(data.mbleft));
self.avg_age = ko.observable(data.avg_age) self.avg_age = ko.observable(data.avg_age)
self.missing = ko.observable(parseFloat(data.mbmissing)) self.missing = ko.observable(parseFloat(data.mbmissing))
self.direct_unpack = ko.observable(parseInt(data.direct_unpack)) self.direct_unpack = ko.observable(data.direct_unpack)
self.category = ko.observable(data.cat); self.category = ko.observable(data.cat);
self.priority = ko.observable(parent.priorityName[data.priority]); self.priority = ko.observable(parent.priorityName[data.priority]);
self.script = ko.observable(data.script); self.script = ko.observable(data.script);
@ -583,7 +583,7 @@ function QueueModel(parent, data) {
self.remainingMB(parseFloat(data.mbleft)); self.remainingMB(parseFloat(data.mbleft));
self.avg_age(data.avg_age) self.avg_age(data.avg_age)
self.missing(parseFloat(data.mbmissing)) self.missing(parseFloat(data.mbmissing))
self.direct_unpack(parseInt(data.direct_unpack)) self.direct_unpack(data.direct_unpack)
self.category(data.cat); self.category(data.cat);
self.priority(parent.priorityName[data.priority]); self.priority(parent.priorityName[data.priority]);
self.script(data.script); self.script(data.script);

25
sabnzbd/directunpacker.py

@ -59,6 +59,7 @@ class DirectUnpacker(threading.Thread):
self.unpack_dir_info = None self.unpack_dir_info = None
self.cur_setname = None self.cur_setname = None
self.cur_volume = 0 self.cur_volume = 0
self.total_volumes = {}
self.success_sets = [] self.success_sets = []
self.next_sets = [] self.next_sets = []
@ -86,18 +87,24 @@ class DirectUnpacker(threading.Thread):
return False return False
return True return True
def set_volumes_for_nzo(self):
""" Loop over all files to detect the names """
for nzf in self.nzo.files + self.nzo.finished_files:
filename = nzf.filename.lower()
nzf.setname, nzf.vol = analyze_rar_filename(filename)
if nzf.setname not in self.total_volumes:
self.total_volumes[nzf.setname] = 0
self.total_volumes[nzf.setname] += 1
def add(self, nzf): def add(self, nzf):
""" Add jobs and start instance of DirectUnpack """ """ Add jobs and start instance of DirectUnpack """
# Stop if something is wrong # Stop if something is wrong
if not self.check_requirements(): if not self.check_requirements():
return return
# Analyze the input
filename = nzf.filename.lower()
nzf.setname, nzf.vol = analyze_rar_filename(filename)
# Do we have a set yet? # Do we have a set yet?
if not self.cur_setname: if not self.cur_setname:
self.set_volumes_for_nzo()
self.cur_setname = nzf.setname self.cur_setname = nzf.setname
# Are we doing this set? # Are we doing this set?
@ -194,7 +201,7 @@ class DirectUnpacker(threading.Thread):
# Send "Enter" to proceed, only 1 at a time via lock # Send "Enter" to proceed, only 1 at a time via lock
CONCURRENT_LOCK.acquire() CONCURRENT_LOCK.acquire()
self.active_instance.stdin.write('\n') self.active_instance.stdin.write('\n')
self.nzo.set_action_line(T('Unpacking'), '%02d' % self.cur_volume) self.nzo.set_action_line(T('Unpacking'), self.get_formatted_stats())
logging.info('DirectUnpacked volume %s for %s', self.cur_volume, self.cur_setname) logging.info('DirectUnpacked volume %s for %s', self.cur_volume, self.cur_setname)
if linebuf.endswith('\n'): if linebuf.endswith('\n'):
@ -286,6 +293,14 @@ class DirectUnpacker(threading.Thread):
# Reset settings # Reset settings
self.reset_active() self.reset_active()
def get_formatted_stats(self):
""" Get percentage or number of rar's done """
if self.cur_setname and self.cur_setname in self.total_volumes:
# This won't work on obfuscated posts
if self.total_volumes[self.cur_setname] > self.cur_volume:
return '%.0f%%' % (100*float(self.cur_volume)/self.total_volumes[self.cur_setname])
return self.cur_volume
def analyze_rar_filename(filename): def analyze_rar_filename(filename):
""" Extract volume number and setname from rar-filenames """ Extract volume number and setname from rar-filenames

4
sabnzbd/nzbstuff.py

@ -972,9 +972,9 @@ class NzbObject(TryList):
head, vol, block = analyse_par2(name) head, vol, block = analyse_par2(name)
if head and matcher(lparset, head.lower()): if head and matcher(lparset, head.lower()):
xnzf.set_par2(parset, vol, block) xnzf.set_par2(parset, vol, block)
self.extrapars[parset].append(xnzf)
# Don't postpone during pre-check or if all par2 should be kept # Don't postpone during pre-check or if all par2 should be kept
if not self.precheck and cfg.enable_par_cleanup(): if not self.precheck and cfg.enable_par_cleanup():
self.extrapars[parset].append(xnzf)
self.files.remove(xnzf) self.files.remove(xnzf)
@synchronized(NZO_LOCK) @synchronized(NZO_LOCK)
@ -1579,7 +1579,7 @@ class NzbObject(TryList):
self.status, self.priority, self.status, self.priority,
len(self.nzo_info.get('missing_art_log', [])), len(self.nzo_info.get('missing_art_log', [])),
self.bytes_tried - self.bytes_downloaded, self.bytes_tried - self.bytes_downloaded,
self.direct_unpacker.cur_volume if self.direct_unpacker else 0) self.direct_unpacker.get_formatted_stats() if self.direct_unpacker else 0)
def get_nzf_by_id(self, nzf_id): def get_nzf_by_id(self, nzf_id):
if nzf_id in self.files_table: if nzf_id in self.files_table:

Loading…
Cancel
Save