> Thanks, I've committed the patch with some (minor) modifications.

The pleasure is mine.

> What we need now, are docs.

Yep, I think also Jsch would need some docs and an API that does not need
one to write
bytes by hand but that is another story. I can help of course with the docs
(but slowly :)

> Also, I'm not sure whether the form of the progess report is really
> optimal, that's why I haven't merged it over to the 1.6 branch yet.
> <get> will print lines of dots each line taking up to 50 columns.
> Each dot represents approximately 1K.  We could do one dot per percent
> or something like that.  Right now, you'd get 100 lines in your
> logfile for larger transfers which looks a little too noisy.

Here is the reading loop of <get>

byte[] buffer = new byte[100 * 1024];
int length;
int dots = 0;

while ((length = is.read(buffer)) >= 0) {
    fos.write(buffer, 0, length);
    if (verbose) {
        System.out.print(".");
        if (dots++ > 50) {
            System.out.flush();
            dots = 0;
        }
    }
}

So it prints one dot for every 100KB.
And the way they end up on the same line is that only 50*100KB is read
it flushes. Meaning that user does not see the dots coming one by one but
in chunk of 50 ( = 50 * 100KB)

I am not sure if this interpretation is correct but so I understand this.
The problem is that the user sees the progress not often enough.
And of course when the dots are bound to KB instead of percentage
with large files they start taking space. Some might like that.

Anyway here is a smarter version of method trackProgress()
This will output 2 lines for any size file and give visual cue about
progress quite well. Try it!

Kippis!

/*
    Track progress every 10% if 100kb < filesize < 1mb. For larger files
track progress for every percent transmitted.
*/
protected int trackProgress(int filesize, int totalLength, int
percentTransmitted) {

    int percent = (int) Math.round(Math.floor((totalLength /
(double)filesize) * 100));

    if (percent > percentTransmitted) {
        if ( filesize < 1048576 ) {
            if (percent % 10 == 0) {
                if (percent == 100)
                    System.out.println(" 100%");
                else
                    System.out.print("*");
            }
            else
                return percent;
        }
        else {
            if (percent == 50)
                System.out.println(" 50%");
            else if (percent == 100)
                System.out.println(" 100%");
            else
                System.out.print(".");
        }
    }

    System.out.flush();
    return percent;
}


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to