diff options
Diffstat (limited to 'xbmc/filesystem/MusicDatabaseFile.cpp')
-rw-r--r-- | xbmc/filesystem/MusicDatabaseFile.cpp | 90 |
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(); +} + |