mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-10 17:07:30 +00:00
feat: add spotify friend endpoint
This commit is contained in:
parent
5509cae91c
commit
df8ee98850
100
lib/models/spotify_friends.dart
Normal file
100
lib/models/spotify_friends.dart
Normal 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);
|
||||
}
|
||||
65
lib/models/spotify_friends.g.dart
Normal file
65
lib/models/spotify_friends.g.dart
Normal 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(),
|
||||
);
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user