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 28 namespace 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