fix: minor parsing issues and other improvements (#194)

* feat: add `ConfirmDialog`

This usually appears in the `playability_status` object.

* fix(PlayerErrorMessage): check if `iconType` exists before parsing

* chore(parser): fix a few inconsistencies

* feat(ytmusic): add `MetadataScreen`

TODO: Check TrackInfo, YouTube Music is probably getting some minor UI updates.
This commit is contained in:
LuanRT
2022-09-17 19:14:46 -03:00
committed by GitHub
parent a90f5eb853
commit dcf2b720a0
7 changed files with 56 additions and 9 deletions

View File

@@ -0,0 +1,24 @@
import Parser from '..';
import Text from './misc/Text';
import Button from './Button';
import { YTNode } from '../helpers';
class ConfirmDialog extends YTNode {
static type = 'ConfirmDialog';
title: Text;
confirm_button: Button | null;
cancel_button: Button | null;
dialog_messages: Text[];
constructor (data: any) {
super();
this.title = new Text(data.title);
this.confirm_button = Parser.parseItem<Button>(data.confirmButton, Button);
this.cancel_button = Parser.parseItem<Button>(data.cancelButton, Button);
this.dialog_messages = data.dialogMessages.map((txt: any) => new Text(txt));
}
}
export default ConfirmDialog;

View File

@@ -0,0 +1,15 @@
import Parser from '..';
import { YTNode } from '../helpers';
class MetadataScreen extends YTNode {
static type = 'MetadataScreen';
section_list;
constructor (data: any) {
super();
this.section_list = Parser.parseItem(data);
}
}
export default MetadataScreen;

View File

@@ -1,6 +1,8 @@
import Parser from '../index';
import Text from './misc/Text';
import Thumbnail from './misc/Thumbnail';
import Button from './Button';
import { YTNode } from '../helpers';
class PlayerErrorMessage extends YTNode {
@@ -8,17 +10,17 @@ class PlayerErrorMessage extends YTNode {
subreason: Text;
reason: Text;
proceed_button;
proceed_button: Button | null;
thumbnails: Thumbnail[];
icon_type: string;
icon_type: string | null;
constructor(data: any) {
super();
this.subreason = new Text(data.subreason);
this.reason = new Text(data.reason);
this.proceed_button = Parser.parse(data.proceedButton);
this.proceed_button = Parser.parseItem<Button>(data.proceedButton, Button);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.icon_type = data.icon.iconType;
this.icon_type = data.icon?.iconType || null;
}
}

View File

@@ -1,6 +1,7 @@
import Parser from '../index';
import Text from './misc/Text';
import NavigationEndpoint from './NavigationEndpoint';
import SubscriptionNotificationToggleButton from './SubscriptionNotificationToggleButton';
import { YTNode } from '../helpers';
class SubscribeButton extends YTNode {
@@ -14,7 +15,7 @@ class SubscribeButton extends YTNode {
show_preferences: boolean;
subscribed_text: Text;
unsubscribed_text: Text;
notification_preference_button;
notification_preference_button: SubscriptionNotificationToggleButton | null;
endpoint: NavigationEndpoint;
constructor(data: any) {
@@ -27,7 +28,7 @@ class SubscribeButton extends YTNode {
this.show_preferences = data.showPreferences;
this.subscribed_text = new Text(data.subscribedButtonText);
this.unsubscribed_text = new Text(data.unsubscribedButtonText);
this.notification_preference_button = Parser.parse(data.notificationPreferenceButton);
this.notification_preference_button = Parser.parseItem<SubscriptionNotificationToggleButton>(data.notificationPreferenceButton, SubscriptionNotificationToggleButton);
this.endpoint = new NavigationEndpoint(data.serviceEndpoints?.[0] || data.onSubscribeEndpoints?.[0]);
}
}

View File

@@ -1,6 +1,7 @@
import Parser from '../index';
import Text from './misc/Text';
import Button from './Button';
import VideoOwner from './VideoOwner';
import SubscribeButton from './SubscribeButton';
import MetadataRowContainer from './MetadataRowContainer';
import { YTNode } from '../helpers';
@@ -8,7 +9,7 @@ import { YTNode } from '../helpers';
class VideoSecondaryInfo extends YTNode {
static type = 'VideoSecondaryInfo';
owner; // TODO: VideoOwner?
owner: VideoOwner | null;// TODO: VideoOwner?
description: Text;
subscribe_button;
metadata: MetadataRowContainer | null;
@@ -19,7 +20,7 @@ class VideoSecondaryInfo extends YTNode {
constructor(data: any) {
super();
this.owner = Parser.parse(data.owner);
this.owner = Parser.parseItem<VideoOwner>(data.owner);
this.description = new Text(data.description);
this.subscribe_button = Parser.parseItem<SubscribeButton | Button>(data.subscribeButton, [ SubscribeButton, Button ]);
this.metadata = Parser.parseItem<MetadataRowContainer>(data.metadataRowContainer, MetadataRowContainer);