mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-09-11 10:09:38 +02:00
Improve progress listener
This commit is contained in:
parent
a92e0c876e
commit
50704c45f1
9 changed files with 85 additions and 48 deletions
|
@ -40,6 +40,7 @@ public abstract class JingleFileTransfer extends JingleDescription<JingleFileTra
|
|||
|
||||
protected State state;
|
||||
protected JingleFile metadata;
|
||||
protected float percentage;
|
||||
|
||||
private final List<ProgressListener> progressListeners = Collections.synchronizedList(new ArrayList<ProgressListener>());
|
||||
|
||||
|
@ -83,29 +84,41 @@ public abstract class JingleFileTransfer extends JingleDescription<JingleFileTra
|
|||
getParent().onContentCancel();
|
||||
}
|
||||
|
||||
public void notifyProgressListeners(float progress) {
|
||||
for (ProgressListener p : progressListeners) {
|
||||
p.progress(progress);
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyProgressListenersFinished() {
|
||||
for (ProgressListener p : progressListeners) {
|
||||
p.finished();
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyProgressListenersStarted() {
|
||||
for (ProgressListener p : progressListeners) {
|
||||
p.started();
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyProgressListenersTerminated(JingleReasonElement.Reason reason) {
|
||||
for (ProgressListener p : progressListeners) {
|
||||
p.terminated(reason);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return progress as a float value between 0 and 1.
|
||||
* If the transmission has not yet started, return -1.
|
||||
* @return -1 or percentage in [0,1]
|
||||
*/
|
||||
public float getPercentage() {
|
||||
if (state == State.pending || state == State.negotiating) {
|
||||
return -1f;
|
||||
}
|
||||
|
||||
return percentage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNamespace() {
|
||||
return JingleFileTransfer.NAMESPACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleContentTerminate(JingleReasonElement.Reason reason) {
|
||||
notifyProgressListenersTerminated(reason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JingleFileTransferElement getElement() {
|
||||
return new JingleFileTransferElement(metadata.getElement());
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.jivesoftware.smackx.hashes.element.HashElement;
|
|||
import org.jivesoftware.smackx.jingle.component.JingleSession;
|
||||
import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionInfoElement;
|
||||
import org.jivesoftware.smackx.jingle.element.JingleElement;
|
||||
import org.jivesoftware.smackx.jingle.element.JingleReasonElement;
|
||||
import org.jivesoftware.smackx.jingle_filetransfer.controller.IncomingFileOfferController;
|
||||
import org.jivesoftware.smackx.jingle_filetransfer.element.JingleFileTransferChildElement;
|
||||
|
||||
|
@ -97,6 +98,9 @@ public class JingleIncomingFileOffer extends AbstractJingleFileOffer implements
|
|||
target.write(bufbuf, 0, length);
|
||||
read += length;
|
||||
LOGGER.log(Level.INFO, "Read " + read + " (" + length + ") of " + metadata.getSize() + " bytes.");
|
||||
|
||||
percentage = ((float) read) / ((float) metadata.getSize());
|
||||
|
||||
if (read == (int) metadata.getSize()) {
|
||||
break;
|
||||
}
|
||||
|
@ -133,7 +137,7 @@ public class JingleIncomingFileOffer extends AbstractJingleFileOffer implements
|
|||
LOGGER.log(Level.INFO, "CHECKSUM MATCHED :)");
|
||||
}
|
||||
}
|
||||
notifyProgressListenersFinished();
|
||||
notifyProgressListenersTerminated(JingleReasonElement.Reason.success);
|
||||
getParent().onContentFinished();
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.logging.Logger;
|
|||
import org.jivesoftware.smackx.bytestreams.BytestreamSession;
|
||||
import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionInfoElement;
|
||||
import org.jivesoftware.smackx.jingle.element.JingleElement;
|
||||
import org.jivesoftware.smackx.jingle.element.JingleReasonElement;
|
||||
import org.jivesoftware.smackx.jingle_filetransfer.controller.OutgoingFileOfferController;
|
||||
|
||||
/**
|
||||
|
@ -66,6 +67,8 @@ public class JingleOutgoingFileOffer extends AbstractJingleFileOffer implements
|
|||
|
||||
byte[] buf = new byte[8192];
|
||||
|
||||
int written = 0;
|
||||
|
||||
while (true) {
|
||||
if (getState() == State.cancelled) {
|
||||
break;
|
||||
|
@ -75,6 +78,8 @@ public class JingleOutgoingFileOffer extends AbstractJingleFileOffer implements
|
|||
break;
|
||||
}
|
||||
outputStream.write(buf, 0, r);
|
||||
written += r;
|
||||
percentage = ((float) getMetadata().getSize()) / ((float) written);
|
||||
}
|
||||
|
||||
outputStream.flush();
|
||||
|
@ -91,7 +96,7 @@ public class JingleOutgoingFileOffer extends AbstractJingleFileOffer implements
|
|||
}
|
||||
}
|
||||
|
||||
notifyProgressListenersFinished();
|
||||
notifyProgressListenersTerminated(JingleReasonElement.Reason.success);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.jingle_filetransfer.listener;
|
||||
|
||||
import org.jivesoftware.smackx.jingle.element.JingleReasonElement;
|
||||
|
||||
/**
|
||||
* Created by vanitas on 27.07.17.
|
||||
*/
|
||||
|
@ -23,7 +25,5 @@ public interface ProgressListener {
|
|||
|
||||
void started();
|
||||
|
||||
void progress(float percent);
|
||||
|
||||
void finished();
|
||||
void terminated(JingleReasonElement.Reason reason);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue