summaryrefslogtreecommitdiffstats
path: root/xbmc/storage/IStorageProvider.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
commitc04dcc2e7d834218ef2d4194331e383402495ae1 (patch)
tree7333e38d10d75386e60f336b80c2443c1166031d /xbmc/storage/IStorageProvider.h
parentInitial commit. (diff)
downloadkodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz
kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/storage/IStorageProvider.h')
-rw-r--r--xbmc/storage/IStorageProvider.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/xbmc/storage/IStorageProvider.h b/xbmc/storage/IStorageProvider.h
new file mode 100644
index 0000000..aa9ecaf
--- /dev/null
+++ b/xbmc/storage/IStorageProvider.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "MediaSource.h"
+
+#include <memory>
+#include <string>
+#include <vector>
+#ifdef HAS_DVD_DRIVE
+#include "cdioSupport.h"
+#endif
+
+namespace MEDIA_DETECT
+{
+namespace STORAGE
+{
+/*! \brief Abstracts a generic storage device type*/
+enum class Type
+{
+ UNKNOWN, /*!< the storage type is unknown */
+ OPTICAL /*!< an optical device (e.g. DVD or Bluray) */
+};
+
+/*! \brief Abstracts a generic storage device */
+struct StorageDevice
+{
+ /*! Device name/label */
+ std::string label{};
+ /*! Device mountpoint/path */
+ std::string path{};
+ /*! The storage type (e.g. OPTICAL) */
+ STORAGE::Type type{STORAGE::Type::UNKNOWN};
+};
+} // namespace STORAGE
+} // namespace MEDIA_DETECT
+
+class IStorageEventsCallback
+{
+public:
+ virtual ~IStorageEventsCallback() = default;
+
+ /*! \brief Callback executed when a new storage device is added
+ * @param device the storage device
+ */
+ virtual void OnStorageAdded(const MEDIA_DETECT::STORAGE::StorageDevice& device) = 0;
+
+ /*! \brief Callback executed when a new storage device is safely removed
+ * @param device the storage device
+ */
+ virtual void OnStorageSafelyRemoved(const MEDIA_DETECT::STORAGE::StorageDevice& device) = 0;
+
+ /*! \brief Callback executed when a new storage device is unsafely removed
+ * @param device the storage device
+ */
+ virtual void OnStorageUnsafelyRemoved(const MEDIA_DETECT::STORAGE::StorageDevice& device) = 0;
+};
+
+class IStorageProvider
+{
+public:
+ virtual ~IStorageProvider() = default;
+
+ virtual void Initialize() = 0;
+ virtual void Stop() = 0;
+
+ virtual void GetLocalDrives(VECSOURCES &localDrives) = 0;
+ virtual void GetRemovableDrives(VECSOURCES &removableDrives) = 0;
+ virtual std::string GetFirstOpticalDeviceFileName()
+ {
+#ifdef HAS_DVD_DRIVE
+ return std::string(MEDIA_DETECT::CLibcdio::GetInstance()->GetDeviceFileName());
+#else
+ return "";
+#endif
+ }
+
+ virtual bool Eject(const std::string& mountpath) = 0;
+
+ virtual std::vector<std::string> GetDiskUsage() = 0;
+
+ virtual bool PumpDriveChangeEvents(IStorageEventsCallback *callback) = 0;
+
+ /**\brief Called by media manager to create platform storage provider
+ *
+ * This method used to create platform specified storage provider
+ */
+ static std::unique_ptr<IStorageProvider> CreateInstance();
+};