summaryrefslogtreecommitdiffstats
path: root/xbmc/filesystem/MusicDatabaseFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/filesystem/MusicDatabaseFile.cpp')
-rw-r--r--xbmc/filesystem/MusicDatabaseFile.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/xbmc/filesystem/MusicDatabaseFile.cpp b/xbmc/filesystem/MusicDatabaseFile.cpp
new file mode 100644
index 0000000..0e41ad4
--- /dev/null
+++ b/xbmc/filesystem/MusicDatabaseFile.cpp
@@ -0,0 +1,90 @@
+/*
+ * 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.
+ */
+
+#include "MusicDatabaseFile.h"
+
+#include "URL.h"
+#include "music/MusicDatabase.h"
+#include "utils/StringUtils.h"
+#include "utils/URIUtils.h"
+
+using namespace XFILE;
+
+CMusicDatabaseFile::CMusicDatabaseFile(void) = default;
+
+CMusicDatabaseFile::~CMusicDatabaseFile(void)
+{
+ Close();
+}
+
+std::string CMusicDatabaseFile::TranslateUrl(const CURL& url)
+{
+ CMusicDatabase musicDatabase;
+ if (!musicDatabase.Open())
+ return "";
+
+ std::string strFileName=URIUtils::GetFileName(url.Get());
+ std::string strExtension = URIUtils::GetExtension(strFileName);
+ URIUtils::RemoveExtension(strFileName);
+
+ if (!StringUtils::IsNaturalNumber(strFileName))
+ return "";
+
+ int idSong = atoi(strFileName.c_str());
+
+ CSong song;
+ if (!musicDatabase.GetSong(idSong, song))
+ return "";
+
+ StringUtils::ToLower(strExtension);
+ if (!URIUtils::HasExtension(song.strFileName, strExtension))
+ return "";
+
+ return song.strFileName;
+}
+
+bool CMusicDatabaseFile::Open(const CURL& url)
+{
+ return m_file.Open(TranslateUrl(url));
+}
+
+bool CMusicDatabaseFile::Exists(const CURL& url)
+{
+ return !TranslateUrl(url).empty();
+}
+
+int CMusicDatabaseFile::Stat(const CURL& url, struct __stat64* buffer)
+{
+ return m_file.Stat(TranslateUrl(url), buffer);
+}
+
+ssize_t CMusicDatabaseFile::Read(void* lpBuf, size_t uiBufSize)
+{
+ return m_file.Read(lpBuf, uiBufSize);
+}
+
+int64_t CMusicDatabaseFile::Seek(int64_t iFilePosition, int iWhence /*=SEEK_SET*/)
+{
+ return m_file.Seek(iFilePosition, iWhence);
+}
+
+void CMusicDatabaseFile::Close()
+{
+ m_file.Close();
+}
+
+int64_t CMusicDatabaseFile::GetPosition()
+{
+ return m_file.GetPosition();
+}
+
+int64_t CMusicDatabaseFile::GetLength()
+{
+ return m_file.GetLength();
+}
+