mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-11 09:27: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:http/http.dart' as http;
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
|
import 'package:spotube/models/spotify_friends.dart';
|
||||||
|
|
||||||
class CustomSpotifyEndpoints {
|
class CustomSpotifyEndpoints {
|
||||||
static const _baseUrl = 'https://api.spotify.com/v1';
|
static const _baseUrl = 'https://api.spotify.com/v1';
|
||||||
@ -162,4 +163,17 @@ class CustomSpotifyEndpoints {
|
|||||||
result["tracks"].map((track) => Track.fromJson(track)).toList(),
|
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