From e6af3b845c7a76767c3b4362344b00df2a3bf61f Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Tue, 12 Feb 2008 15:39:45 -0700
Subject: [PATCH] make current upload/download status objects available from
 the client

---
 src/allmydata/client.py     | 7 +++++++
 src/allmydata/download.py   | 2 ++
 src/allmydata/interfaces.py | 8 ++++++++
 src/allmydata/upload.py     | 3 +++
 4 files changed, 20 insertions(+)

diff --git a/src/allmydata/client.py b/src/allmydata/client.py
index f485a4d5..7314cb6f 100644
--- a/src/allmydata/client.py
+++ b/src/allmydata/client.py
@@ -280,3 +280,10 @@ class Client(node.Node, testutil.PollMixin):
         uploader = self.getServiceNamed("uploader")
         return uploader.upload(uploadable)
 
+    def list_uploads(self):
+        uploader = self.getServiceNamed("uploader")
+        return uploader.list_uploads()
+
+    def list_downloads(self):
+        downloader = self.getServiceNamed("downloader")
+        return downloader.list_downloads()
diff --git a/src/allmydata/download.py b/src/allmydata/download.py
index eb5cd539..4d382771 100644
--- a/src/allmydata/download.py
+++ b/src/allmydata/download.py
@@ -871,3 +871,5 @@ class Downloader(service.MultiService):
         return self.download(uri, FileHandle(filehandle))
 
 
+    def list_downloads(self):
+        return self._all_downloads.keys()
diff --git a/src/allmydata/interfaces.py b/src/allmydata/interfaces.py
index f76c674d..986ed4db 100644
--- a/src/allmydata/interfaces.py
+++ b/src/allmydata/interfaces.py
@@ -1374,6 +1374,14 @@ class IClient(Interface):
                  IDirectoryNode-providing instances, like NewDirectoryNode.
         """
 
+class IClientStatus(Interface):
+    def list_uploads():
+        """Return a list of IUploadStatus objects, one for each
+        upload which is currently running."""
+    def list_downloads():
+        """Return a list of IDownloadStatus objects, one for each
+        download which is currently running."""
+
 class IUploadStatus(Interface):
     def get_storage_index():
         """Return a string with the (binary) storage index in use on this
diff --git a/src/allmydata/upload.py b/src/allmydata/upload.py
index 3ea412bc..af51cd11 100644
--- a/src/allmydata/upload.py
+++ b/src/allmydata/upload.py
@@ -1167,3 +1167,6 @@ class Uploader(service.MultiService):
             return res
         d.addBoth(_done)
         return d
+
+    def list_uploads(self):
+        return self._all_uploads.keys()
-- 
2.45.2