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.
9 #include "MusicDatabaseFile.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)
25 std::string
CMusicDatabaseFile::TranslateUrl(const CURL
& url
)
27 CMusicDatabase musicDatabase
;
28 if (!musicDatabase
.Open())
31 std::string strFileName
=URIUtils::GetFileName(url
.Get());
32 std::string strExtension
= URIUtils::GetExtension(strFileName
);
33 URIUtils::RemoveExtension(strFileName
);
35 if (!StringUtils::IsNaturalNumber(strFileName
))
38 int idSong
= atoi(strFileName
.c_str());
41 if (!musicDatabase
.GetSong(idSong
, song
))
44 StringUtils::ToLower(strExtension
);
45 if (!URIUtils::HasExtension(song
.strFileName
, strExtension
))
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()
81 int64_t CMusicDatabaseFile::GetPosition()
83 return m_file
.GetPosition();
86 int64_t CMusicDatabaseFile::GetLength()
88 return m_file
.GetLength();