feat: add spotify friend endpoint

This commit is contained in:
Kingkor Roy Tirtho 2024-01-05 21:10:08 +06:00
parent 5509cae91c
commit df8ee98850
3 changed files with 179 additions and 0 deletions

View File

@ -0,0 +1,100 @@
import 'package:json_annotation/json_annotation.dart';
part 'spotify_friends.g.dart';
@JsonSerializable(createToJson: false)
class SpotifyFriend {
final String uri;
final String name;
final String imageUrl;
const SpotifyFriend({
required this.uri,
required this.name,
required this.imageUrl,
});
factory SpotifyFriend.fromJson(Map<String, dynamic> json) =>
_$SpotifyFriendFromJson(json);
}
@JsonSerializable(createToJson: false)
class SpotifyActivityArtist {
final String uri;
final String name;
const SpotifyActivityArtist({required this.uri, required this.name});
factory SpotifyActivityArtist.fromJson(Map<String, dynamic> json) =>
_$SpotifyActivityArtistFromJson(json);
}
@JsonSerializable(createToJson: false)
class SpotifyActivityAlbum {
final String uri;
final String name;
const SpotifyActivityAlbum({required this.uri, required this.name});
factory SpotifyActivityAlbum.fromJson(Map<String, dynamic> json) =>
_$SpotifyActivityAlbumFromJson(json);
}
@JsonSerializable(createToJson: false)
class SpotifyActivityContext {
final String uri;
final String name;
final num index;
const SpotifyActivityContext({
required this.uri,
required this.name,
required this.index,
});
factory SpotifyActivityContext.fromJson(Map<String, dynamic> json) =>
_$SpotifyActivityContextFromJson(json);
}
@JsonSerializable(createToJson: false)
class SpotifyActivityTrack {
final String uri;
final String name;
final String imageUrl;
final SpotifyActivityArtist artist;
final SpotifyActivityAlbum album;
final SpotifyActivityContext context;
const SpotifyActivityTrack({
required this.uri,
required this.name,
required this.imageUrl,
required this.artist,
required this.album,
required this.context,
});
factory SpotifyActivityTrack.fromJson(Map<String, dynamic> json) =>
_$SpotifyActivityTrackFromJson(json);
}
@JsonSerializable(createToJson: false)
class SpotifyFriendActivity {
SpotifyFriend user;
SpotifyActivityTrack track;
SpotifyFriendActivity({required this.user, required this.track});
factory SpotifyFriendActivity.fromJson(Map<String, dynamic> json) =>
_$SpotifyFriendActivityFromJson(json);
}
@JsonSerializable(createToJson: false)
class SpotifyFriends {
List<SpotifyFriendActivity> friends;
SpotifyFriends({required this.friends});
factory SpotifyFriends.fromJson(Map<String, dynamic> json) =>
_$SpotifyFriendsFromJson(json);
}

View File

@ -0,0 +1,65 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'spotify_friends.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
SpotifyFriend _$SpotifyFriendFromJson(Map<String, dynamic> json) =>
SpotifyFriend(
uri: json['uri'] as String,
name: json['name'] as String,
imageUrl: json['imageUrl'] as String,
);
SpotifyActivityArtist _$SpotifyActivityArtistFromJson(
Map<String, dynamic> json) =>
SpotifyActivityArtist(
uri: json['uri'] as String,
name: json['name'] as String,
);
SpotifyActivityAlbum _$SpotifyActivityAlbumFromJson(
Map<String, dynamic> json) =>
SpotifyActivityAlbum(
uri: json['uri'] as String,
name: json['name'] as String,
);
SpotifyActivityContext _$SpotifyActivityContextFromJson(
Map<String, dynamic> json) =>
SpotifyActivityContext(
uri: json['uri'] as String,
name: json['name'] as String,
index: json['index'] as num,
);
SpotifyActivityTrack _$SpotifyActivityTrackFromJson(
Map<String, dynamic> json) =>
SpotifyActivityTrack(
uri: json['uri'] as String,
name: json['name'] as String,
imageUrl: json['imageUrl'] as String,
artist: SpotifyActivityArtist.fromJson(
json['artist'] as Map<String, dynamic>),
album:
SpotifyActivityAlbum.fromJson(json['album'] as Map<String, dynamic>),
context: SpotifyActivityContext.fromJson(
json['context'] as Map<String, dynamic>),
);
SpotifyFriendActivity _$SpotifyFriendActivityFromJson(
Map<String, dynamic> json) =>
SpotifyFriendActivity(
user: SpotifyFriend.fromJson(json['user'] as Map<String, dynamic>),
track:
SpotifyActivityTrack.fromJson(json['track'] as Map<String, dynamic>),
);
SpotifyFriends _$SpotifyFriendsFromJson(Map<String, dynamic> json) =>
SpotifyFriends(
friends: (json['friends'] as List<dynamic>)
.map((e) => SpotifyFriendActivity.fromJson(e as Map<String, dynamic>))
.toList(),
);

View File

@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:spotify/spotify.dart';
import 'package:spotube/models/spotify_friends.dart';
class CustomSpotifyEndpoints {
static const _baseUrl = 'https://api.spotify.com/v1';
@ -162,4 +163,17 @@ class CustomSpotifyEndpoints {
result["tracks"].map((track) => Track.fromJson(track)).toList(),
);
}
Future<SpotifyFriends> getFriendActivity() async {
final res = await _client.get(
Uri.parse("https://guc-spclient.spotify.com/presence-view/v1/buddylist"),
headers: {
"content-type": "application/json",
"authorization": "Bearer $accessToken",
"accept": "application/json",
},
);
return SpotifyFriends.fromJson(jsonDecode(res.body));
}
}