add abstract class CDbUrl to support extended/complex (video|music)db:// paths
authormontellese <montellese@xbmc.org>
Wed, 20 Jun 2012 07:45:28 +0000 (09:45 +0200)
committermontellese <montellese@xbmc.org>
Sun, 5 Aug 2012 21:30:51 +0000 (23:30 +0200)
xbmc/DbUrl.cpp [new file with mode: 0644]
xbmc/DbUrl.h [new file with mode: 0644]
xbmc/Makefile.in

diff --git a/xbmc/DbUrl.cpp b/xbmc/DbUrl.cpp
new file mode 100644 (file)
index 0000000..51a94e4
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ *      Copyright (C) 2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sstream>
+
+#include "DbUrl.h"
+#include "utils/StringUtils.h"
+#include "utils/URIUtils.h"
+
+using namespace std;
+
+CDbUrl::CDbUrl()
+{
+  Reset();
+}
+
+CDbUrl::~CDbUrl()
+{ }
+
+void CDbUrl::Reset()
+{
+  m_valid = false;
+  m_type.clear();
+  m_url.Reset();
+  m_options.clear();
+}
+
+std::string CDbUrl::ToString() const
+{
+  if (!m_valid)
+    return "";
+
+  return m_url.Get();
+}
+
+bool CDbUrl::FromString(const std::string &dbUrl)
+{
+  Reset();
+
+  m_url.Parse(dbUrl);
+  m_valid = parse();
+
+  if (!m_valid)
+    Reset();
+
+  return m_valid;
+}
+
+void CDbUrl::AppendPath(const std::string &subPath)
+{
+  if (!m_valid || subPath.empty())
+    return;
+
+  m_url.SetFileName(URIUtils::AddFileToFolder(m_url.GetFileName(), subPath));
+}
+
+void CDbUrl::updateOptions()
+{
+  // Update the options string in the CURL object
+  string options = GetOptionsString();
+  if (!options.empty())
+    options = "?" + options;
+
+  m_url.SetOptions(options);
+}
diff --git a/xbmc/DbUrl.h b/xbmc/DbUrl.h
new file mode 100644 (file)
index 0000000..4a70e59
--- /dev/null
@@ -0,0 +1,59 @@
+#pragma once
+/*
+ *      Copyright (C) 2012 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <map>
+#include <string>
+
+#include "URL.h"
+#include "utils/UrlOptions.h"
+
+class CDbUrl : public CUrlOptions
+{
+public:
+  CDbUrl();
+  virtual ~CDbUrl();
+
+  bool IsValid() const { return m_valid; }
+  void Reset();
+
+  std::string ToString() const;
+  bool FromString(const std::string &dbUrl);
+
+  const std::string& GetType() const { return m_type; }
+  void AppendPath(const std::string &subPath);
+
+  virtual void AddOption(const std::string &key, const std::string &value) { CUrlOptions::AddOption(key, value); updateOptions(); }
+  virtual void AddOption(const std::string &key, int value) { CUrlOptions::AddOption(key, value); updateOptions(); }
+  virtual void AddOption(const std::string &key, float value) { CUrlOptions::AddOption(key, value); updateOptions(); }
+  virtual void AddOption(const std::string &key, double value) { CUrlOptions::AddOption(key, value); updateOptions(); }
+  virtual void AddOption(const std::string &key, bool value) { CUrlOptions::AddOption(key, value); updateOptions(); }
+  virtual void AddOptions(const std::string &options) { CUrlOptions::AddOptions(options); updateOptions(); }
+
+protected:
+  virtual bool parse() = 0;
+  
+  CURL m_url;
+  std::string m_type;
+
+private:
+  void updateOptions();
+
+  bool m_valid;
+};
index 4db5f0d..f0d2bae 100644 (file)
@@ -5,6 +5,7 @@ SRCS=Application.cpp \
      BackgroundInfoLoader.cpp \
      CueDocument.cpp \
      DatabaseManager.cpp \
+     DbUrl.cpp \
      DynamicDll.cpp \
      Favourites.cpp \
      FileItem.cpp \