TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicsonghelper.cpp
Go to the documentation of this file.
1 #include "musicsonghelper.h"
2 #include "musicresultinfo.h"
3 #include "musicsongmeta.h"
4 #include "musicformats.h"
5 #include "ttktime.h"
6 
7 #include <qmmp/trackinfo.h>
8 
9 bool TTK::playlistRowValid(int index) noexcept
10 {
11  return index != MUSIC_LOVEST_LIST && index != MUSIC_NETWORK_LIST && index != MUSIC_RECENT_LIST;
12 }
13 
14 QString TTK::trackRelatedPath(const QString &path)
15 {
16  return MusicFormats::isTrack(path) ? TrackInfo::pathFromUrl(path) : path;
17 }
18 
19 QString TTK::generateSongName(const QString &title, const QString &artist) noexcept
20 {
21  return (title.isEmpty() || artist.isEmpty()) ? artist + title : artist + " - " + title;
22 }
23 
24 QString TTK::generateSongTitle(const QString &name, const QString &key)
25 {
26  const QStringList &s = TTK::String::split(name);
27  if(s.count() >= 2)
28  {
29  const int index = name.indexOf(key) + 1;
30  return name.right(name.length() - index).trimmed();
31  }
32  return name;
33 }
34 
35 QString TTK::generateSongArtist(const QString &name, const QString &key)
36 {
37  const QStringList &s = TTK::String::split(name);
38  if(s.count() >= 2)
39  {
40  const int index = name.indexOf(key);
41  return name.left(index).trimmed();
42  }
43  return name;
44 }
45 
46 QString TTK::generateNetworkSongTime(const QString &path, bool format)
47 {
48  const QString &v = TTK::generateNetworkSongMetaPath(path);
49  if(!QFile::exists(v))
50  {
51  MusicSongMeta meta;
52  return meta.read(TTK::generateNetworkSongPath(path)) ? meta.duration() : TTK_DEFAULT_STR;
53  }
54 
55  QFile file(v);
56  if(file.open(QIODevice::ReadOnly))
57  {
58  const QString &data = file.readAll();
59  file.close();
60 
61  const QStringList &datas = data.split(",");
62  if(datas.count() >= 6)
63  {
64  // id, name, duration, format, size, url
65  const QString &v = datas[2];
66  return format ? v : QString::number(TTKTime::formatDuration(v));
67  }
68  }
69  return TTK_DEFAULT_STR;
70 }
71 
72 QString TTK::generateNetworkSongPath(const QString &path)
73 {
74  QString v = path;
76  {
77  /*Replace network url path to local path*/
78  const QString &id = path.section("#", -1);
79  if(id != path)
80  {
81  const QString &cachePath = CACHE_DIR_FULL + id;
82  if(QFile::exists(cachePath))
83  {
84  v = cachePath;
85  }
86  }
87  }
88  return v;
89 }
90 
91 QString TTK::generateNetworkSongMetaPath(const QString &path)
92 {
93  QString v = path;
95  {
96  /*Replace network url path to local path*/
97  const QString &id = path.section("#", -1);
98  if(id != path)
99  {
100  const QString &cachePath = CACHE_DIR_FULL + TTK::String::pefix(id) + TKB_FILE;
101  if(QFile::exists(cachePath))
102  {
103  v = cachePath;
104  }
105  }
106  }
107  return v;
108 }
109 
110 void TTK::generateNetworkSongMeta(const QString &id, const MusicResultDataItem &item)
111 {
112  QFile file(QString("%1%2%3").arg(CACHE_DIR_FULL, id, TKB_FILE));
113  if(file.open(QIODevice::WriteOnly))
114  {
115  QStringList datas;
116  // id, name, duration, format, size, url
117  datas << item.m_id << item.m_name << item.m_time << item.m_description << item.m_count << item.m_nickName;
118 
119  file.write(datas.join(",").toUtf8());
120  file.close();
121  }
122 }
bool read(const QString &url)
TTK_MODULE_EXPORT QString generateSongArtist(const QString &name, const QString &key=TTK_DEFAULT_STR)
The class of the search result data item.
#define CACHE_DIR_FULL
Definition: musicobject.h:149
TTK_MODULE_EXPORT void generateNetworkSongMeta(const QString &id, const MusicResultDataItem &item)
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:276
TTK_MODULE_EXPORT QString trackRelatedPath(const QString &path)
TTK_MODULE_EXPORT QString generateNetworkSongTime(const QString &path, bool format)
static bool isTrack(const QString &url) noexcept
Definition: musicformats.cpp:5
#define MUSIC_RECENT_LIST
TTK_MODULE_EXPORT QString generateSongTitle(const QString &name, const QString &key=TTK_DEFAULT_STR)
#define TKB_FILE
Definition: musicobject.h:68
TTK_MODULE_EXPORT QString generateNetworkSongMetaPath(const QString &path)
TTK_MODULE_EXPORT QString pefix(const QString &name)
TTK_MODULE_EXPORT QString generateNetworkSongPath(const QString &path)
const char * name
Definition: http_parser.c:458
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path) noexcept
TTK_MODULE_EXPORT bool playlistRowValid(int index) noexcept
static constexpr wchar_t key[]
TTK_MODULE_EXPORT QStringList split(const QString &value, const QString &key=TTK_DEFAULT_STR)
QString duration() noexcept
static QString pathFromUrl(const QString &url, int *track=nullptr)
#define MUSIC_NETWORK_LIST
#define MUSIC_LOVEST_LIST
The class of the music song meta.
Definition: musicsongmeta.h:30
TTK_MODULE_EXPORT QString generateSongName(const QString &title, const QString &artist) noexcept
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123