I have no idea what the heck the MetaProgressObserver was doing,
but it wasn't doing the right thing. Fixed it. I honestly have no idea how this was working. Maybe it just wasn't. Maybe we never noticed before because with the per-step progress bars we weren't seeing it exceed 100 percent. And then use that instead of the UnifiedProgressObserver I wrote, before I saw MetaProgressObserver.
This commit is contained in:
@@ -82,6 +82,7 @@ import com.threerings.getdown.net.HTTPDownloader;
|
||||
import com.threerings.getdown.tools.Patcher;
|
||||
import com.threerings.getdown.util.ConfigUtil;
|
||||
import com.threerings.getdown.util.LaunchUtil;
|
||||
import com.threerings.getdown.util.MetaProgressObserver;
|
||||
import com.threerings.getdown.util.ProgressObserver;
|
||||
|
||||
import static com.threerings.getdown.Log.log;
|
||||
@@ -687,11 +688,12 @@ public abstract class Getdown extends Thread
|
||||
updateStatus("m.patching");
|
||||
|
||||
// create a new ProgressObserver that divides the different patching phases
|
||||
UnifiedProgressObserver uProgObs = new UnifiedProgressObserver(list.size(), _progobs);
|
||||
MetaProgressObserver mprog = new MetaProgressObserver(_progobs, list.size());
|
||||
for (Resource prsrc : list) {
|
||||
mprog.startElement(1);
|
||||
try {
|
||||
Patcher patcher = new Patcher();
|
||||
patcher.patch(prsrc.getLocal().getParentFile(), prsrc.getLocal(), uProgObs);
|
||||
patcher.patch(prsrc.getLocal().getParentFile(), prsrc.getLocal(), mprog);
|
||||
} catch (Exception e) {
|
||||
log.warning("Failed to apply patch", "prsrc", prsrc, e);
|
||||
}
|
||||
@@ -701,7 +703,6 @@ public abstract class Getdown extends Thread
|
||||
log.warning("Failed to delete '" + prsrc + "'.");
|
||||
prsrc.getLocal().deleteOnExit();
|
||||
}
|
||||
uProgObs.stepComplete();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1152,43 +1153,6 @@ public abstract class Getdown extends Thread
|
||||
}
|
||||
};
|
||||
|
||||
/** A simple combiner of multiple 0->100 progresses into one. */
|
||||
protected static class UnifiedProgressObserver
|
||||
implements ProgressObserver
|
||||
{
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public UnifiedProgressObserver (int steps, ProgressObserver delegate)
|
||||
{
|
||||
_steps = steps;
|
||||
_delegate = delegate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call prior to moving on to a next step.
|
||||
*/
|
||||
public void stepComplete ()
|
||||
{
|
||||
_step++;
|
||||
}
|
||||
|
||||
// from ProgressObserver
|
||||
public void progress (int percent)
|
||||
{
|
||||
_delegate.progress(((_step * 100) + percent) / _steps);
|
||||
}
|
||||
|
||||
/** The total number of steps. */
|
||||
protected final int _steps;
|
||||
|
||||
/** Our delegate observer. */
|
||||
protected final ProgressObserver _delegate;
|
||||
|
||||
/** The current step. */
|
||||
protected int _step;
|
||||
}
|
||||
|
||||
protected Application _app;
|
||||
protected Application.UpdateInterface _ifc = new Application.UpdateInterface();
|
||||
|
||||
|
||||
@@ -39,19 +39,18 @@ public class MetaProgressObserver implements ProgressObserver
|
||||
|
||||
public void startElement (long elementSize)
|
||||
{
|
||||
_currentSize += elementSize;
|
||||
// add the previous size
|
||||
_accum += (_elementSize * 100);
|
||||
// then set the new one
|
||||
_elementSize = elementSize;
|
||||
}
|
||||
|
||||
// documentation inherited from interface
|
||||
public void progress (int percent)
|
||||
{
|
||||
if (_target != null && _elementSize > 0) {
|
||||
long position = _currentSize + (100 * percent / _elementSize);
|
||||
_target.progress((int)(100 * position / _totalSize));
|
||||
}
|
||||
_target.progress((int)((_accum + (percent * _elementSize)) / _totalSize));
|
||||
}
|
||||
|
||||
protected ProgressObserver _target;
|
||||
protected long _totalSize, _currentSize, _elementSize;
|
||||
protected long _totalSize, _accum, _elementSize;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user