[vlc-devel] [PATCH 4/4] Qt GUI: use callback to fetch cloud directory.

Paweł Wegner pawel.wegner95 at gmail.com
Wed Oct 19 19:50:59 CEST 2016


---
 modules/gui/qt/components/open_panels.cpp | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/modules/gui/qt/components/open_panels.cpp b/modules/gui/qt/components/open_panels.cpp
index 2232dbe..db118e9 100644
--- a/modules/gui/qt/components/open_panels.cpp
+++ b/modules/gui/qt/components/open_panels.cpp
@@ -1433,6 +1433,29 @@ public:
     {
     }
 };
+
+class CloudListDirectoryCallback : public cloudstorage::IListDirectoryCallback {
+public:
+    CloudListDirectoryCallback(DirectoryModel* model) : model(model)
+    {
+    }
+
+    void receivedItem(IItem::Pointer item) override
+    {
+        model->addItem(item);
+    }
+
+    void done(const std::vector<IItem::Pointer>&) override
+    {
+    }
+
+    void error(const std::string&) override
+    {
+    }
+
+private:
+    DirectoryModel* model;
+};
 } // namespace
 
 CloudOpenPanel::CloudOpenPanel( QWidget *parent, intf_thread_t *t ) :
@@ -1535,11 +1558,9 @@ void CloudOpenPanel::itemClicked(const QModelIndex& index)
 void CloudOpenPanel::listDirectory()
 {
     directoryModel.clear();
+    std::unique_ptr<CloudListDirectoryCallback> callback(new CloudListDirectoryCallback(&directoryModel));
     listDirectoryRequest = currentProvider->listDirectoryAsync(currentDirectory,
-                                                               [this](const std::vector<cloudstorage::IItem::Pointer>& d) {
-        for (auto i : d)
-            directoryModel.addItem(i);
-    });
+                                                               std::move(callback));
 }
 
 void CloudOpenPanel::updateMRL()
-- 
2.9.3



More information about the vlc-devel mailing list