Merge pull request #25808 from CastagnaIT/fix_url_parse
[xbmc.git] / xbmc / filesystem / MusicDatabaseFile.cpp
blob0e41ad4835cfc5c59731e3c7a920671f3a0a4176
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "MusicDatabaseFile.h"
11 #include "URL.h"
12 #include "music/MusicDatabase.h"
13 #include "utils/StringUtils.h"
14 #include "utils/URIUtils.h"
16 using namespace XFILE;
18 CMusicDatabaseFile::CMusicDatabaseFile(void) = default;
20 CMusicDatabaseFile::~CMusicDatabaseFile(void)
22 Close();
25 std::string CMusicDatabaseFile::TranslateUrl(const CURL& url)
27 CMusicDatabase musicDatabase;
28 if (!musicDatabase.Open())
29 return "";
31 std::string strFileName=URIUtils::GetFileName(url.Get());
32 std::string strExtension = URIUtils::GetExtension(strFileName);
33 URIUtils::RemoveExtension(strFileName);
35 if (!StringUtils::IsNaturalNumber(strFileName))
36 return "";
38 int idSong = atoi(strFileName.c_str());
40 CSong song;
41 if (!musicDatabase.GetSong(idSong, song))
42 return "";
44 StringUtils::ToLower(strExtension);
45 if (!URIUtils::HasExtension(song.strFileName, strExtension))
46 return "";
48 return song.strFileName;
51 bool CMusicDatabaseFile::Open(const CURL& url)
53 return m_file.Open(TranslateUrl(url));
56 bool CMusicDatabaseFile::Exists(const CURL& url)
58 return !TranslateUrl(url).empty();
61 int CMusicDatabaseFile::Stat(const CURL& url, struct __stat64* buffer)
63 return m_file.Stat(TranslateUrl(url), buffer);
66 ssize_t CMusicDatabaseFile::Read(void* lpBuf, size_t uiBufSize)
68 return m_file.Read(lpBuf, uiBufSize);
71 int64_t CMusicDatabaseFile::Seek(int64_t iFilePosition, int iWhence /*=SEEK_SET*/)
73 return m_file.Seek(iFilePosition, iWhence);
76 void CMusicDatabaseFile::Close()
78 m_file.Close();
81 int64_t CMusicDatabaseFile::GetPosition()
83 return m_file.GetPosition();
86 int64_t CMusicDatabaseFile::GetLength()
88 return m_file.GetLength();