Skip to content

Commit

Permalink
Добавлен тип Notification для сообщения ленты
Browse files Browse the repository at this point in the history
  • Loading branch information
K1llMan committed Jan 29, 2023
1 parent 450cf41 commit 0d78826
Show file tree
Hide file tree
Showing 11 changed files with 93 additions and 75 deletions.
11 changes: 7 additions & 4 deletions src/Yandex.Music.Api/Common/Debug/DebugSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,14 @@ public T Deserialize<T>(string url, string json, JsonSerializerSettings settings
{
Dictionary<string, List<string>> errors = new();

settings.Error = (sender, args) =>
{
settings.Error = (sender, args) => {
int pos = args.ErrorContext.Error.Message.IndexOf("Path", StringComparison.Ordinal);
string error = args.ErrorContext.Error.Message.Substring(0, pos);
string path = args.ErrorContext.Error.Message.Substring(pos);
string error = pos > 0
? args.ErrorContext.Error.Message.Substring(0, pos)
: args.ErrorContext.Error.Message;
string path = pos > 0
? args.ErrorContext.Error.Message.Substring(pos)
: args.ErrorContext.Path;
if (!errors.ContainsKey(error))
errors[error] = new List<string>();
Expand Down
126 changes: 61 additions & 65 deletions src/Yandex.Music.Api/Models/Feed/Event/YFeedEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,79 +9,77 @@ namespace Yandex.Music.Api.Models.Feed.Event
{
public sealed class YFeedEventConverter : JsonConverter
{
private YFeedEvent GetEvent(JToken jObject)
private YFeedEventTitled GetEvent(JToken jObject)
{
YFeedEvent feedEvent;
YFeedEventTitled feedEvent;

try
{
YFeedEventType type = jObject["typeForFrom"].ToObject<YFeedEventType>();

switch (type)
{
case YFeedEventType.GenreTop:
feedEvent = jObject.ToObject<YFeedEventGenreTracksTop>();
break;

case YFeedEventType.NewAlbums:
feedEvent = jObject.ToObject<YFeedEventAlbums>();
break;

case YFeedEventType.NewAlbumsOfFavoriteGenre:
feedEvent = jObject.ToObject<YFeedEventGenreAlbums>();
break;

case YFeedEventType.RecentTrackLikeToTracks:
feedEvent = jObject.ToObject<YFeedEventLikeTrack>();
break;

case YFeedEventType.RecommendedArtistsWithArtistsFromHistory:
feedEvent = jObject.ToObject<YFeedEventArtistWithArtists>();
break;

case YFeedEventType.RecommendedSimilarArtists:
feedEvent = jObject.ToObject<YFeedEventSimilarArtists>();
break;

case YFeedEventType.RecommendedSimilarGenre:
feedEvent = jObject.ToObject<YFeedEventSimilarGenre>();
break;

case YFeedEventType.MissedTracksByArtist:
case YFeedEventType.RareArtist:
case YFeedEventType.RecommendedTracksByArtistFromHistory:
feedEvent = jObject.ToObject<YFeedEventArtist>();
break;

case YFeedEventType.NewTracksOfFavoriteGenre:
case YFeedEventType.TracksByGenre:
feedEvent = jObject.ToObject<YFeedEventGenreTracks>();
break;

case YFeedEventType.WellForgottenOldArtists:
feedEvent = jObject.ToObject<YFeedEventArtists>();
break;

case YFeedEventType.WellForgottenOldTracks:
feedEvent = jObject.ToObject<YFeedEventTracks>();
break;

default:
feedEvent = jObject.ToObject<YFeedEvent>();
break;
}
}
catch (Exception ex)
YFeedEventType type = jObject[jObject["typeForFrom"] != null ? "typeForFrom" : "type"]
.ToObject<YFeedEventType>();

switch (type)
{
throw new Exception($"Ошибка десериализации типа \"{jObject["typeForFrom"]}\".", ex);
case YFeedEventType.GenreTop:
feedEvent = jObject.ToObject<YFeedEventGenreTracksTop>();
break;

case YFeedEventType.NewAlbums:
feedEvent = jObject.ToObject<YFeedEventAlbums>();
break;

case YFeedEventType.NewAlbumsOfFavoriteGenre:
feedEvent = jObject.ToObject<YFeedEventGenreAlbums>();
break;

case YFeedEventType.Notification:
feedEvent = jObject.ToObject<YFeedEventNotification>();
break;

case YFeedEventType.RecentTrackLikeToTracks:
feedEvent = jObject.ToObject<YFeedEventLikeTrack>();
break;

case YFeedEventType.RecommendedArtistsWithArtistsFromHistory:
feedEvent = jObject.ToObject<YFeedEventArtistWithArtists>();
break;

case YFeedEventType.RecommendedSimilarArtists:
feedEvent = jObject.ToObject<YFeedEventSimilarArtists>();
break;

case YFeedEventType.RecommendedSimilarGenre:
feedEvent = jObject.ToObject<YFeedEventSimilarGenre>();
break;

case YFeedEventType.MissedTracksByArtist:
case YFeedEventType.RareArtist:
case YFeedEventType.RecommendedTracksByArtistFromHistory:
feedEvent = jObject.ToObject<YFeedEventArtist>();
break;

case YFeedEventType.NewTracksOfFavoriteGenre:
case YFeedEventType.TracksByGenre:
feedEvent = jObject.ToObject<YFeedEventGenreTracks>();
break;

case YFeedEventType.WellForgottenOldArtists:
feedEvent = jObject.ToObject<YFeedEventArtists>();
break;

case YFeedEventType.WellForgottenOldTracks:
feedEvent = jObject.ToObject<YFeedEventTracks>();
break;

default:
feedEvent = jObject.ToObject<YFeedEventTitled>();
break;
}

return feedEvent;
}

public override bool CanConvert(Type objectType)
{
return typeof(YFeedEvent).IsAssignableFrom(objectType);
return typeof(YFeedEventTitled).IsAssignableFrom(objectType);
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
Expand All @@ -103,8 +101,6 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
public class YFeedEvent
{
public string Id { get; set; }
public List<YFeedEventTitle> Title { get; set; }
public YFeedEventType TypeForFrom { get; set; }
public YFeedEventType Type { get; set; }
}
}
2 changes: 1 addition & 1 deletion src/Yandex.Music.Api/Models/Feed/Event/YFeedEventAlbums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Yandex.Music.Api.Models.Feed.Event
{
public class YFeedEventAlbums: YFeedEvent
public class YFeedEventAlbums: YFeedEventTitled
{
public List<YAlbum> Albums { get; set; }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Yandex.Music.Api.Models.Feed.Event
{
public class YFeedEventArtistWithArtists: YFeedEvent
public class YFeedEventArtistWithArtists: YFeedEventTitled
{
public List<YArtistsFromHistory> ArtistsWithArtistsFromHistory { get; set; }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Yandex.Music.Api.Models.Feed.Event
{
public class YFeedEventArtists: YFeedEvent
public class YFeedEventArtists: YFeedEventTitled
{
public List<YArtist> Artists { get; set; }
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace Yandex.Music.Api.Models.Feed.Event
{
public class YFeedEventNotification : YFeedEventTitled
{
public string Message { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Yandex.Music.Api.Models.Feed.Event
{
public class YFeedEventSimilarArtists: YFeedEvent
public class YFeedEventSimilarArtists: YFeedEventTitled
{
public YArtist SimilarToArtist { get; set; }
public List<YArtist> SimilarArtists { get; set; }
Expand Down
10 changes: 10 additions & 0 deletions src/Yandex.Music.Api/Models/Feed/Event/YFeedEventTitled.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using System.Collections.Generic;

namespace Yandex.Music.Api.Models.Feed.Event
{
public class YFeedEventTitled: YFeedEvent
{
public List<YFeedEventTitle> Title { get; set; }
public YFeedEventType TypeForFrom { get; set; }
}
}
2 changes: 1 addition & 1 deletion src/Yandex.Music.Api/Models/Feed/Event/YFeedEventTracks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Yandex.Music.Api.Models.Feed.Event
{
public class YFeedEventTracks: YFeedEvent
public class YFeedEventTracks: YFeedEventTitled
{
public List<YTrack> Tracks { get; set; }
}
Expand Down
2 changes: 2 additions & 0 deletions src/Yandex.Music.Api/Models/Feed/Event/YFeedEventType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public enum YFeedEventType
[EnumMember(Value = "new-tracks-of-favorite-genre")]
NewTracksOfFavoriteGenre,

Notification,

[EnumMember(Value = "rare-artist")]
RareArtist,

Expand Down
2 changes: 1 addition & 1 deletion src/Yandex.Music.Api/Models/Feed/YFeedDay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class YFeedDay
{
public DateTime Day { get; set; }
[JsonConverter(typeof(YFeedEventConverter))]
public List<YFeedEvent> Events { get; set; }
public List<YFeedEventTitled> Events { get; set; }
public List<YTrack> TracksToPlay { get; set; }
public List<YFeedDayTrackWithAds> TracksToPlayWithAds { get; set; }
}
Expand Down

0 comments on commit 0d78826

Please sign in to comment.