package org.yinwang.pysonar;

import java.text.DecimalFormat;

public class FancyProgress {

    long startTime;
    long lastTickTime;
    long lastCount;
    int lastRate;
    long total;
    long count;
    long width;
    long segSize;


    public FancyProgress(long total, long width) {
        this.startTime = System.currentTimeMillis();
        this.lastTickTime = System.currentTimeMillis();
        this.lastCount = 0;
        this.lastRate = 0;
        this.total = total;
        this.width = width;
        this.segSize = total / width;
        if (segSize == 0) segSize = 1;
    }


    public void setTotal(long total) {
        this.total = total;
    }


    public void tick(int n) {
        count += n;
        if (count > total) {
            total = count;
        }

        long elapsed = System.currentTimeMillis() - lastTickTime;

        if (elapsed > 500 || count == total || count % segSize == 0) {
            int len = (int) Math.floor(width * count / total);

            System.out.print("\r[");

            for (int i = 0; i < len; i++) {
                System.out.print("=");
            }

            for (int j = len; j < width; j++) {
                System.out.print(" ");
            }

            System.out.print("]  ");
            System.out.print(Util.percent(count, total) + " (" + count + "/" + total + ")");

            DecimalFormat df = new DecimalFormat("#");

            double rate;

            if (elapsed > 1) {
                rate = (count - lastCount) / (elapsed / 1000.0);
            } else {
                rate = lastRate;
            }

            System.out.print(" " + df.format(rate) + "/s");

            lastTickTime = System.currentTimeMillis();
            lastCount = count;
        }
    }


    public void tick() {
        tick(1);
    }
}

package org.yinwang.pysonar;

import java.text.DecimalFormat;

public class FancyProgress {

    long startTime;
    long lastTickTime;
    long lastCount;
    int lastRate;
    long total;
    long count;
    long width;
    long segSize;


    public FancyProgress(long total, long width) {
        this.startTime = System.currentTimeMillis();
        this.lastTickTime = System.currentTimeMillis();
        this.lastCount = 0;
        this.lastRate = 0;
        this.total = total;
        this.width = width;
        this.segSize = total / width;
        if (segSize == 0) segSize = 1;
    }


    public void setTotal(long total) {
        this.total = total;
    }


    public void tick(int n) {
        count += n;
        if (count > total) {
            total = count;
        }

        long elapsed = System.currentTimeMillis() - lastTickTime;

        if (elapsed > 500 || count == total || count % segSize == 0) {
            int len = (int) Math.floor(width * count / total);

            System.out.print("\r[");

            for (int i = 0; i < len; i++) {
                System.out.print("=");
            }

            for (int j = len; j < width; j++) {
                System.out.print(" ");
            }

            System.out.print("]  ");
            System.out.print(Util.percent(count, total) + " (" + count + "/" + total + ")");

            DecimalFormat df = new DecimalFormat("#");

            double rate;

            if (elapsed > 1) {
                rate = (count - lastCount) / (elapsed / 1000.0);
            } else {
                rate = lastRate;
            }

            System.out.print("\t" + df.format(rate) + "/s    ");

            lastTickTime = System.currentTimeMillis();
            lastCount = count;
        }
    }


    public void tick() {
        tick(1);
    }
}

adjust spaces