add listener for progress events
[jFCPlib.git] / src / net / pterodactylus / fcp / highlevel / HighLevelClient.java
index 1521703..a09b289 100644 (file)
@@ -120,6 +120,9 @@ public class HighLevelClient {
        /** The listener for the connection. */
        private HighLevelClientFcpListener highLevelClientFcpListener = new HighLevelClientFcpListener();
 
+       /** The listeners for progress events. */
+       private List<HighLevelProgressListener> highLevelProgressListeners = Collections.synchronizedList(new ArrayList<HighLevelProgressListener>());
+
        /** The callback for {@link #connect()}. */
        private HighLevelCallback<ConnectResult> connectCallback;
 
@@ -249,6 +252,41 @@ public class HighLevelClient {
                }
        }
 
+       /**
+        * Adds a high-level progress listener.
+        * 
+        * @param highLevelProgressListener
+        *            The high-level progress listener to add
+        */
+       public void addHighLevelProgressListener(HighLevelProgressListener highLevelProgressListener) {
+               highLevelProgressListeners.add(highLevelProgressListener);
+       }
+
+       /**
+        * Removes a high-level progress listener.
+        * 
+        * @param highLevelProgressListener
+        *            The high-level progress listener to remove
+        */
+       public void removeHighLevelProgressListener(HighLevelProgressListener highLevelProgressListener) {
+               highLevelProgressListeners.remove(highLevelProgressListener);
+       }
+
+       /**
+        * Notifies all listeners that the request with the given identifier made
+        * some progress.
+        * 
+        * @param identifier
+        *            The identifier of the request
+        * @param highLevelProgress
+        *            The progress of the request
+        */
+       private void fireProgressReceived(String identifier, HighLevelProgress highLevelProgress) {
+               for (HighLevelProgressListener highLevelProgressListener: highLevelProgressListeners) {
+                       highLevelProgressListener.progressReceived(identifier, highLevelProgress);
+               }
+       }
+
        //
        // ACCESSORS
        //
@@ -1035,8 +1073,8 @@ public class HighLevelClient {
                                downloadCallback.progressUpdated();
                                return;
                        }
-                       /* unknown identifier? */
-                       logger.warning("unknown identifier for SimpleProgress: " + identifier);
+                       HighLevelProgress highLevelProgress = new HighLevelProgress(identifier, simpleProgress.getTotal(), simpleProgress.getRequired(), simpleProgress.getSucceeded(), simpleProgress.getFailed(), simpleProgress.getFatallyFailed(), simpleProgress.isFinalizedTotal());
+                       fireProgressReceived(identifier, highLevelProgress);
                }
 
                /**