-
-
Notifications
You must be signed in to change notification settings - Fork 220
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Сервис для обработки вложений с возможностью расширения (#1555)
Co-authored-by: Sem <9l@tut.by> Co-authored-by: inyutin-maxim <inyutin_maxim@mail.ru>
- Loading branch information
1 parent
9dda1f9
commit 5f5b83f
Showing
2 changed files
with
105 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
using Newtonsoft.Json.Linq; | ||
using VkNet.Model; | ||
|
||
namespace VkNet.Utils | ||
{ | ||
/// <summary> | ||
/// Сервис для обработки вложений | ||
/// </summary> | ||
public class AttachmentConverterService | ||
{ | ||
/// <summary> | ||
/// Инстанция сервиса. | ||
/// Может быть переопределена кастомной реализацией | ||
/// </summary> | ||
public static AttachmentConverterService Instance { get; set; } = new AttachmentConverterService(); | ||
|
||
/// <summary> | ||
/// Десериализация из json | ||
/// </summary> | ||
public virtual Attachment FromJson(JToken item) | ||
{ | ||
var type = item["type"].ToString(); | ||
|
||
var typeToken = item[type]; | ||
|
||
var attachment = type switch | ||
{ | ||
"link" => CreateTyped(typeToken | ||
.ToObject<Link>()), | ||
"photo" or "posted_photo" => CreateTyped(typeToken | ||
.ToObject<Photo>()), | ||
"audio" => CreateTyped(typeToken | ||
.ToObject<Audio>()), | ||
"video" => CreateTyped(typeToken | ||
.ToObject<Video>()), | ||
"doc" => CreateTyped(typeToken | ||
.ToObject<Document>()), | ||
"podcast" => CreateTyped(typeToken | ||
.ToObject<Podcast>()), | ||
"article" => CreateTyped(typeToken | ||
.ToObject<Article>()), | ||
"event" => CreateTyped(typeToken | ||
.ToObject<Event>()), | ||
"graffiti" => CreateTyped(typeToken | ||
.ToObject<Graffiti>()), | ||
"money_transfer" => CreateTyped(typeToken | ||
.ToObject<MoneyTransfer>()), | ||
"money_request" => CreateTyped(typeToken | ||
.ToObject<MoneyRequest>()), | ||
"note" => CreateTyped(typeToken | ||
.ToObject<Note>()), | ||
"poll" => CreateTyped(typeToken | ||
.ToObject<Poll>()), | ||
"page" => CreateTyped(typeToken | ||
.ToObject<Page>()), | ||
"album" => CreateTyped(typeToken | ||
.ToObject<Album>()), | ||
"photos_list" => CreateTyped(typeToken | ||
.ToObject<PhotosList>()), | ||
Check warning on line 59 in VkNet/Utils/AttachmentConverterService.cs GitHub Actions / build
|
||
"wall" => CreateTyped(typeToken | ||
.ToObject<Wall>()), | ||
"sticker" => CreateTyped(typeToken | ||
.ToObject<Sticker>()), | ||
"wall_reply" => CreateTyped(typeToken | ||
.ToObject<WallReply>()), | ||
"market_album" => CreateTyped(typeToken | ||
.ToObject<MarketAlbum>()), | ||
"market" => CreateTyped(typeToken | ||
.ToObject<Market>()), | ||
"pretty_cards" => CreateTyped(typeToken | ||
.ToObject<PrettyCards>()), | ||
"audio_message" => CreateTyped(typeToken | ||
.ToObject<AudioMessage>()), | ||
"call" => CreateTyped(typeToken | ||
.ToObject<Call>()), | ||
"story" => CreateTyped(typeToken | ||
.ToObject<Story>()), | ||
"audio_playlist" => CreateTyped(typeToken | ||
.ToObject<AudioPlaylist>()), | ||
var _ => CreateTyped(typeToken | ||
.ToObject<UnknownAttachment>()) | ||
}; | ||
|
||
return attachment; | ||
} | ||
|
||
/// <summary> | ||
/// Создает экземпляр Attachment | ||
/// </summary> | ||
protected virtual Attachment CreateTyped<TAttachment>(TAttachment instance) | ||
where TAttachment : MediaAttachment | ||
{ | ||
var attachment = new Attachment | ||
{ | ||
Type = typeof(TAttachment), | ||
Instance = instance | ||
}; | ||
|
||
return attachment; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters