diff --git a/OF DL/Models/Dtos/Lists/AvatarThumbsDto.cs b/OF DL/Models/Dtos/Common/AvatarThumbsDto.cs similarity index 84% rename from OF DL/Models/Dtos/Lists/AvatarThumbsDto.cs rename to OF DL/Models/Dtos/Common/AvatarThumbsDto.cs index 62ece7c..ab37032 100644 --- a/OF DL/Models/Dtos/Lists/AvatarThumbsDto.cs +++ b/OF DL/Models/Dtos/Common/AvatarThumbsDto.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace OF_DL.Models.Dtos.Lists; +namespace OF_DL.Models.Dtos.Common; public class AvatarThumbsDto { diff --git a/OF DL/Models/Dtos/Common/HeaderSizeDto.cs b/OF DL/Models/Dtos/Common/HeaderSizeDto.cs new file mode 100644 index 0000000..3e09784 --- /dev/null +++ b/OF DL/Models/Dtos/Common/HeaderSizeDto.cs @@ -0,0 +1,10 @@ +using Newtonsoft.Json; + +namespace OF_DL.Models.Dtos.Common; + +public class HeaderSizeDto +{ + [JsonProperty("width")] public int Width { get; set; } + + [JsonProperty("height")] public int Height { get; set; } +} diff --git a/OF DL/Models/Dtos/Common/HeaderThumbsDto.cs b/OF DL/Models/Dtos/Common/HeaderThumbsDto.cs new file mode 100644 index 0000000..9e4b763 --- /dev/null +++ b/OF DL/Models/Dtos/Common/HeaderThumbsDto.cs @@ -0,0 +1,10 @@ +using Newtonsoft.Json; + +namespace OF_DL.Models.Dtos.Common; + +public class HeaderThumbsDto +{ + [JsonProperty("w480")] public string W480 { get; set; } = ""; + + [JsonProperty("w760")] public string W760 { get; set; } = ""; +} diff --git a/OF DL/Models/Dtos/Common/VideoDto.cs b/OF DL/Models/Dtos/Common/VideoDto.cs new file mode 100644 index 0000000..003ea73 --- /dev/null +++ b/OF DL/Models/Dtos/Common/VideoDto.cs @@ -0,0 +1,8 @@ +using Newtonsoft.Json; + +namespace OF_DL.Models.Dtos.Common; + +public class VideoDto +{ + [JsonProperty("mp4")] public string Mp4 { get; set; } = ""; +} diff --git a/OF DL/Models/Dtos/Lists/UsersListDto.cs b/OF DL/Models/Dtos/Lists/UsersListDto.cs index 2154096..3885214 100644 --- a/OF DL/Models/Dtos/Lists/UsersListDto.cs +++ b/OF DL/Models/Dtos/Lists/UsersListDto.cs @@ -1,4 +1,5 @@ using Newtonsoft.Json; +using OF_DL.Models.Dtos.Common; namespace OF_DL.Models.Dtos.Lists; @@ -54,8 +55,7 @@ public class UsersListDto [JsonProperty("subscribePrice")] public string? SubscribePrice { get; set; } - [JsonProperty("subscriptionBundles")] - public List SubscriptionBundles { get; set; } = []; + [JsonProperty("subscriptionBundles")] public List SubscriptionBundles { get; set; } = []; [JsonProperty("displayName")] public string DisplayName { get; set; } = ""; @@ -77,23 +77,29 @@ public class UsersListDto [JsonProperty("subscribedByExpire")] public bool? SubscribedByExpire { get; set; } - [JsonProperty("subscribedByExpireDate")] public DateTime? SubscribedByExpireDate { get; set; } + [JsonProperty("subscribedByExpireDate")] + public DateTime? SubscribedByExpireDate { get; set; } - [JsonProperty("subscribedByAutoprolong")] public bool? SubscribedByAutoprolong { get; set; } + [JsonProperty("subscribedByAutoprolong")] + public bool? SubscribedByAutoprolong { get; set; } - [JsonProperty("subscribedIsExpiredNow")] public bool? SubscribedIsExpiredNow { get; set; } + [JsonProperty("subscribedIsExpiredNow")] + public bool? SubscribedIsExpiredNow { get; set; } - [JsonProperty("currentSubscribePrice")] public string? CurrentSubscribePrice { get; set; } + [JsonProperty("currentSubscribePrice")] + public string? CurrentSubscribePrice { get; set; } [JsonProperty("subscribedOn")] public bool? SubscribedOn { get; set; } - [JsonProperty("subscribedOnExpiredNow")] public bool? SubscribedOnExpiredNow { get; set; } + [JsonProperty("subscribedOnExpiredNow")] + public bool? SubscribedOnExpiredNow { get; set; } [JsonProperty("subscribedOnDuration")] public string SubscribedOnDuration { get; set; } = ""; [JsonProperty("canReport")] public bool? CanReport { get; set; } - [JsonProperty("canReceiveChatMessage")] public bool? CanReceiveChatMessage { get; set; } + [JsonProperty("canReceiveChatMessage")] + public bool? CanReceiveChatMessage { get; set; } [JsonProperty("hideChat")] public bool? HideChat { get; set; } diff --git a/OF DL/Models/Dtos/Messages/FromUserDto.cs b/OF DL/Models/Dtos/Messages/FromUserDto.cs new file mode 100644 index 0000000..999b7f6 --- /dev/null +++ b/OF DL/Models/Dtos/Messages/FromUserDto.cs @@ -0,0 +1,98 @@ +using Newtonsoft.Json; +using OF_DL.Models.Dtos.Common; + +namespace OF_DL.Models.Dtos.Messages; + +public class FromUserDto +{ + [JsonProperty("_view")] public string ViewRaw { get; set; } = ""; + + [JsonProperty("view")] public string View { get; set; } = ""; + + [JsonProperty("avatar")] public string Avatar { get; set; } = ""; + + [JsonProperty("avatarThumbs")] public AvatarThumbsDto AvatarThumbs { get; set; } = new(); + + [JsonProperty("header")] public string Header { get; set; } = ""; + + [JsonProperty("headerSize")] public HeaderSizeDto HeaderSize { get; set; } = new(); + + [JsonProperty("headerThumbs")] public HeaderThumbsDto HeaderThumbs { get; set; } = new(); + + [JsonProperty("id")] public long? Id { get; set; } + + [JsonProperty("name")] public string Name { get; set; } = ""; + + [JsonProperty("username")] public string Username { get; set; } = ""; + + [JsonProperty("canLookStory")] public bool CanLookStory { get; set; } + + [JsonProperty("canCommentStory")] public bool CanCommentStory { get; set; } + + [JsonProperty("hasNotViewedStory")] public bool HasNotViewedStory { get; set; } + + [JsonProperty("isVerified")] public bool IsVerified { get; set; } + + [JsonProperty("canPayInternal")] public bool CanPayInternal { get; set; } + + [JsonProperty("hasScheduledStream")] public bool HasScheduledStream { get; set; } + + [JsonProperty("hasStream")] public bool HasStream { get; set; } + + [JsonProperty("hasStories")] public bool HasStories { get; set; } + + [JsonProperty("tipsEnabled")] public bool TipsEnabled { get; set; } + + [JsonProperty("tipsTextEnabled")] public bool TipsTextEnabled { get; set; } + + [JsonProperty("tipsMin")] public int TipsMin { get; set; } + + [JsonProperty("tipsMinInternal")] public int TipsMinInternal { get; set; } + + [JsonProperty("tipsMax")] public int TipsMax { get; set; } + + [JsonProperty("canEarn")] public bool CanEarn { get; set; } + + [JsonProperty("canAddSubscriber")] public bool CanAddSubscriber { get; set; } + + [JsonProperty("subscribePrice")] public string SubscribePrice { get; set; } = ""; + + [JsonProperty("subscriptionBundles")] public List SubscriptionBundles { get; set; } = []; + + [JsonProperty("isPaywallRequired")] public bool IsPaywallRequired { get; set; } + + [JsonProperty("listsStates")] public List ListsStates { get; set; } = []; + + [JsonProperty("isRestricted")] public bool IsRestricted { get; set; } + + [JsonProperty("canRestrict")] public bool CanRestrict { get; set; } + + [JsonProperty("subscribedBy")] public object SubscribedBy { get; set; } = new(); + + [JsonProperty("subscribedByExpire")] public object SubscribedByExpire { get; set; } = new(); + + [JsonProperty("subscribedByExpireDate")] + public DateTime? SubscribedByExpireDate { get; set; } + + [JsonProperty("subscribedByAutoprolong")] + public object SubscribedByAutoprolong { get; set; } = new(); + + [JsonProperty("subscribedIsExpiredNow")] + public bool SubscribedIsExpiredNow { get; set; } + + [JsonProperty("currentSubscribePrice")] + public object CurrentSubscribePrice { get; set; } = new(); + + [JsonProperty("subscribedOn")] public object SubscribedOn { get; set; } = new(); + + [JsonProperty("subscribedOnExpiredNow")] + public object SubscribedOnExpiredNow { get; set; } = new(); + + [JsonProperty("subscribedOnDuration")] public object SubscribedOnDuration { get; set; } = new(); + + [JsonProperty("callPrice")] public int CallPrice { get; set; } + + [JsonProperty("lastSeen")] public DateTime? LastSeen { get; set; } + + [JsonProperty("canReport")] public bool CanReport { get; set; } +} diff --git a/OF DL/Models/Dtos/Messages/InfoDto.cs b/OF DL/Models/Dtos/Messages/InfoDto.cs new file mode 100644 index 0000000..30b3ceb --- /dev/null +++ b/OF DL/Models/Dtos/Messages/InfoDto.cs @@ -0,0 +1,11 @@ +using Newtonsoft.Json; +using OF_DL.Models.Dtos.Common; + +namespace OF_DL.Models.Dtos.Messages; + +public class InfoDto +{ + [JsonProperty("source")] public SourceDto Source { get; set; } = new(); + + [JsonProperty("preview")] public PreviewDto Preview { get; set; } = new(); +} diff --git a/OF DL/Models/Dtos/Messages/ListItemDto.cs b/OF DL/Models/Dtos/Messages/ListItemDto.cs new file mode 100644 index 0000000..6b414d7 --- /dev/null +++ b/OF DL/Models/Dtos/Messages/ListItemDto.cs @@ -0,0 +1,66 @@ +using Newtonsoft.Json; + +namespace OF_DL.Models.Dtos.Messages; + +public class ListItemDto +{ + [JsonProperty("responseType")] public string ResponseType { get; set; } = ""; + + [JsonProperty("text")] public string Text { get; set; } = ""; + + [JsonProperty("giphyId")] public object GiphyId { get; set; } = new(); + + [JsonProperty("lockedText")] public bool? LockedText { get; set; } + + [JsonProperty("isFree")] public bool? IsFree { get; set; } + + [JsonProperty("price")] public string Price { get; set; } = ""; + + [JsonProperty("isMediaReady")] public bool? IsMediaReady { get; set; } + + [JsonProperty("mediaCount")] public int? MediaCount { get; set; } + + [JsonProperty("media")] public List Media { get; set; } = []; + + [JsonProperty("previews")] public List Previews { get; set; } = []; + + [JsonProperty("isTip")] public bool? IsTip { get; set; } + + [JsonProperty("isReportedByMe")] public bool? IsReportedByMe { get; set; } + + [JsonProperty("isCouplePeopleMedia")] public bool? IsCouplePeopleMedia { get; set; } + + [JsonProperty("queueId")] public object QueueId { get; set; } = new(); + + [JsonProperty("fromUser")] public FromUserDto FromUser { get; set; } = new(); + + [JsonProperty("isFromQueue")] public bool? IsFromQueue { get; set; } + + [JsonProperty("canUnsendQueue")] public bool? CanUnsendQueue { get; set; } + + [JsonProperty("unsendSecondsQueue")] public int? UnsendSecondsQueue { get; set; } + + [JsonProperty("id")] public long Id { get; set; } + + [JsonProperty("isOpened")] public bool? IsOpened { get; set; } + + [JsonProperty("isNew")] public bool? IsNew { get; set; } + + [JsonProperty("createdAt")] public DateTime? CreatedAt { get; set; } + + [JsonProperty("changedAt")] public DateTime? ChangedAt { get; set; } + + [JsonProperty("cancelSeconds")] public int? CancelSeconds { get; set; } + + [JsonProperty("isLiked")] public bool? IsLiked { get; set; } + + [JsonProperty("canPurchase")] public bool? CanPurchase { get; set; } + + [JsonProperty("canPurchaseReason")] public string CanPurchaseReason { get; set; } = ""; + + [JsonProperty("canReport")] public bool? CanReport { get; set; } + + [JsonProperty("canBePinned")] public bool? CanBePinned { get; set; } + + [JsonProperty("isPinned")] public bool? IsPinned { get; set; } +} diff --git a/OF DL/Models/Dtos/Messages/ListsStateDto.cs b/OF DL/Models/Dtos/Messages/ListsStateDto.cs new file mode 100644 index 0000000..dd4524a --- /dev/null +++ b/OF DL/Models/Dtos/Messages/ListsStateDto.cs @@ -0,0 +1,18 @@ +using Newtonsoft.Json; + +namespace OF_DL.Models.Dtos.Messages; + +public class ListsStateDto +{ + [JsonProperty("id")] public string Id { get; set; } = ""; + + [JsonProperty("type")] public string Type { get; set; } = ""; + + [JsonProperty("name")] public string Name { get; set; } = ""; + + [JsonProperty("hasUser")] public bool HasUser { get; set; } + + [JsonProperty("canAddUser")] public bool CanAddUser { get; set; } + + [JsonProperty("cannotAddUserReason")] public string CannotAddUserReason { get; set; } = ""; +} diff --git a/OF DL/Models/Dtos/Messages/MediumDto.cs b/OF DL/Models/Dtos/Messages/MediumDto.cs new file mode 100644 index 0000000..58052f1 --- /dev/null +++ b/OF DL/Models/Dtos/Messages/MediumDto.cs @@ -0,0 +1,37 @@ +using Newtonsoft.Json; +using OF_DL.Models.Dtos.Common; + +namespace OF_DL.Models.Dtos.Messages; + +public class MediumDto +{ + [JsonProperty("id")] public long Id { get; set; } + + [JsonProperty("canView")] public bool CanView { get; set; } + + [JsonProperty("type")] public string Type { get; set; } = ""; + + [JsonProperty("src")] public string Src { get; set; } = ""; + + [JsonProperty("preview")] public string Preview { get; set; } = ""; + + [JsonProperty("thumb")] public string Thumb { get; set; } = ""; + + [JsonProperty("locked")] public object Locked { get; set; } = new(); + + [JsonProperty("duration")] public int? Duration { get; set; } + + [JsonProperty("hasError")] public bool? HasError { get; set; } + + [JsonProperty("squarePreview")] public string SquarePreview { get; set; } = ""; + + [JsonProperty("video")] public VideoDto Video { get; set; } = new(); + + [JsonProperty("videoSources")] public VideoSourcesDto VideoSources { get; set; } = new(); + + [JsonProperty("source")] public SourceDto Source { get; set; } = new(); + + [JsonProperty("info")] public InfoDto Info { get; set; } = new(); + + [JsonProperty("files")] public FilesDto Files { get; set; } = new(); +} diff --git a/OF DL/Models/Dtos/Messages/MessagesDto.cs b/OF DL/Models/Dtos/Messages/MessagesDto.cs new file mode 100644 index 0000000..50673b5 --- /dev/null +++ b/OF DL/Models/Dtos/Messages/MessagesDto.cs @@ -0,0 +1,10 @@ +using Newtonsoft.Json; + +namespace OF_DL.Models.Dtos.Messages; + +public class MessagesDto +{ + [JsonProperty("list")] public List List { get; set; } = []; + + [JsonProperty("hasMore")] public bool HasMore { get; set; } +} diff --git a/OF DL/Models/Dtos/Messages/SingleMessageDto.cs b/OF DL/Models/Dtos/Messages/SingleMessageDto.cs new file mode 100644 index 0000000..252c59b --- /dev/null +++ b/OF DL/Models/Dtos/Messages/SingleMessageDto.cs @@ -0,0 +1,60 @@ +using Newtonsoft.Json; + +namespace OF_DL.Models.Dtos.Messages; + +public class SingleMessageDto +{ + [JsonProperty("responseType")] public string ResponseType { get; set; } = ""; + + [JsonProperty("text")] public string Text { get; set; } = ""; + + [JsonProperty("giphyId")] public object GiphyId { get; set; } = new(); + + [JsonProperty("lockedText")] public bool LockedText { get; set; } + + [JsonProperty("isFree")] public bool IsFree { get; set; } + + [JsonProperty("price")] public double Price { get; set; } + + [JsonProperty("isMediaReady")] public bool IsMediaReady { get; set; } + + [JsonProperty("mediaCount")] public int MediaCount { get; set; } + + [JsonProperty("media")] public List Media { get; set; } = []; + + [JsonProperty("previews")] public List Previews { get; set; } = []; + + [JsonProperty("isTip")] public bool IsTip { get; set; } + + [JsonProperty("isReportedByMe")] public bool IsReportedByMe { get; set; } + + [JsonProperty("isCouplePeopleMedia")] public bool IsCouplePeopleMedia { get; set; } + + [JsonProperty("queueId")] public long QueueId { get; set; } + + [JsonProperty("fromUser")] public FromUserDto FromUser { get; set; } = new(); + + [JsonProperty("isFromQueue")] public bool IsFromQueue { get; set; } + + [JsonProperty("canUnsendQueue")] public bool CanUnsendQueue { get; set; } + + [JsonProperty("unsendSecondsQueue")] public int UnsendSecondsQueue { get; set; } + + [JsonProperty("id")] public long Id { get; set; } + + [JsonProperty("isOpened")] public bool IsOpened { get; set; } + + [JsonProperty("isNew")] public bool IsNew { get; set; } + + [JsonProperty("createdAt")] public DateTime? CreatedAt { get; set; } + + [JsonProperty("changedAt")] public DateTime? ChangedAt { get; set; } + + [JsonProperty("cancelSeconds")] public int CancelSeconds { get; set; } + + [JsonProperty("isLiked")] public bool IsLiked { get; set; } + + [JsonProperty("canPurchase")] public bool CanPurchase { get; set; } + + [JsonProperty("canReport")] public bool CanReport { get; set; } +} diff --git a/OF DL/Models/Entities/Common/FromUser.cs b/OF DL/Models/Entities/Common/FromUser.cs new file mode 100644 index 0000000..bc09e0b --- /dev/null +++ b/OF DL/Models/Entities/Common/FromUser.cs @@ -0,0 +1,6 @@ +namespace OF_DL.Models.Entities.Common; + +public class FromUser +{ + public long? Id { get; set; } +} diff --git a/OF DL/Models/Entities/Messages/ListItem.cs b/OF DL/Models/Entities/Messages/ListItem.cs new file mode 100644 index 0000000..e48f1f5 --- /dev/null +++ b/OF DL/Models/Entities/Messages/ListItem.cs @@ -0,0 +1,22 @@ +using OF_DL.Models.Entities.Common; + +namespace OF_DL.Models.Entities.Messages; + +public class ListItem +{ + public long Id { get; set; } + + public string? Text { get; set; } + + public string? Price { get; set; } + + public string? CanPurchaseReason { get; set; } + + public DateTime? CreatedAt { get; set; } + + public List? Previews { get; set; } + + public List? Media { get; set; } + + public FromUser? FromUser { get; set; } +} diff --git a/OF DL/Models/Entities/Messages/Medium.cs b/OF DL/Models/Entities/Messages/Medium.cs new file mode 100644 index 0000000..7f6fa1a --- /dev/null +++ b/OF DL/Models/Entities/Messages/Medium.cs @@ -0,0 +1,14 @@ +using OF_DL.Models.Entities.Common; + +namespace OF_DL.Models.Entities.Messages; + +public class Medium +{ + public long Id { get; set; } + + public bool CanView { get; set; } + + public string? Type { get; set; } + + public Files? Files { get; set; } +} diff --git a/OF DL/Models/Entities/Messages/MessageCollection.cs b/OF DL/Models/Entities/Messages/MessageCollection.cs new file mode 100644 index 0000000..c5ac0c2 --- /dev/null +++ b/OF DL/Models/Entities/Messages/MessageCollection.cs @@ -0,0 +1,10 @@ +namespace OF_DL.Models.Entities.Messages; + +public class MessageCollection +{ + public List MessageMedia { get; set; } = []; + + public List MessageObjects { get; set; } = []; + + public Dictionary Messages { get; set; } = new(); +} diff --git a/OF DL/Models/Entities/Messages/Messages.cs b/OF DL/Models/Entities/Messages/Messages.cs new file mode 100644 index 0000000..9a965e2 --- /dev/null +++ b/OF DL/Models/Entities/Messages/Messages.cs @@ -0,0 +1,8 @@ +namespace OF_DL.Models.Entities.Messages; + +public class Messages +{ + public List List { get; set; } = []; + + public bool HasMore { get; set; } +} diff --git a/OF DL/Models/Entities/Messages/SingleMessage.cs b/OF DL/Models/Entities/Messages/SingleMessage.cs new file mode 100644 index 0000000..b41b555 --- /dev/null +++ b/OF DL/Models/Entities/Messages/SingleMessage.cs @@ -0,0 +1,20 @@ +using OF_DL.Models.Entities.Common; + +namespace OF_DL.Models.Entities.Messages; + +public class SingleMessage +{ + public long Id { get; set; } + + public string? Text { get; set; } + + public double? Price { get; set; } + + public DateTime? CreatedAt { get; set; } + + public List? Media { get; set; } + + public List? Previews { get; set; } + + public FromUser? FromUser { get; set; } +} diff --git a/OF DL/Models/Mappers/MessagesMapper.cs b/OF DL/Models/Mappers/MessagesMapper.cs new file mode 100644 index 0000000..bedf505 --- /dev/null +++ b/OF DL/Models/Mappers/MessagesMapper.cs @@ -0,0 +1,110 @@ +using OF_DL.Models.Dtos.Common; +using OF_DL.Models.Dtos.Messages; +using OF_DL.Models.Entities.Common; +using MessageEntities = OF_DL.Models.Entities.Messages; + +namespace OF_DL.Models.Mappers; + +public static class MessagesMapper +{ + public static MessageEntities.Messages FromDto(MessagesDto? dto) + { + MessageEntities.Messages mapped = new() { HasMore = dto?.HasMore ?? false }; + + if (dto?.List == null) + { + return mapped; + } + + foreach (ListItemDto entry in dto.List) + { + mapped.List.Add(MapListItem(entry)); + } + + return mapped; + } + + public static MessageEntities.SingleMessage FromDto(SingleMessageDto? dto) + { + MessageEntities.SingleMessage mapped = new(); + + if (dto == null) + { + return mapped; + } + + mapped.Id = dto.Id; + mapped.Text = dto.Text; + mapped.Price = dto.Price; + mapped.CreatedAt = dto.CreatedAt; + mapped.Media = MapMedia(dto.Media); + mapped.Previews = dto.Previews; + mapped.FromUser = MapFromUser(dto.FromUser); + + return mapped; + } + + public static MessageEntities.Medium MapMedium(MediumDto dto) => + new() { Id = dto.Id, Type = dto.Type, CanView = dto.CanView, Files = MapFiles(dto.Files) }; + + private static MessageEntities.ListItem MapListItem(ListItemDto dto) => + new() + { + Id = dto.Id, + Text = dto.Text, + Price = dto.Price, + CanPurchaseReason = dto.CanPurchaseReason, + CreatedAt = dto.CreatedAt, + Media = MapMedia(dto.Media), + Previews = dto.Previews, + FromUser = MapFromUser(dto.FromUser) + }; + + private static List? MapMedia(List? media) => + media?.Select(MapMedium).ToList(); + + private static FromUser? MapFromUser(FromUserDto? dto) => + dto == null ? null : new FromUser { Id = dto.Id }; + + private static Files? MapFiles(FilesDto? dto) + { + if (dto == null) + { + return null; + } + + return new Files { Full = MapFull(dto.Full), Drm = MapDrm(dto.Drm) }; + } + + private static Full? MapFull(FullDto? dto) => dto == null ? null : new Full { Url = dto.Url }; + + private static Drm? MapDrm(DrmDto? dto) + { + if (dto == null) + { + return null; + } + + return new Drm { Manifest = MapManifest(dto.Manifest), Signature = MapSignature(dto.Signature) }; + } + + private static Manifest? MapManifest(ManifestDto? dto) => dto == null ? null : new Manifest { Dash = dto.Dash }; + + private static Signature? MapSignature(SignatureDto? dto) => + dto == null ? null : new Signature { Dash = MapDash(dto.Dash) }; + + private static Dash? MapDash(DashDto? dto) + { + if (dto == null) + { + return null; + } + + return new Dash + { + CloudFrontPolicy = dto.CloudFrontPolicy, + CloudFrontSignature = dto.CloudFrontSignature, + CloudFrontKeyPairId = dto.CloudFrontKeyPairId + }; + } +} diff --git a/OF DL/Models/Messages/MessageCollection.cs b/OF DL/Models/Messages/MessageCollection.cs deleted file mode 100644 index 00321c0..0000000 --- a/OF DL/Models/Messages/MessageCollection.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace OF_DL.Models.Messages; - -public class MessageCollection -{ - public List MessageMedia = new(); - public List MessageObjects = new(); - public Dictionary Messages = new(); -} diff --git a/OF DL/Models/Messages/Messages.cs b/OF DL/Models/Messages/Messages.cs deleted file mode 100644 index b0c72ef..0000000 --- a/OF DL/Models/Messages/Messages.cs +++ /dev/null @@ -1,173 +0,0 @@ -using Newtonsoft.Json; - -namespace OF_DL.Models.Messages; - -public class Messages -{ - public List list { get; set; } - public bool hasMore { get; set; } - - public class Dash - { - [JsonProperty("CloudFront-Policy")] public string CloudFrontPolicy { get; set; } - - [JsonProperty("CloudFront-Signature")] public string CloudFrontSignature { get; set; } - - [JsonProperty("CloudFront-Key-Pair-Id")] - public string CloudFrontKeyPairId { get; set; } - } - - public class Drm - { - public Manifest manifest { get; set; } - public Signature signature { get; set; } - } - - public class Files - { - public Full full { get; set; } - public Thumb thumb { get; set; } - public Preview preview { get; set; } - public SquarePreview squarePreview { get; set; } - public Drm drm { get; set; } - } - - public class Full - { - public string url { get; set; } - public int width { get; set; } - public int height { get; set; } - public long size { get; set; } - public List sources { get; set; } - } - - public class SquarePreview - { - public string url { get; set; } - public int width { get; set; } - public int height { get; set; } - public long size { get; set; } - } - - public class Thumb - { - public string url { get; set; } - public int width { get; set; } - public int height { get; set; } - public long size { get; set; } - } - - public class FromUser - { - public long? id { get; set; } - public string _view { get; set; } - } - - public class Hls - { - [JsonProperty("CloudFront-Policy")] public string CloudFrontPolicy { get; set; } - - [JsonProperty("CloudFront-Signature")] public string CloudFrontSignature { get; set; } - - [JsonProperty("CloudFront-Key-Pair-Id")] - public string CloudFrontKeyPairId { get; set; } - } - - public class Info - { - public Source source { get; set; } - public Preview preview { get; set; } - } - - public class List - { - public string responseType { get; set; } - public string text { get; set; } - public object giphyId { get; set; } - public bool? lockedText { get; set; } - public bool? isFree { get; set; } - public string? price { get; set; } - public bool? isMediaReady { get; set; } - public int? mediaCount { get; set; } - public List media { get; set; } - public List previews { get; set; } - public bool? isTip { get; set; } - public bool? isReportedByMe { get; set; } - public bool? isCouplePeopleMedia { get; set; } - public object queueId { get; set; } - public FromUser fromUser { get; set; } - public bool? isFromQueue { get; set; } - public bool? canUnsendQueue { get; set; } - public int? unsendSecondsQueue { get; set; } - public long id { get; set; } - public bool? isOpened { get; set; } - public bool? isNew { get; set; } - public DateTime? createdAt { get; set; } - public DateTime? changedAt { get; set; } - public int? cancelSeconds { get; set; } - public bool? isLiked { get; set; } - public bool? canPurchase { get; set; } - public string canPurchaseReason { get; set; } - public bool? canReport { get; set; } - public bool? canBePinned { get; set; } - public bool? isPinned { get; set; } - } - - public class Manifest - { - public string hls { get; set; } - public string dash { get; set; } - } - - public class Medium - { - public long id { get; set; } - public bool canView { get; set; } - public string type { get; set; } - public string src { get; set; } - public string preview { get; set; } - public string thumb { get; set; } - public object locked { get; set; } - public int? duration { get; set; } - public bool? hasError { get; set; } - public string squarePreview { get; set; } - public Video video { get; set; } - public VideoSources videoSources { get; set; } - public Source source { get; set; } - public Info info { get; set; } - public Files files { get; set; } - } - - public class Preview - { - public int? width { get; set; } - public int? height { get; set; } - public int? size { get; set; } - } - - public class Signature - { - public Hls hls { get; set; } - public Dash dash { get; set; } - } - - public class Source - { - public string source { get; set; } - public int? width { get; set; } - public int? height { get; set; } - public int? size { get; set; } - } - - public class Video - { - public string mp4 { get; set; } - } - - public class VideoSources - { - [JsonProperty("720")] public string _720 { get; set; } - - [JsonProperty("240")] public string _240 { get; set; } - } -} diff --git a/OF DL/Models/Messages/SingleMessage.cs b/OF DL/Models/Messages/SingleMessage.cs deleted file mode 100644 index ffaee05..0000000 --- a/OF DL/Models/Messages/SingleMessage.cs +++ /dev/null @@ -1,115 +0,0 @@ -using static OF_DL.Models.Messages.Messages; - -namespace OF_DL.Models.Messages; - -public class AvatarThumbs -{ - public string c50 { get; set; } - public string c144 { get; set; } -} - -public class FromUser -{ - public string view { get; set; } - public string avatar { get; set; } - public AvatarThumbs avatarThumbs { get; set; } - public string header { get; set; } - public HeaderSize headerSize { get; set; } - public HeaderThumbs headerThumbs { get; set; } - public long? id { get; set; } - public string name { get; set; } - public string username { get; set; } - public bool canLookStory { get; set; } - public bool canCommentStory { get; set; } - public bool hasNotViewedStory { get; set; } - public bool isVerified { get; set; } - public bool canPayInternal { get; set; } - public bool hasScheduledStream { get; set; } - public bool hasStream { get; set; } - public bool hasStories { get; set; } - public bool tipsEnabled { get; set; } - public bool tipsTextEnabled { get; set; } - public int tipsMin { get; set; } - public int tipsMinInternal { get; set; } - public int tipsMax { get; set; } - public bool canEarn { get; set; } - public bool canAddSubscriber { get; set; } - public string? subscribePrice { get; set; } - public List subscriptionBundles { get; set; } - public bool isPaywallRequired { get; set; } - public List listsStates { get; set; } - public bool isRestricted { get; set; } - public bool canRestrict { get; set; } - public object subscribedBy { get; set; } - public object subscribedByExpire { get; set; } - public DateTime subscribedByExpireDate { get; set; } - public object subscribedByAutoprolong { get; set; } - public bool subscribedIsExpiredNow { get; set; } - public object currentSubscribePrice { get; set; } - public object subscribedOn { get; set; } - public object subscribedOnExpiredNow { get; set; } - public object subscribedOnDuration { get; set; } - public int callPrice { get; set; } - public DateTime? lastSeen { get; set; } - public bool canReport { get; set; } -} - -public class HeaderSize -{ - public int width { get; set; } - public int height { get; set; } -} - -public class HeaderThumbs -{ - public string w480 { get; set; } - public string w760 { get; set; } -} - -public class ListsState -{ - public string id { get; set; } - public string type { get; set; } - public string name { get; set; } - public bool hasUser { get; set; } - public bool canAddUser { get; set; } - public string cannotAddUserReason { get; set; } -} - -public class Preview -{ - public int width { get; set; } - public int height { get; set; } - public long size { get; set; } -} - -public class SingleMessage -{ - public string responseType { get; set; } - public string text { get; set; } - public object giphyId { get; set; } - public bool lockedText { get; set; } - public bool isFree { get; set; } - public double price { get; set; } - public bool isMediaReady { get; set; } - public int mediaCount { get; set; } - public List media { get; set; } - public List previews { get; set; } - public bool isTip { get; set; } - public bool isReportedByMe { get; set; } - public bool isCouplePeopleMedia { get; set; } - public long queueId { get; set; } - public FromUser fromUser { get; set; } - public bool isFromQueue { get; set; } - public bool canUnsendQueue { get; set; } - public int unsendSecondsQueue { get; set; } - public long id { get; set; } - public bool isOpened { get; set; } - public bool isNew { get; set; } - public DateTime? createdAt { get; set; } - public DateTime? changedAt { get; set; } - public int cancelSeconds { get; set; } - public bool isLiked { get; set; } - public bool canPurchase { get; set; } - public bool canReport { get; set; } -} diff --git a/OF DL/Models/Purchased/PaidMessageCollection.cs b/OF DL/Models/Purchased/PaidMessageCollection.cs index 0ca1548..26bf6ec 100644 --- a/OF DL/Models/Purchased/PaidMessageCollection.cs +++ b/OF DL/Models/Purchased/PaidMessageCollection.cs @@ -1,10 +1,10 @@ -using static OF_DL.Models.Messages.Messages; +using MessageEntities = OF_DL.Models.Entities.Messages; namespace OF_DL.Models.Purchased; public class PaidMessageCollection { - public List PaidMessageMedia = new(); + public List PaidMessageMedia = new(); public List PaidMessageObjects = new(); public Dictionary PaidMessages = new(); } diff --git a/OF DL/Models/Purchased/PaidPostCollection.cs b/OF DL/Models/Purchased/PaidPostCollection.cs index 4def769..24bce7d 100644 --- a/OF DL/Models/Purchased/PaidPostCollection.cs +++ b/OF DL/Models/Purchased/PaidPostCollection.cs @@ -1,10 +1,10 @@ -using static OF_DL.Models.Messages.Messages; +using MessageEntities = OF_DL.Models.Entities.Messages; namespace OF_DL.Models.Purchased; public class PaidPostCollection { - public List PaidPostMedia = new(); + public List PaidPostMedia = new(); public List PaidPostObjects = new(); public Dictionary PaidPosts = new(); } diff --git a/OF DL/Models/Purchased/Purchased.cs b/OF DL/Models/Purchased/Purchased.cs index 671ed3b..cae8e66 100644 --- a/OF DL/Models/Purchased/Purchased.cs +++ b/OF DL/Models/Purchased/Purchased.cs @@ -1,5 +1,5 @@ using Newtonsoft.Json; -using static OF_DL.Models.Messages.Messages; +using OF_DL.Models.Dtos.Messages; namespace OF_DL.Models.Purchased; @@ -41,7 +41,7 @@ public class Purchased public string? price { get; set; } public bool? isMediaReady { get; set; } public int? mediaCount { get; set; } - public List media { get; set; } + public List media { get; set; } public List previews { get; set; } public List preview { get; set; } public bool? isTip { get; set; } diff --git a/OF DL/Models/Purchased/SinglePaidMessageCollection.cs b/OF DL/Models/Purchased/SinglePaidMessageCollection.cs index db60540..1f2e33f 100644 --- a/OF DL/Models/Purchased/SinglePaidMessageCollection.cs +++ b/OF DL/Models/Purchased/SinglePaidMessageCollection.cs @@ -1,14 +1,13 @@ -using OF_DL.Models.Messages; -using static OF_DL.Models.Messages.Messages; +using MessageEntities = OF_DL.Models.Entities.Messages; namespace OF_DL.Models.Purchased; public class SinglePaidMessageCollection { - public List PreviewSingleMessageMedia = new(); + public List PreviewSingleMessageMedia = new(); public Dictionary PreviewSingleMessages = new(); - public List SingleMessageMedia = new(); - public List SingleMessageObjects = new(); + public List SingleMessageMedia = new(); + public List SingleMessageObjects = new(); public Dictionary SingleMessages = new(); } diff --git a/OF DL/Program.cs b/OF DL/Program.cs index 18250ce..287f50e 100644 --- a/OF DL/Program.cs +++ b/OF DL/Program.cs @@ -7,13 +7,13 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OF_DL.CLI; using OF_DL.Models; -using OF_DL.Models.Messages; using OF_DL.Models.Post; using OF_DL.Models.Purchased; using OF_DL.Models.Streams; using OF_DL.Enumerations; using OF_DL.Helpers; -using ArchivedModels = OF_DL.Models.Entities.Archived; +using ArchivedEntities = OF_DL.Models.Entities.Archived; +using MessageEntities = OF_DL.Models.Entities.Messages; using OF_DL.Services; using Serilog; using Spectre.Console; @@ -1116,7 +1116,7 @@ public class Program(IServiceProvider serviceProvider) IAPIService apiService = serviceProvider.GetRequiredService(); IDownloadService downloadService = serviceProvider.GetRequiredService(); - MessageCollection messages = new(); + MessageEntities.MessageCollection messages = new(); await AnsiConsole.Status() .StartAsync("[red]Getting Messages[/]", @@ -1274,7 +1274,7 @@ public class Program(IServiceProvider serviceProvider) IAPIService apiService = serviceProvider.GetRequiredService(); IDownloadService downloadService = serviceProvider.GetRequiredService(); - ArchivedModels.ArchivedCollection archived = new(); + ArchivedEntities.ArchivedCollection archived = new(); await AnsiConsole.Status() .StartAsync("[red]Getting Archived Posts[/]", @@ -1523,11 +1523,11 @@ public class Program(IServiceProvider serviceProvider) pssh); } - Messages.Medium? mediaInfo = - purchasedPosts?.PaidPostMedia?.FirstOrDefault(m => m.id == purchasedPostKVP.Key); + MessageEntities.Medium? mediaInfo = + purchasedPosts?.PaidPostMedia?.FirstOrDefault(m => m.Id == purchasedPostKVP.Key); Purchased.List? postInfo = mediaInfo != null ? purchasedPosts?.PaidPostObjects?.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true) + p?.media?.Any(m => m.Id == purchasedPostKVP.Key) == true) : null; isNew = await downloadService.DownloadPurchasedPostDRMVideo( @@ -1558,11 +1558,11 @@ public class Program(IServiceProvider serviceProvider) } else { - Messages.Medium? mediaInfo = - purchasedPosts?.PaidPostMedia?.FirstOrDefault(m => m.id == purchasedPostKVP.Key); + MessageEntities.Medium? mediaInfo = + purchasedPosts?.PaidPostMedia?.FirstOrDefault(m => m.Id == purchasedPostKVP.Key); Purchased.List? postInfo = mediaInfo != null ? purchasedPosts?.PaidPostObjects?.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true) + p?.media?.Any(m => m.Id == purchasedPostKVP.Key) == true) : null; isNew = await downloadService.DownloadPurchasedPostMedia( @@ -1672,12 +1672,12 @@ public class Program(IServiceProvider serviceProvider) pssh); } - Messages.Medium? mediaInfo = + MessageEntities.Medium? mediaInfo = paidMessageCollection.PaidMessageMedia.FirstOrDefault(m => - m.id == paidMessageKVP.Key); + m.Id == paidMessageKVP.Key); Purchased.List? messageInfo = paidMessageCollection.PaidMessageObjects.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true); + p?.media?.Any(m => m.Id == paidMessageKVP.Key) == true); isNew = await downloadService.DownloadPurchasedMessageDRMVideo( policy, @@ -1709,11 +1709,11 @@ public class Program(IServiceProvider serviceProvider) } else { - Messages.Medium? mediaInfo = - paidMessageCollection.PaidMessageMedia.FirstOrDefault(m => m.id == paidMessageKVP.Key); + MessageEntities.Medium? mediaInfo = + paidMessageCollection.PaidMessageMedia.FirstOrDefault(m => m.Id == paidMessageKVP.Key); Purchased.List messageInfo = paidMessageCollection.PaidMessageObjects.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true); + p?.media?.Any(m => m.Id == paidMessageKVP.Key) == true); isNew = await downloadService.DownloadPurchasedMedia( paidMessageKVP.Value, @@ -1899,12 +1899,12 @@ public class Program(IServiceProvider serviceProvider) pssh); } - Messages.Medium? mediaInfo = + MessageEntities.Medium? mediaInfo = singlePaidMessageCollection.PreviewSingleMessageMedia.FirstOrDefault(m => - m.id == paidMessageKVP.Key); - SingleMessage? messageInfo = + m.Id == paidMessageKVP.Key); + MessageEntities.SingleMessage? messageInfo = singlePaidMessageCollection.SingleMessageObjects.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true); + p?.Media?.Any(m => m.Id == paidMessageKVP.Key) == true); isNew = await downloadService.DownloadSingleMessagePreviewDRMVideo( policy, @@ -1921,7 +1921,7 @@ public class Program(IServiceProvider serviceProvider) .PaidMessageFileNameFormat ?? string.Empty, messageInfo, mediaInfo, - messageInfo?.fromUser, + messageInfo?.FromUser, hasSelectedUsersKVP.Value); if (isNew) @@ -1936,12 +1936,12 @@ public class Program(IServiceProvider serviceProvider) } else { - Messages.Medium? mediaInfo = + MessageEntities.Medium? mediaInfo = singlePaidMessageCollection.PreviewSingleMessageMedia.FirstOrDefault(m => - m.id == paidMessageKVP.Key); - SingleMessage? messageInfo = + m.Id == paidMessageKVP.Key); + MessageEntities.SingleMessage? messageInfo = singlePaidMessageCollection.SingleMessageObjects.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true); + p?.Media?.Any(m => m.Id == paidMessageKVP.Key) == true); isNew = await downloadService.DownloadMessagePreviewMedia( paidMessageKVP.Value, @@ -1953,7 +1953,7 @@ public class Program(IServiceProvider serviceProvider) .PaidMessageFileNameFormat ?? string.Empty, messageInfo, mediaInfo, - messageInfo?.fromUser, + messageInfo?.FromUser, hasSelectedUsersKVP.Value); if (isNew) { @@ -2039,12 +2039,12 @@ public class Program(IServiceProvider serviceProvider) pssh); } - Messages.Medium? mediaInfo = + MessageEntities.Medium? mediaInfo = singlePaidMessageCollection.SingleMessageMedia.FirstOrDefault(m => - m.id == paidMessageKVP.Key); - SingleMessage? messageInfo = + m.Id == paidMessageKVP.Key); + MessageEntities.SingleMessage? messageInfo = singlePaidMessageCollection.SingleMessageObjects.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true); + p?.Media?.Any(m => m.Id == paidMessageKVP.Key) == true); isNew = await downloadService.DownloadSinglePurchasedMessageDRMVideo( policy, @@ -2061,7 +2061,7 @@ public class Program(IServiceProvider serviceProvider) .PaidMessageFileNameFormat ?? string.Empty, messageInfo, mediaInfo, - messageInfo?.fromUser, + messageInfo?.FromUser, hasSelectedUsersKVP.Value); if (isNew) @@ -2076,12 +2076,12 @@ public class Program(IServiceProvider serviceProvider) } else { - Messages.Medium? mediaInfo = + MessageEntities.Medium? mediaInfo = singlePaidMessageCollection.SingleMessageMedia.FirstOrDefault(m => - m.id == paidMessageKVP.Key); - SingleMessage? messageInfo = + m.Id == paidMessageKVP.Key); + MessageEntities.SingleMessage? messageInfo = singlePaidMessageCollection.SingleMessageObjects.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true); + p?.Media?.Any(m => m.Id == paidMessageKVP.Key) == true); isNew = await downloadService.DownloadSinglePurchasedMedia( paidMessageKVP.Value, @@ -2093,7 +2093,7 @@ public class Program(IServiceProvider serviceProvider) .PaidMessageFileNameFormat ?? string.Empty, messageInfo, mediaInfo, - messageInfo?.fromUser, + messageInfo?.FromUser, hasSelectedUsersKVP.Value); if (isNew) { diff --git a/OF DL/Services/APIService.cs b/OF DL/Services/APIService.cs index 149a35f..576d06a 100644 --- a/OF DL/Services/APIService.cs +++ b/OF DL/Services/APIService.cs @@ -6,18 +6,19 @@ using System.Xml.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OF_DL.Models; -using OF_DL.Models.Messages; using OF_DL.Models.Post; using OF_DL.Models.Purchased; using OF_DL.Models.Stories; using OF_DL.Models.Streams; using OF_DL.Enumerations; -using OF_DL.Models.Dtos.Archived; -using OF_DL.Models.Dtos.Lists; -using OF_DL.Models.Dtos.Highlights; -using ArchivedModels = OF_DL.Models.Entities.Archived; +using ArchivedDtos = OF_DL.Models.Dtos.Archived; +using MessageDtos = OF_DL.Models.Dtos.Messages; +using ListDtos = OF_DL.Models.Dtos.Lists; +using HighlightDtos = OF_DL.Models.Dtos.Highlights; +using ArchivedEntities = OF_DL.Models.Entities.Archived; using HighlightEntities = OF_DL.Models.Entities.Highlights; using ListEntities = OF_DL.Models.Entities.Lists; +using MessageEntities = OF_DL.Models.Entities.Messages; using OF_DL.Models.Mappers; using OF_DL.Widevine; using Serilog; @@ -243,7 +244,7 @@ public class APIService(IAuthService authService, IConfigService configService, break; } - UserListDto? userListDto = JsonConvert.DeserializeObject(body); + ListDtos.UserListDto? userListDto = JsonConvert.DeserializeObject(body); ListEntities.UserList userList = UserListsMapper.FromDto(userListDto); foreach (ListEntities.UserListItem listItem in userList.List) @@ -303,7 +304,8 @@ public class APIService(IAuthService authService, IConfigService configService, break; } - List? usersListDto = JsonConvert.DeserializeObject>(body); + List? usersListDto = + JsonConvert.DeserializeObject>(body); List usersList = UserListsMapper.FromDto(usersListDto); if (usersList.Count <= 0) @@ -451,8 +453,8 @@ public class APIService(IAuthService authService, IConfigService configService, else if (mediatype == MediaType.Highlights) { List highlight_ids = new(); - HighlightsDto? highlightsDto = - JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); + HighlightDtos.HighlightsDto? highlightsDto = + JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); HighlightEntities.Highlights highlights = HighlightsMapper.FromDto(highlightsDto); if (highlights.HasMore) @@ -464,8 +466,9 @@ public class APIService(IAuthService authService, IConfigService configService, Log.Debug("Media Highlights - " + endpoint); string? loopbody = await BuildHeaderAndExecuteRequests(getParams, endpoint, GetHttpClient()); - HighlightsDto? newHighlightsDto = - JsonConvert.DeserializeObject(loopbody, m_JsonSerializerSettings); + HighlightDtos.HighlightsDto? newHighlightsDto = + JsonConvert.DeserializeObject(loopbody, + m_JsonSerializerSettings); HighlightEntities.Highlights newHighlights = HighlightsMapper.FromDto(newHighlightsDto); highlights.List.AddRange(newHighlights.List); @@ -505,8 +508,9 @@ public class APIService(IAuthService authService, IConfigService configService, using HttpResponseMessage highlightResponse = await highlight_client.SendAsync(highlight_request); highlightResponse.EnsureSuccessStatusCode(); string highlightBody = await highlightResponse.Content.ReadAsStringAsync(); - HighlightMediaDto? highlightMediaDto = - JsonConvert.DeserializeObject(highlightBody, m_JsonSerializerSettings); + HighlightDtos.HighlightMediaDto? highlightMediaDto = + JsonConvert.DeserializeObject(highlightBody, + m_JsonSerializerSettings); HighlightEntities.HighlightMedia highlightMedia = HighlightsMapper.FromDto(highlightMediaDto); foreach (HighlightEntities.Story item in highlightMedia.Stories) @@ -672,97 +676,98 @@ public class APIService(IAuthService authService, IConfigService configService, purchase.isArchived.HasValue ? purchase.isArchived.Value : false, purchase.createdAt != null ? purchase.createdAt.Value : purchase.postedAt.Value); paidPostCollection.PaidPostObjects.Add(purchase); - foreach (Messages.Medium medium in purchase.media) + foreach (MessageDtos.MediumDto medium in purchase.media) { - if (!previewids.Contains(medium.id)) + MessageEntities.Medium mappedMedium = MessagesMapper.MapMedium(medium); + if (!previewids.Contains(medium.Id)) { - paid_post_ids.Add(medium.id); + paid_post_ids.Add(medium.Id); } - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } if (previewids.Count > 0) { - bool has = previewids.Any(cus => cus.Equals(medium.id)); - if (!has && medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + bool has = previewids.Any(cus => cus.Equals(medium.Id)); + if (!has && medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (!paidPostCollection.PaidPosts.ContainsKey(medium.id)) + if (!paidPostCollection.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, medium.files.full.url, + await dbService.AddMedia(folder, medium.Id, purchase.id, medium.Files.Full.Url, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidPostCollection.PaidPosts.Add(medium.id, medium.files.full.url); - paidPostCollection.PaidPostMedia.Add(medium); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidPostCollection.PaidPosts.Add(medium.Id, medium.Files.Full.Url); + paidPostCollection.PaidPostMedia.Add(mappedMedium); } } - else if (!has && medium.canView && medium.files != null && medium.files.drm != null) + else if (!has && medium.CanView && medium.Files != null && medium.Files.Drm != null) { - if (!paidPostCollection.PaidPosts.ContainsKey(medium.id)) + if (!paidPostCollection.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidPostCollection.PaidPosts.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - paidPostCollection.PaidPostMedia.Add(medium); + await dbService.AddMedia(folder, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Posts", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidPostCollection.PaidPosts.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + paidPostCollection.PaidPostMedia.Add(mappedMedium); } } } else { - if (medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + if (medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (!paidPostCollection.PaidPosts.ContainsKey(medium.id)) + if (!paidPostCollection.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, medium.files.full.url, + await dbService.AddMedia(folder, medium.Id, purchase.id, medium.Files.Full.Url, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidPostCollection.PaidPosts.Add(medium.id, medium.files.full.url); - paidPostCollection.PaidPostMedia.Add(medium); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidPostCollection.PaidPosts.Add(medium.Id, medium.Files.Full.Url); + paidPostCollection.PaidPostMedia.Add(mappedMedium); } } - else if (medium.canView && medium.files != null && medium.files.drm != null) + else if (medium.CanView && medium.Files != null && medium.Files.Drm != null) { - if (!paidPostCollection.PaidPosts.ContainsKey(medium.id)) + if (!paidPostCollection.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidPostCollection.PaidPosts.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - paidPostCollection.PaidPostMedia.Add(medium); + await dbService.AddMedia(folder, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Posts", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidPostCollection.PaidPosts.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + paidPostCollection.PaidPostMedia.Add(mappedMedium); } } } @@ -1360,14 +1365,15 @@ public class APIService(IAuthService authService, IConfigService configService, } - public async Task GetArchived(string endpoint, string folder, StatusContext ctx) + public async Task GetArchived(string endpoint, string folder, + StatusContext ctx) { Log.Debug($"Calling GetArchived - {endpoint}"); try { - ArchivedModels.Archived archived = new(); - ArchivedModels.ArchivedCollection archivedCollection = new(); + ArchivedEntities.Archived archived = new(); + ArchivedEntities.ArchivedCollection archivedCollection = new(); int post_limit = 50; Dictionary getParams = new() { @@ -1392,7 +1398,8 @@ public class APIService(IAuthService authService, IConfigService configService, configService.CurrentConfig.CustomDate); string? body = await BuildHeaderAndExecuteRequests(getParams, endpoint, GetHttpClient()); - ArchivedDto archivedDto = JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); + ArchivedDtos.ArchivedDto archivedDto = + JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); archived = ArchivedMapper.FromDto(archivedDto); ctx.Status($"[red]Getting Archived Posts\n[/] [red]Found {archived.List.Count}[/]"); ctx.Spinner(Spinner.Known.Dots); @@ -1405,11 +1412,11 @@ public class APIService(IAuthService authService, IConfigService configService, archived.TailMarker); while (true) { - ArchivedModels.Archived newarchived = new(); + ArchivedEntities.Archived newarchived = new(); string? loopbody = await BuildHeaderAndExecuteRequests(getParams, endpoint, GetHttpClient()); - ArchivedDto newarchivedDto = - JsonConvert.DeserializeObject(loopbody, m_JsonSerializerSettings); + ArchivedDtos.ArchivedDto newarchivedDto = + JsonConvert.DeserializeObject(loopbody, m_JsonSerializerSettings); newarchived = ArchivedMapper.FromDto(newarchivedDto); archived.List.AddRange(newarchived.List); @@ -1428,7 +1435,7 @@ public class APIService(IAuthService authService, IConfigService configService, } } - foreach (ArchivedModels.ListItem archive in archived.List) + foreach (ArchivedEntities.ListItem archive in archived.List) { List previewids = new(); if (archive.Preview != null) @@ -1451,7 +1458,7 @@ public class APIService(IAuthService authService, IConfigService configService, archivedCollection.ArchivedPostObjects.Add(archive); if (archive.Media != null && archive.Media.Count > 0) { - foreach (ArchivedModels.Medium medium in archive.Media) + foreach (ArchivedEntities.Medium medium in archive.Media) { if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { @@ -1527,14 +1534,14 @@ public class APIService(IAuthService authService, IConfigService configService, } - public async Task GetMessages(string endpoint, string folder, StatusContext ctx) + public async Task GetMessages(string endpoint, string folder, StatusContext ctx) { Log.Debug($"Calling GetMessages - {endpoint}"); try { - Messages messages = new(); - MessageCollection messageCollection = new(); + MessageEntities.Messages messages = new(); + MessageEntities.MessageCollection messageCollection = new(); int post_limit = 50; Dictionary getParams = new() { @@ -1542,49 +1549,54 @@ public class APIService(IAuthService authService, IConfigService configService, }; string? body = await BuildHeaderAndExecuteRequests(getParams, endpoint, GetHttpClient()); - messages = JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); - ctx.Status($"[red]Getting Messages\n[/] [red]Found {messages.list.Count}[/]"); + MessageDtos.MessagesDto? messagesDto = + JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); + messages = MessagesMapper.FromDto(messagesDto); + ctx.Status($"[red]Getting Messages\n[/] [red]Found {messages.List.Count}[/]"); ctx.Spinner(Spinner.Known.Dots); ctx.SpinnerStyle(Style.Parse("blue")); - if (messages.hasMore) + if (messages.HasMore) { - getParams["id"] = messages.list[^1].id.ToString(); + getParams["id"] = messages.List[^1].Id.ToString(); while (true) { - Messages newmessages = new(); + MessageEntities.Messages newMessages = new(); string? loopbody = await BuildHeaderAndExecuteRequests(getParams, endpoint, GetHttpClient()); - newmessages = JsonConvert.DeserializeObject(loopbody, m_JsonSerializerSettings); + MessageDtos.MessagesDto? newMessagesDto = + JsonConvert.DeserializeObject(loopbody, m_JsonSerializerSettings); + newMessages = MessagesMapper.FromDto(newMessagesDto); - messages.list.AddRange(newmessages.list); - ctx.Status($"[red]Getting Messages\n[/] [red]Found {messages.list.Count}[/]"); + messages.List.AddRange(newMessages.List); + ctx.Status($"[red]Getting Messages\n[/] [red]Found {messages.List.Count}[/]"); ctx.Spinner(Spinner.Known.Dots); ctx.SpinnerStyle(Style.Parse("blue")); - if (!newmessages.hasMore) + if (!newMessages.HasMore) { break; } - getParams["id"] = newmessages.list[newmessages.list.Count - 1].id.ToString(); + getParams["id"] = newMessages.List[newMessages.List.Count - 1].Id.ToString(); } } - foreach (Messages.List list in messages.list) + foreach (MessageEntities.ListItem list in messages.List) { if (configService.CurrentConfig.SkipAds) { - if (list.text != null && (list.text.Contains("#ad") || list.text.Contains("/trial/"))) + if (!string.IsNullOrEmpty(list.Text) && + (list.Text.Contains("#ad") || list.Text.Contains("/trial/"))) { continue; } } List messagePreviewIds = new(); - if (list.previews != null && list.previews.Count > 0) + if (list.Previews != null && list.Previews.Count > 0) { - for (int i = 0; i < list.previews.Count; i++) + for (int i = 0; i < list.Previews.Count; i++) { - if (list.previews[i] is long previewId) + if (list.Previews[i] is long previewId) { if (!messagePreviewIds.Contains(previewId)) { @@ -1595,86 +1607,85 @@ public class APIService(IAuthService authService, IConfigService configService, } if (!configService.CurrentConfig.IgnoreOwnMessages || - list.fromUser.id != Convert.ToInt32(authService.CurrentAuth.USER_ID)) + list.FromUser?.Id != Convert.ToInt32(authService.CurrentAuth.USER_ID)) { - await dbService.AddMessage(folder, list.id, list.text != null ? list.text : string.Empty, - list.price != null ? list.price : "0", - list.canPurchaseReason == "opened" ? true : - list.canPurchaseReason != "opened" ? false : (bool?)null ?? false, false, - list.createdAt.HasValue ? list.createdAt.Value : DateTime.Now, - list.fromUser != null && list.fromUser.id != null ? list.fromUser.id.Value : int.MinValue); + await dbService.AddMessage(folder, list.Id, list.Text ?? string.Empty, list.Price ?? "0", + list.CanPurchaseReason == "opened" ? true : + list.CanPurchaseReason != "opened" ? false : (bool?)null ?? false, false, + list.CreatedAt.HasValue ? list.CreatedAt.Value : DateTime.Now, + list.FromUser?.Id ?? int.MinValue); messageCollection.MessageObjects.Add(list); - if (list.canPurchaseReason != "opened" && list.media != null && list.media.Count > 0) + if (list.CanPurchaseReason != "opened" && list.Media != null && list.Media.Count > 0) { - foreach (Messages.Medium medium in list.media) + foreach (MessageEntities.Medium medium in list.Media) { - if (medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + if (medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!messageCollection.Messages.ContainsKey(medium.id)) + if (!messageCollection.Messages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, list.id, medium.files.full.url, null, + await dbService.AddMedia(folder, medium.Id, list.Id, medium.Files.Full.Url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - messageCollection.Messages.Add(medium.id, medium.files.full.url); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + messageCollection.Messages.Add(medium.Id, medium.Files.Full.Url); messageCollection.MessageMedia.Add(medium); } } - else if (medium.canView && medium.files != null && medium.files.drm != null) + else if (medium.CanView && medium.Files != null && medium.Files.Drm != null) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!messageCollection.Messages.ContainsKey(medium.id)) + if (!messageCollection.Messages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, list.id, medium.files.drm.manifest.dash, + await dbService.AddMedia(folder, medium.Id, list.Id, medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - messageCollection.Messages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{list.id}"); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + messageCollection.Messages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{list.Id}"); messageCollection.MessageMedia.Add(medium); } } @@ -1682,76 +1693,76 @@ public class APIService(IAuthService authService, IConfigService configService, } else if (messagePreviewIds.Count > 0) { - foreach (Messages.Medium medium in list.media) + foreach (MessageEntities.Medium medium in list.Media) { - if (medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url) && messagePreviewIds.Contains(medium.id)) + if (medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url) && messagePreviewIds.Contains(medium.Id)) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!messageCollection.Messages.ContainsKey(medium.id)) + if (!messageCollection.Messages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, list.id, medium.files.full.url, null, + await dbService.AddMedia(folder, medium.Id, list.Id, medium.Files.Full.Url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - messageCollection.Messages.Add(medium.id, medium.files.full.url); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + messageCollection.Messages.Add(medium.Id, medium.Files.Full.Url); messageCollection.MessageMedia.Add(medium); } } - else if (medium.canView && medium.files != null && medium.files.drm != null && - messagePreviewIds.Contains(medium.id)) + else if (medium.CanView && medium.Files != null && medium.Files.Drm != null && + messagePreviewIds.Contains(medium.Id)) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!messageCollection.Messages.ContainsKey(medium.id)) + if (!messageCollection.Messages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, list.id, medium.files.drm.manifest.dash, + await dbService.AddMedia(folder, medium.Id, list.Id, medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - messageCollection.Messages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{list.id}"); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + messageCollection.Messages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{list.Id}"); messageCollection.MessageMedia.Add(medium); } } @@ -1785,28 +1796,30 @@ public class APIService(IAuthService authService, IConfigService configService, try { - SingleMessage message = new(); + MessageEntities.SingleMessage message = new(); SinglePaidMessageCollection singlePaidMessageCollection = new(); int post_limit = 50; Dictionary getParams = new() { { "limit", post_limit.ToString() }, { "order", "desc" } }; string? body = await BuildHeaderAndExecuteRequests(getParams, endpoint, GetHttpClient()); - message = JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); + MessageDtos.SingleMessageDto? messageDto = + JsonConvert.DeserializeObject(body, m_JsonSerializerSettings); + message = MessagesMapper.FromDto(messageDto); if (!configService.CurrentConfig.IgnoreOwnMessages || - message.fromUser.id != Convert.ToInt32(authService.CurrentAuth.USER_ID)) + message.FromUser?.Id != Convert.ToInt32(authService.CurrentAuth.USER_ID)) { - await dbService.AddMessage(folder, message.id, message.text != null ? message.text : string.Empty, - message.price != null ? message.price.ToString() : "0", true, false, - message.createdAt.HasValue ? message.createdAt.Value : DateTime.Now, - message.fromUser != null && message.fromUser.id != null ? message.fromUser.id.Value : int.MinValue); + await dbService.AddMessage(folder, message.Id, message.Text ?? string.Empty, + message.Price != null ? message.Price.ToString() : "0", true, false, + message.CreatedAt.HasValue ? message.CreatedAt.Value : DateTime.Now, + message.FromUser?.Id ?? int.MinValue); singlePaidMessageCollection.SingleMessageObjects.Add(message); List messagePreviewIds = new(); - if (message.previews != null && message.previews.Count > 0) + if (message.Previews != null && message.Previews.Count > 0) { - for (int i = 0; i < message.previews.Count; i++) + for (int i = 0; i < message.Previews.Count; i++) { - if (message.previews[i] is long previewId) + if (message.Previews[i] is long previewId) { if (!messagePreviewIds.Contains(previewId)) { @@ -1816,149 +1829,149 @@ public class APIService(IAuthService authService, IConfigService configService, } } - if (message.media != null && message.media.Count > 0) + if (message.Media != null && message.Media.Count > 0) { - foreach (Messages.Medium medium in message.media) + foreach (MessageEntities.Medium medium in message.Media) { - if (!messagePreviewIds.Contains(medium.id) && medium.canView && medium.files != null && - medium.files.full != null && !string.IsNullOrEmpty(medium.files.full.url)) + if (!messagePreviewIds.Contains(medium.Id) && medium.CanView && medium.Files != null && + medium.Files.Full != null && !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!singlePaidMessageCollection.SingleMessages.ContainsKey(medium.id)) + if (!singlePaidMessageCollection.SingleMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, message.id, medium.files.full.url, null, + await dbService.AddMedia(folder, medium.Id, message.Id, medium.Files.Full.Url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - singlePaidMessageCollection.SingleMessages.Add(medium.id, medium.files.full.url); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + singlePaidMessageCollection.SingleMessages.Add(medium.Id, medium.Files.Full.Url); singlePaidMessageCollection.SingleMessageMedia.Add(medium); } } - else if (messagePreviewIds.Contains(medium.id) && medium.canView && medium.files != null && - medium.files.full != null && !string.IsNullOrEmpty(medium.files.full.url)) + else if (messagePreviewIds.Contains(medium.Id) && medium.CanView && medium.Files != null && + medium.Files.Full != null && !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!singlePaidMessageCollection.PreviewSingleMessages.ContainsKey(medium.id)) + if (!singlePaidMessageCollection.PreviewSingleMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, message.id, medium.files.full.url, null, + await dbService.AddMedia(folder, medium.Id, message.Id, medium.Files.Full.Url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - singlePaidMessageCollection.PreviewSingleMessages.Add(medium.id, medium.files.full.url); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + singlePaidMessageCollection.PreviewSingleMessages.Add(medium.Id, medium.Files.Full.Url); singlePaidMessageCollection.PreviewSingleMessageMedia.Add(medium); } } - else if (!messagePreviewIds.Contains(medium.id) && medium.canView && medium.files != null && - medium.files.drm != null) + else if (!messagePreviewIds.Contains(medium.Id) && medium.CanView && medium.Files != null && + medium.Files.Drm != null) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!singlePaidMessageCollection.SingleMessages.ContainsKey(medium.id)) + if (!singlePaidMessageCollection.SingleMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, message.id, medium.files.drm.manifest.dash, + await dbService.AddMedia(folder, medium.Id, message.Id, medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - singlePaidMessageCollection.SingleMessages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{message.id}"); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + singlePaidMessageCollection.SingleMessages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{message.Id}"); singlePaidMessageCollection.SingleMessageMedia.Add(medium); } } - else if (messagePreviewIds.Contains(medium.id) && medium.canView && medium.files != null && - medium.files.drm != null) + else if (messagePreviewIds.Contains(medium.Id) && medium.CanView && medium.Files != null && + medium.Files.Drm != null) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!singlePaidMessageCollection.PreviewSingleMessages.ContainsKey(medium.id)) + if (!singlePaidMessageCollection.PreviewSingleMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, message.id, medium.files.drm.manifest.dash, + await dbService.AddMedia(folder, medium.Id, message.Id, medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - messagePreviewIds.Contains(medium.id) ? true : false, false, null); - singlePaidMessageCollection.PreviewSingleMessages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{message.id}"); + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + messagePreviewIds.Contains(medium.Id), false, null); + singlePaidMessageCollection.PreviewSingleMessages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{message.Id}"); singlePaidMessageCollection.PreviewSingleMessageMedia.Add(medium); } } @@ -2102,152 +2115,154 @@ public class APIService(IAuthService authService, IConfigService configService, } } - foreach (Messages.Medium medium in purchase.media) + foreach (MessageDtos.MediumDto medium in purchase.media) { if (previewids.Count > 0) { - bool has = previewids.Any(cus => cus.Equals(medium.id)); - if (!has && medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + MessageEntities.Medium mappedMedium = MessagesMapper.MapMedium(medium); + bool has = previewids.Any(cus => cus.Equals(medium.Id)); + if (!has && medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!paidMessageCollection.PaidMessages.ContainsKey(medium.id)) + if (!paidMessageCollection.PaidMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, - medium.files.full.url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidMessageCollection.PaidMessages.Add(medium.id, medium.files.full.url); - paidMessageCollection.PaidMessageMedia.Add(medium); + await dbService.AddMedia(folder, medium.Id, purchase.id, + medium.Files.Full.Url, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidMessageCollection.PaidMessages.Add(medium.Id, medium.Files.Full.Url); + paidMessageCollection.PaidMessageMedia.Add(mappedMedium); } } - else if (!has && medium.canView && medium.files != null && medium.files.drm != null) + else if (!has && medium.CanView && medium.Files != null && medium.Files.Drm != null) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!paidMessageCollection.PaidMessages.ContainsKey(medium.id)) + if (!paidMessageCollection.PaidMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidMessageCollection.PaidMessages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - paidMessageCollection.PaidMessageMedia.Add(medium); + await dbService.AddMedia(folder, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidMessageCollection.PaidMessages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + paidMessageCollection.PaidMessageMedia.Add(mappedMedium); } } } else { - if (medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + MessageEntities.Medium mappedMedium = MessagesMapper.MapMedium(medium); + if (medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!paidMessageCollection.PaidMessages.ContainsKey(medium.id)) + if (!paidMessageCollection.PaidMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, - medium.files.full.url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidMessageCollection.PaidMessages.Add(medium.id, medium.files.full.url); - paidMessageCollection.PaidMessageMedia.Add(medium); + await dbService.AddMedia(folder, medium.Id, purchase.id, + medium.Files.Full.Url, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidMessageCollection.PaidMessages.Add(medium.Id, medium.Files.Full.Url); + paidMessageCollection.PaidMessageMedia.Add(mappedMedium); } } - else if (medium.canView && medium.files != null && medium.files.drm != null) + else if (medium.CanView && medium.Files != null && medium.Files.Drm != null) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } - if (!paidMessageCollection.PaidMessages.ContainsKey(medium.id)) + if (!paidMessageCollection.PaidMessages.ContainsKey(medium.Id)) { - await dbService.AddMedia(folder, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - paidMessageCollection.PaidMessages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - paidMessageCollection.PaidMessageMedia.Add(medium); + await dbService.AddMedia(folder, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + paidMessageCollection.PaidMessages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + paidMessageCollection.PaidMessageMedia.Add(mappedMedium); } } } @@ -2576,7 +2591,7 @@ public class APIService(IAuthService authService, IConfigService configService, "PurchasedTab purchase media null, setting empty list | userId={UserId} username={Username} purchaseId={PurchaseId} responseType={ResponseType} createdAt={CreatedAt} postedAt={PostedAt}", user.Key, purchasedTabCollection.Username, purchase.id, purchase.responseType, purchase.createdAt, purchase.postedAt); - purchase.media = new List(); + purchase.media = new List(); } switch (purchase.responseType) @@ -2617,95 +2632,96 @@ public class APIService(IAuthService authService, IConfigService configService, purchase.isArchived.HasValue ? purchase.isArchived.Value : false, purchase.createdAt != null ? purchase.createdAt.Value : purchase.postedAt.Value); purchasedTabCollection.PaidPosts.PaidPostObjects.Add(purchase); - foreach (Messages.Medium medium in purchase.media) + foreach (MessageDtos.MediumDto medium in purchase.media) { - if (medium.type == "photo" && !configService.CurrentConfig.DownloadImages) + MessageEntities.Medium mappedMedium = MessagesMapper.MapMedium(medium); + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && !configService.CurrentConfig.DownloadAudios) + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } if (previewids.Count > 0) { - bool has = previewids.Any(cus => cus.Equals(medium.id)); - if (!has && medium.canView && medium.files != null && - medium.files.full != null && !string.IsNullOrEmpty(medium.files.full.url)) + bool has = previewids.Any(cus => cus.Equals(medium.Id)); + if (!has && medium.CanView && medium.Files != null && + medium.Files.Full != null && !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.id)) + if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.full.url, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.id, - medium.files.full.url); - purchasedTabCollection.PaidPosts.PaidPostMedia.Add(medium); + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Full.Url, null, null, null, "Posts", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.Id, + medium.Files.Full.Url); + purchasedTabCollection.PaidPosts.PaidPostMedia.Add(mappedMedium); } } - else if (!has && medium.canView && medium.files != null && - medium.files.drm != null) + else if (!has && medium.CanView && medium.Files != null && + medium.Files.Drm != null) { - if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.id)) + if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - purchasedTabCollection.PaidPosts.PaidPostMedia.Add(medium); + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Posts", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + purchasedTabCollection.PaidPosts.PaidPostMedia.Add(mappedMedium); } } } else { - if (medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + if (medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.id)) + if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.full.url, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.id, - medium.files.full.url); - purchasedTabCollection.PaidPosts.PaidPostMedia.Add(medium); + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Full.Url, null, null, null, "Posts", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.Id, + medium.Files.Full.Url); + purchasedTabCollection.PaidPosts.PaidPostMedia.Add(mappedMedium); } } - else if (medium.canView && medium.files != null && medium.files.drm != null) + else if (medium.CanView && medium.Files != null && medium.Files.Drm != null) { - if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.id)) + if (!purchasedTabCollection.PaidPosts.PaidPosts.ContainsKey(medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Posts", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - previewids.Contains(medium.id) ? true : false, false, null); - purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - purchasedTabCollection.PaidPosts.PaidPostMedia.Add(medium); + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Posts", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + previewids.Contains(medium.Id), false, null); + purchasedTabCollection.PaidPosts.PaidPosts.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + purchasedTabCollection.PaidPosts.PaidPostMedia.Add(mappedMedium); } } } @@ -2759,176 +2775,182 @@ public class APIService(IAuthService authService, IConfigService configService, } } - foreach (Messages.Medium medium in purchase.media) + foreach (MessageDtos.MediumDto medium in purchase.media) { if (paidMessagePreviewids.Count > 0) { - bool has = paidMessagePreviewids.Any(cus => cus.Equals(medium.id)); - if (!has && medium.canView && medium.files != null && - medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + MessageEntities.Medium mappedMedium = MessagesMapper.MapMedium(medium); + bool has = paidMessagePreviewids.Any(cus => cus.Equals(medium.Id)); + if (!has && medium.CanView && medium.Files != null && + medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (medium.type == "photo" && + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } if (!purchasedTabCollection.PaidMessages.PaidMessages.ContainsKey( - medium.id)) + medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.full.url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - paidMessagePreviewids.Contains(medium.id) ? true : false, false, + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Full.Url, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + paidMessagePreviewids.Contains(medium.Id), false, null); - purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.id, - medium.files.full.url); - purchasedTabCollection.PaidMessages.PaidMessageMedia.Add(medium); + purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.Id, + medium.Files.Full.Url); + purchasedTabCollection.PaidMessages.PaidMessageMedia.Add( + mappedMedium); } } - else if (!has && medium.canView && medium.files != null && - medium.files.drm != null) + else if (!has && medium.CanView && medium.Files != null && + medium.Files.Drm != null) { - if (medium.type == "photo" && + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } if (!purchasedTabCollection.PaidMessages.PaidMessages.ContainsKey( - medium.id)) + medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - paidMessagePreviewids.Contains(medium.id) ? true : false, false, + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + paidMessagePreviewids.Contains(medium.Id), false, null); - purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - purchasedTabCollection.PaidMessages.PaidMessageMedia.Add(medium); + purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + purchasedTabCollection.PaidMessages.PaidMessageMedia.Add( + mappedMedium); } } } else { - if (medium.canView && medium.files != null && medium.files.full != null && - !string.IsNullOrEmpty(medium.files.full.url)) + MessageEntities.Medium mappedMedium = MessagesMapper.MapMedium(medium); + if (medium.CanView && medium.Files != null && medium.Files.Full != null && + !string.IsNullOrEmpty(medium.Files.Full.Url)) { - if (medium.type == "photo" && + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } if (!purchasedTabCollection.PaidMessages.PaidMessages.ContainsKey( - medium.id)) + medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.full.url, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - paidMessagePreviewids.Contains(medium.id) ? true : false, false, + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Full.Url, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + paidMessagePreviewids.Contains(medium.Id), false, null); - purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.id, - medium.files.full.url); - purchasedTabCollection.PaidMessages.PaidMessageMedia.Add(medium); + purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.Id, + medium.Files.Full.Url); + purchasedTabCollection.PaidMessages.PaidMessageMedia.Add( + mappedMedium); } } - else if (medium.canView && medium.files != null && medium.files.drm != null) + else if (medium.CanView && medium.Files != null && medium.Files.Drm != null) { - if (medium.type == "photo" && + if (medium.Type == "photo" && !configService.CurrentConfig.DownloadImages) { continue; } - if (medium.type == "video" && + if (medium.Type == "video" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "gif" && !configService.CurrentConfig.DownloadVideos) + if (medium.Type == "gif" && !configService.CurrentConfig.DownloadVideos) { continue; } - if (medium.type == "audio" && + if (medium.Type == "audio" && !configService.CurrentConfig.DownloadAudios) { continue; } if (!purchasedTabCollection.PaidMessages.PaidMessages.ContainsKey( - medium.id)) + medium.Id)) { - await dbService.AddMedia(path, medium.id, purchase.id, - medium.files.drm.manifest.dash, null, null, null, "Messages", - medium.type == "photo" ? "Images" : - medium.type == "video" || medium.type == "gif" ? "Videos" : - medium.type == "audio" ? "Audios" : null, - paidMessagePreviewids.Contains(medium.id) ? true : false, false, + await dbService.AddMedia(path, medium.Id, purchase.id, + medium.Files.Drm.Manifest.Dash, null, null, null, "Messages", + medium.Type == "photo" ? "Images" : + medium.Type == "video" || medium.Type == "gif" ? "Videos" : + medium.Type == "audio" ? "Audios" : null, + paidMessagePreviewids.Contains(medium.Id), false, null); - purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.id, - $"{medium.files.drm.manifest.dash},{medium.files.drm.signature.dash.CloudFrontPolicy},{medium.files.drm.signature.dash.CloudFrontSignature},{medium.files.drm.signature.dash.CloudFrontKeyPairId},{medium.id},{purchase.id}"); - purchasedTabCollection.PaidMessages.PaidMessageMedia.Add(medium); + purchasedTabCollection.PaidMessages.PaidMessages.Add(medium.Id, + $"{medium.Files.Drm.Manifest.Dash},{medium.Files.Drm.Signature.Dash.CloudFrontPolicy},{medium.Files.Drm.Signature.Dash.CloudFrontSignature},{medium.Files.Drm.Signature.Dash.CloudFrontKeyPairId},{medium.Id},{purchase.id}"); + purchasedTabCollection.PaidMessages.PaidMessageMedia.Add( + mappedMedium); } } } diff --git a/OF DL/Services/DownloadService.cs b/OF DL/Services/DownloadService.cs index 509433b..577b4c2 100644 --- a/OF DL/Services/DownloadService.cs +++ b/OF DL/Services/DownloadService.cs @@ -4,17 +4,16 @@ using System.Xml.Linq; using FFmpeg.NET; using FFmpeg.NET.Events; using OF_DL.Models; -using OF_DL.Models.Messages; using OF_DL.Models.Post; using OF_DL.Models.Purchased; using OF_DL.Models.Streams; using OF_DL.Enumerations; -using ArchivedModels = OF_DL.Models.Entities.Archived; +using OF_DL.Models.Entities.Common; +using ArchivedEntities = OF_DL.Models.Entities.Archived; using OF_DL.Utils; using Serilog; using Serilog.Events; -using static OF_DL.Models.Messages.Messages; -using FromUser = OF_DL.Models.Messages.FromUser; +using MessageEntities = OF_DL.Models.Entities.Messages; namespace OF_DL.Services; @@ -1036,14 +1035,14 @@ public class DownloadService( public async Task DownloadMessageMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, List? messageInfo, Medium? messageMedia, - Messages.FromUser? fromUser, Dictionary users) + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.ListItem? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users) { string path; - if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.id is not null && - messageInfo?.createdAt is not null) + if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.Id is not null && + messageInfo?.CreatedAt is not null) { - path = $"/Messages/Free/{messageInfo.id} {messageInfo.createdAt.Value:yyyy-MM-dd HH-mm-ss}"; + path = $"/Messages/Free/{messageInfo.Id} {messageInfo.CreatedAt.Value:yyyy-MM-dd HH-mm-ss}"; } else { @@ -1059,15 +1058,14 @@ public class DownloadService( } public async Task DownloadMessagePreviewMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users) + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users) { string path; - if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.id is not null && - messageInfo?.createdAt is not null) + if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.Id is not null && + messageInfo?.CreatedAt is not null) { - path = $"/Messages/Free/{messageInfo.id} {messageInfo.createdAt.Value:yyyy-MM-dd HH-mm-ss}"; + path = $"/Messages/Free/{messageInfo.Id} {messageInfo.CreatedAt.Value:yyyy-MM-dd HH-mm-ss}"; } else { @@ -1084,8 +1082,8 @@ public class DownloadService( public async Task DownloadArchivedMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, ArchivedModels.ListItem? messageInfo, - ArchivedModels.Medium? messageMedia, Models.Entities.Common.Author? author, + IProgressReporter progressReporter, string? filenameFormat, ArchivedEntities.ListItem? messageInfo, + ArchivedEntities.Medium? messageMedia, Author? author, Dictionary users) { string path = "/Archived/Posts/Free"; @@ -1110,7 +1108,7 @@ public class DownloadService( public async Task DownloadPurchasedMedia(string url, string folder, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Purchased.List? messageInfo, - Medium? messageMedia, + MessageEntities.Medium? messageMedia, Purchased.FromUser? fromUser, Dictionary users) { string path; @@ -1133,15 +1131,14 @@ public class DownloadService( } public async Task DownloadSinglePurchasedMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users) + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users) { string path; - if (configService.CurrentConfig.FolderPerPaidMessage && messageInfo != null && messageInfo?.id is not null && - messageInfo?.createdAt is not null) + if (configService.CurrentConfig.FolderPerPaidMessage && messageInfo != null && messageInfo?.Id is not null && + messageInfo?.CreatedAt is not null) { - path = $"/Messages/Paid/{messageInfo.id} {messageInfo.createdAt.Value:yyyy-MM-dd HH-mm-ss}"; + path = $"/Messages/Paid/{messageInfo.Id} {messageInfo.CreatedAt.Value:yyyy-MM-dd HH-mm-ss}"; } else { @@ -1163,7 +1160,7 @@ public class DownloadService( IProgressReporter progressReporter, string? filenameFormat, Purchased.List? messageInfo, - Medium? messageMedia, + MessageEntities.Medium? messageMedia, Purchased.FromUser? fromUser, Dictionary users) { @@ -1193,8 +1190,8 @@ public class DownloadService( public async Task DownloadMessageDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, List? messageInfo, Medium? messageMedia, - Messages.FromUser? fromUser, Dictionary users) + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.ListItem? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users) { try { @@ -1202,10 +1199,10 @@ public class DownloadService( string path; Uri uri = new(url); string filename = Path.GetFileName(uri.LocalPath).Split(".")[0]; - if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.id is not null && - messageInfo?.createdAt is not null) + if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.Id is not null && + messageInfo?.CreatedAt is not null) { - path = $"/Messages/Free/{messageInfo.id} {messageInfo.createdAt.Value:yyyy-MM-dd HH-mm-ss}/Videos"; + path = $"/Messages/Free/{messageInfo.Id} {messageInfo.CreatedAt.Value:yyyy-MM-dd HH-mm-ss}/Videos"; } else { @@ -1322,9 +1319,8 @@ public class DownloadService( public async Task DownloadSingleMessagePreviewDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users) + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users) { try { @@ -1332,10 +1328,10 @@ public class DownloadService( string path; Uri uri = new(url); string filename = Path.GetFileName(uri.LocalPath).Split(".")[0]; - if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.id is not null && - messageInfo?.createdAt is not null) + if (configService.CurrentConfig.FolderPerMessage && messageInfo != null && messageInfo?.Id is not null && + messageInfo?.CreatedAt is not null) { - path = $"/Messages/Free/{messageInfo.id} {messageInfo.createdAt.Value:yyyy-MM-dd HH-mm-ss}/Videos"; + path = $"/Messages/Free/{messageInfo.Id} {messageInfo.CreatedAt.Value:yyyy-MM-dd HH-mm-ss}/Videos"; } else { @@ -1454,7 +1450,7 @@ public class DownloadService( public async Task DownloadPurchasedMessageDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Purchased.List? messageInfo, - Medium? messageMedia, + MessageEntities.Medium? messageMedia, Purchased.FromUser? fromUser, Dictionary users) { try @@ -1582,9 +1578,8 @@ public class DownloadService( public async Task DownloadSinglePurchasedMessageDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users) + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users) { try { @@ -1593,9 +1588,9 @@ public class DownloadService( Uri uri = new(url); string filename = Path.GetFileName(uri.LocalPath).Split(".")[0]; if (configService.CurrentConfig.FolderPerPaidMessage && messageInfo != null && - messageInfo?.id is not null && messageInfo?.createdAt is not null) + messageInfo?.Id is not null && messageInfo?.CreatedAt is not null) { - path = $"/Messages/Paid/{messageInfo.id} {messageInfo.createdAt.Value:yyyy-MM-dd HH-mm-ss}/Videos"; + path = $"/Messages/Paid/{messageInfo.Id} {messageInfo.CreatedAt.Value:yyyy-MM-dd HH-mm-ss}/Videos"; } else { @@ -2097,7 +2092,7 @@ public class DownloadService( public async Task DownloadPurchasedPostDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Purchased.List? postInfo, - Medium? postMedia, + MessageEntities.Medium? postMedia, Purchased.FromUser? fromUser, Dictionary users) { try @@ -2227,9 +2222,9 @@ public class DownloadService( public async Task DownloadArchivedPostDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, ArchivedModels.ListItem? postInfo, - ArchivedModels.Medium? postMedia, - Models.Entities.Common.Author? author, Dictionary users) + IProgressReporter progressReporter, string? filenameFormat, ArchivedEntities.ListItem? postInfo, + ArchivedEntities.Medium? postMedia, + Author? author, Dictionary users) { try { @@ -2454,7 +2449,7 @@ public class DownloadService( public async Task DownloadArchived(string username, long userId, string path, Dictionary users, bool clientIdBlobMissing, bool devicePrivateKeyMissing, - ArchivedModels.ArchivedCollection archived, IProgressReporter progressReporter) + ArchivedEntities.ArchivedCollection archived, IProgressReporter progressReporter) { Log.Debug($"Calling DownloadArchived - {username}"); @@ -2511,9 +2506,9 @@ public class DownloadService( pssh); } - ArchivedModels.Medium? mediaInfo = + ArchivedEntities.Medium? mediaInfo = archived.ArchivedPostMedia.FirstOrDefault(m => m.Id == archivedKVP.Key); - ArchivedModels.ListItem? postInfo = + ArchivedEntities.ListItem? postInfo = archived.ArchivedPostObjects.FirstOrDefault(p => p?.Media?.Contains(mediaInfo) == true); isNew = await DownloadArchivedPostDRMVideo( @@ -2541,9 +2536,9 @@ public class DownloadService( } else { - ArchivedModels.Medium? mediaInfo = + ArchivedEntities.Medium? mediaInfo = archived.ArchivedPostMedia.FirstOrDefault(m => m.Id == archivedKVP.Key); - ArchivedModels.ListItem? postInfo = + ArchivedEntities.ListItem? postInfo = archived.ArchivedPostObjects.FirstOrDefault(p => p?.Media?.Contains(mediaInfo) == true); isNew = await DownloadArchivedMedia( @@ -2585,7 +2580,7 @@ public class DownloadService( public async Task DownloadMessages(string username, long userId, string path, Dictionary users, bool clientIdBlobMissing, bool devicePrivateKeyMissing, - MessageCollection messages, IProgressReporter progressReporter) + MessageEntities.MessageCollection messages, IProgressReporter progressReporter) { Log.Debug($"Calling DownloadMessages - {username}"); @@ -2641,9 +2636,10 @@ public class DownloadService( pssh); } - Medium? mediaInfo = messages.MessageMedia.FirstOrDefault(m => m.id == messageKVP.Key); - List? messageInfo = - messages.MessageObjects.FirstOrDefault(p => p?.media?.Contains(mediaInfo) == true); + MessageEntities.Medium? mediaInfo = + messages.MessageMedia.FirstOrDefault(m => m.Id == messageKVP.Key); + MessageEntities.ListItem? messageInfo = messages.MessageObjects.FirstOrDefault(p => + p?.Media?.Any(m => m.Id == messageKVP.Key) == true); isNew = await DownloadMessageDRMVideo( policy, @@ -2660,7 +2656,7 @@ public class DownloadService( string.Empty, messageInfo, mediaInfo, - messageInfo?.fromUser, + messageInfo?.FromUser, users); } else @@ -2670,8 +2666,9 @@ public class DownloadService( } else { - Medium? mediaInfo = messages.MessageMedia.FirstOrDefault(m => m.id == messageKVP.Key); - List? messageInfo = messages.MessageObjects.FirstOrDefault(p => p?.media?.Contains(mediaInfo) == true); + MessageEntities.Medium? mediaInfo = messages.MessageMedia.FirstOrDefault(m => m.Id == messageKVP.Key); + MessageEntities.ListItem? messageInfo = messages.MessageObjects.FirstOrDefault(p => + p?.Media?.Any(m => m.Id == messageKVP.Key) == true); isNew = await DownloadMessageMedia( messageKVP.Value, @@ -2683,7 +2680,7 @@ public class DownloadService( string.Empty, messageInfo, mediaInfo, - messageInfo?.fromUser, + messageInfo?.FromUser, users); } @@ -2757,11 +2754,11 @@ public class DownloadService( $"https://onlyfans.com/api2/v2/users/media/{parsed[4]}/drm/message/{parsed[5]}?type=widevine", pssh); - Medium? mediaInfo = - paidMessageCollection.PaidMessageMedia.FirstOrDefault(m => m.id == kvp.Key); + MessageEntities.Medium? mediaInfo = + paidMessageCollection.PaidMessageMedia.FirstOrDefault(m => m.Id == kvp.Key); Purchased.List? messageInfo = paidMessageCollection.PaidMessageObjects.FirstOrDefault(p => - p?.media?.Contains(mediaInfo) == true); + p?.media?.Any(m => m.Id == kvp.Key) == true); isNew = await DownloadPurchasedMessageDRMVideo(parsed[1], parsed[2], parsed[3], parsed[0], decryptionKey, path, lastModified, kvp.Key, "Messages", progressReporter, @@ -2775,10 +2772,10 @@ public class DownloadService( } else { - Medium? mediaInfo = - paidMessageCollection.PaidMessageMedia.FirstOrDefault(m => m.id == kvp.Key); - Purchased.List? messageInfo = - paidMessageCollection.PaidMessageObjects.FirstOrDefault(p => p?.media?.Contains(mediaInfo) == true); + MessageEntities.Medium? mediaInfo = + paidMessageCollection.PaidMessageMedia.FirstOrDefault(m => m.Id == kvp.Key); + Purchased.List? messageInfo = paidMessageCollection.PaidMessageObjects.FirstOrDefault(p => + p?.media?.Any(m => m.Id == kvp.Key) == true); isNew = await DownloadPurchasedMedia(kvp.Value, path, kvp.Key, "Messages", progressReporter, configService.CurrentConfig.GetCreatorFileNameFormatConfig(username).MessageFileNameFormat ?? string.Empty, messageInfo, mediaInfo, messageInfo?.fromUser, users); @@ -3032,9 +3029,11 @@ public class DownloadService( $"https://onlyfans.com/api2/v2/users/media/{parsed[4]}/drm/post/{parsed[5]}?type=widevine", pssh); - Medium? mediaInfo = purchasedPosts.PaidPostMedia.FirstOrDefault(m => m.id == postKVP.Key); + MessageEntities.Medium? mediaInfo = + purchasedPosts.PaidPostMedia.FirstOrDefault(m => m.Id == postKVP.Key); Purchased.List? postInfo = - purchasedPosts.PaidPostObjects.FirstOrDefault(p => p?.media?.Contains(mediaInfo) == true); + purchasedPosts.PaidPostObjects.FirstOrDefault(p => + p?.media?.Any(m => m.Id == postKVP.Key) == true); isNew = await DownloadPurchasedPostDRMVideo(parsed[1], parsed[2], parsed[3], parsed[0], decryptionKey, path, lastModified, postKVP.Key, "Posts", progressReporter, @@ -3048,9 +3047,10 @@ public class DownloadService( } else { - Medium? mediaInfo = purchasedPosts.PaidPostMedia.FirstOrDefault(m => m.id == postKVP.Key); + MessageEntities.Medium? mediaInfo = + purchasedPosts.PaidPostMedia.FirstOrDefault(m => m.Id == postKVP.Key); Purchased.List? postInfo = - purchasedPosts.PaidPostObjects.FirstOrDefault(p => p?.media?.Contains(mediaInfo) == true); + purchasedPosts.PaidPostObjects.FirstOrDefault(p => p?.media?.Any(m => m.Id == postKVP.Key) == true); isNew = await DownloadPurchasedPostMedia(postKVP.Value, path, postKVP.Key, "Posts", progressReporter, configService.CurrentConfig.GetCreatorFileNameFormatConfig(username).PostFileNameFormat ?? string.Empty, postInfo, mediaInfo, postInfo?.fromUser, users); diff --git a/OF DL/Services/IAPIService.cs b/OF DL/Services/IAPIService.cs index ae00a9f..d8e7e52 100644 --- a/OF DL/Services/IAPIService.cs +++ b/OF DL/Services/IAPIService.cs @@ -1,11 +1,11 @@ using Newtonsoft.Json.Linq; using OF_DL.Models; -using OF_DL.Models.Messages; using OF_DL.Models.Post; using OF_DL.Models.Purchased; using OF_DL.Models.Streams; using OF_DL.Enumerations; -using ArchivedModels = OF_DL.Models.Entities.Archived; +using ArchivedEntities = OF_DL.Models.Entities.Archived; +using MessageEntities = OF_DL.Models.Entities.Messages; using Spectre.Console; namespace OF_DL.Services; @@ -28,8 +28,8 @@ public interface IAPIService Task GetPosts(string endpoint, string folder, List paid_post_ids, StatusContext ctx); Task GetPost(string endpoint, string folder); Task GetStreams(string endpoint, string folder, List paid_post_ids, StatusContext ctx); - Task GetArchived(string endpoint, string folder, StatusContext ctx); - Task GetMessages(string endpoint, string folder, StatusContext ctx); + Task GetArchived(string endpoint, string folder, StatusContext ctx); + Task GetMessages(string endpoint, string folder, StatusContext ctx); Task GetPaidMessages(string endpoint, string folder, string username, StatusContext ctx); Task GetPaidMessage(string endpoint, string folder); Task> GetPurchasedTabUsers(string endpoint, Dictionary users); diff --git a/OF DL/Services/IDownloadService.cs b/OF DL/Services/IDownloadService.cs index b334e91..1f90736 100644 --- a/OF DL/Services/IDownloadService.cs +++ b/OF DL/Services/IDownloadService.cs @@ -1,11 +1,10 @@ using OF_DL.Models; -using ArchivedModels = OF_DL.Models.Entities.Archived; -using OF_DL.Models.Messages; +using OF_DL.Models.Entities.Common; +using ArchivedEntities = OF_DL.Models.Entities.Archived; using OF_DL.Models.Post; using OF_DL.Models.Purchased; using OF_DL.Models.Streams; -using static OF_DL.Models.Messages.Messages; -using FromUser = OF_DL.Models.Messages.FromUser; +using MessageEntities = OF_DL.Models.Entities.Messages; namespace OF_DL.Services; @@ -17,15 +16,15 @@ public interface IDownloadService string serverFileName, string resolvedFileName, string extension, IProgressReporter progressReporter); Task DownloadArchivedMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, ArchivedModels.ListItem? messageInfo, - ArchivedModels.Medium? messageMedia, Models.Entities.Common.Author? author, + IProgressReporter progressReporter, string? filenameFormat, ArchivedEntities.ListItem? messageInfo, + ArchivedEntities.Medium? messageMedia, Author? author, Dictionary users); Task DownloadArchivedPostDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, ArchivedModels.ListItem? postInfo, - ArchivedModels.Medium? postMedia, - Models.Entities.Common.Author? author, Dictionary users); + IProgressReporter progressReporter, string? filenameFormat, ArchivedEntities.ListItem? postInfo, + ArchivedEntities.Medium? postMedia, + Author? author, Dictionary users); Task DownloadPostDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, IProgressReporter progressReporter, @@ -41,12 +40,13 @@ public interface IDownloadService Task DownloadMessageDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, IProgressReporter progressReporter, - string? filenameFormat, List? messageInfo, Medium? messageMedia, Messages.FromUser? fromUser, + string? filenameFormat, MessageEntities.ListItem? messageInfo, MessageEntities.Medium? messageMedia, + FromUser? fromUser, Dictionary users); Task DownloadMessageMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, List? messageInfo, Medium? messageMedia, - Messages.FromUser? fromUser, Dictionary users); + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.ListItem? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users); Task DownloadPostMedia(string url, string folder, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Post.List? postInfo, Post.Medium? postMedia, @@ -58,35 +58,33 @@ public interface IDownloadService Task DownloadPurchasedMedia(string url, string folder, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Purchased.List? messageInfo, - Medium? messageMedia, + MessageEntities.Medium? messageMedia, Purchased.FromUser? fromUser, Dictionary users); Task DownloadSinglePurchasedMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users); + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users); Task DownloadPurchasedMessageDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Purchased.List? messageInfo, - Medium? messageMedia, + MessageEntities.Medium? messageMedia, Purchased.FromUser? fromUser, Dictionary users); Task DownloadSinglePurchasedMessageDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users); + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users); Task DownloadPurchasedPostDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Purchased.List? postInfo, - Medium? postMedia, + MessageEntities.Medium? postMedia, Purchased.FromUser? fromUser, Dictionary users); Task DownloadPurchasedPostMedia(string url, string folder, long media_id, string api_type, IProgressReporter progressReporter, string? filenameFormat, Purchased.List? messageInfo, - Medium? messageMedia, + MessageEntities.Medium? messageMedia, Purchased.FromUser? fromUser, Dictionary users); Task DownloadStoryMedia(string url, string folder, long media_id, string api_type, @@ -103,14 +101,12 @@ public interface IDownloadService Task DownloadSingleMessagePreviewDRMVideo(string policy, string signature, string kvp, string url, string decryptionKey, string folder, DateTime lastModified, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users); + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users); Task DownloadMessagePreviewMedia(string url, string folder, long media_id, string api_type, - IProgressReporter progressReporter, string? filenameFormat, SingleMessage? messageInfo, - Medium? messageMedia, - FromUser? fromUser, Dictionary users); + IProgressReporter progressReporter, string? filenameFormat, MessageEntities.SingleMessage? messageInfo, + MessageEntities.Medium? messageMedia, FromUser? fromUser, Dictionary users); Task DownloadHighlights(string username, long userId, string path, HashSet paidPostIds, IProgressReporter progressReporter); @@ -119,11 +115,11 @@ public interface IDownloadService IProgressReporter progressReporter); Task DownloadArchived(string username, long userId, string path, Dictionary users, - bool clientIdBlobMissing, bool devicePrivateKeyMissing, ArchivedModels.ArchivedCollection archived, + bool clientIdBlobMissing, bool devicePrivateKeyMissing, ArchivedEntities.ArchivedCollection archived, IProgressReporter progressReporter); Task DownloadMessages(string username, long userId, string path, Dictionary users, - bool clientIdBlobMissing, bool devicePrivateKeyMissing, MessageCollection messages, + bool clientIdBlobMissing, bool devicePrivateKeyMissing, MessageEntities.MessageCollection messages, IProgressReporter progressReporter); Task DownloadPaidMessages(string username, string path, Dictionary users,