1/*
2 Copyright 2009-2010 Last.fm Ltd.
3 - Primarily authored by Max Howell, Jono Cole, Doug Mansell and Michael Coffey
4
5 This file is part of liblastfm.
6
7 liblastfm is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 liblastfm is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with liblastfm. If not, see <http://www.gnu.org/licenses/>.
19*/
20#ifndef LASTFM_USER_H
21#define LASTFM_USER_H
22
23#include <QStringList>
24
25#include "AbstractType.h"
26#include "ws.h"
27
28namespace lastfm
29{
30 class UserList;
31 class XmlQuery;
32 class Artist;
33
34 class LASTFM_DLLEXPORT Gender
35 {
36
37 public:
38 Gender();
39 Gender( const Gender& gender );
40 Gender( const QString& ss );
41 ~Gender();
42
43 bool known() const;
44 bool male() const;
45 bool female() const;
46
47 QString toString() const;
48 lastfm::Gender& operator=( const lastfm::Gender& that );
49
50 private:
51 class GenderPrivate;
52 GenderPrivate * const d;
53 };
54
55 class LASTFM_DLLEXPORT User : public AbstractType
56 {
57 public:
58 enum Type
59 {
60 TypeUser,
61 TypeSubscriber,
62 TypeModerator,
63 TypeStaff,
64 TypeAlumni
65 };
66
67 public:
68 User();
69 User( const QString& name );
70 User( const XmlQuery& xml );
71 User( const User& user );
72 ~User();
73
74 lastfm::User& operator=( const lastfm::User& that );
75 bool operator==(const lastfm::User& that) const;
76 bool operator<(const lastfm::User& that) const;
77
78 operator QString() const;
79
80 QString name() const;
81 void setName( const QString& name );
82
83 Type type() const;
84 void setType( Type type );
85
86 bool isSubscriber() const;
87 void setIsSubscriber( bool subscriber );
88
89 bool canBootstrap() const;
90 void setCanBootstrap( bool canBootstrap );
91
92 quint32 scrobbleCount() const;
93 void setScrobbleCount( quint32 scrobblesCount );
94
95 QDateTime dateRegistered() const;
96 void setDateRegistered( const QDateTime& date );
97
98 Gender gender() const;
99 QString country() const;
100
101 QString realName() const;
102 void setRealName( const QString& realName );
103
104 QUrl imageUrl( ImageSize size = LargeImage, bool square = false ) const;
105 void setImages( const QList<QUrl>& images );
106
107 unsigned short age() const;
108 void setAge( unsigned short age );
109
110 void setGender( const QString& s );
111 void setCountry( const QString& country );
112
113 /** use Tag::list() on the response to get a WeightedStringList */
114 QNetworkReply* getTopTags() const;
115
116 /** use User::list() on the response to get a UserList */
117 QNetworkReply* getFriends( bool recentTracks = false, int limit = 50, int page = 1 ) const;
118 QNetworkReply* getFriendsListeningNow( int limit = 50, int page = 1 ) const;
119 QNetworkReply* getFriendsThatListenTo( const lastfm::Artist& artist, int limit = 50, int page = 1 ) const;
120 QNetworkReply* getNeighbours( int limit = 50, int page = 1 ) const;
121
122 QNetworkReply* getLovedTracks( int limit = 50, int page = 1 ) const;
123 QNetworkReply* getPlaylists() const;
124 QNetworkReply* getTopArtists( QString period = "overall", int limit = 50, int page = 1 ) const;
125 QNetworkReply* getRecentTracks( int limit = 50, int page = 1 ) const;
126 QNetworkReply* getRecentArtists() const;
127 QNetworkReply* getRecentStations( int limit = 10, int page = 1 ) const;
128 QNetworkReply* getRecommendedArtists( int limit = 50, int page = 1 ) const;
129
130 /** you can only get information about the any user */
131 static QNetworkReply* getInfo( const QString& username = lastfm::ws::Username );
132
133 /** a verbose string, eg. "A man with 36,153 scrobbles" */
134 QString getInfoString() const;
135
136 static UserList list( QNetworkReply* );
137
138 QString toString() const;
139 QDomElement toDomElement( QDomDocument& ) const;
140
141 /** the user's profile page at www.last.fm */
142 QUrl www() const;
143
144 /** Returns the match between the logged in user and the user which this
145 * object represents (if < 0.0f then not set) */
146 float match() const;
147
148 protected:
149 QMap<QString, QString> params( const QString& method ) const;
150
151 protected:
152 class UserPrivate;
153 UserPrivate * const d;
154 };
155
156 class LASTFM_DLLEXPORT UserList
157 {
158 public:
159 UserList();
160 UserList( const XmlQuery& query );
161 UserList( const UserList& other );
162 ~UserList();
163 UserList& operator=( const UserList& other );
164
165 int totalUsers();
166 int totalPages();
167 int currentPage();
168 int usersPerPage();
169 QList<User> users();
170
171 private:
172 class UserListPrivate * const d;
173 };
174}
175
176#endif
177