Smarthard / shikicinema

Returns online watching to Shikimori
52 stars 5 forks source link

Просмотр франшиз на одной вкладке плеера. #161

Closed NAC135 closed 1 week ago

NAC135 commented 5 months ago

Практически решает #160

NAC135 commented 5 months ago

Привет, спасибо за фидбек!

Привет и спасибо за PR! Я отметил моменты, которые стоит улучшить по коду. По новым фичам для мастера уже отписывался, поэтому, если ты хочешь, чтобы это попало в релиз, думаю всё же надо реализовать так, либо как-то по-другому согласовывать твоё виденье (в любом случае сначала лучше договорится о том, как и где мы хотим это делать).

Smarthard commented 5 months ago

@NotaCockroach135 привет! Я посмотрел твои ответы и изменения с рефактором. По рефактору могу сказать, что стало сильно лучше. У меня есть только несколько вопросов (ниже по пунктам). Если у тебя будут вопросы ко мне, то предлагаю вести переписку в тг или вк - тут ссылки постить не буду, меня можно найти в группах shikicinema.

1.

выбираем любое аниме (если у него есть франшиза) и сразу открываем его в плеере - в плеере появляется список франшизы в котором нет ненужных тайтлов

Я не очень понимаю, зачем для этого делать выборку из общего списка аниме, а потом дополнительно делать фильтр по данным из конфига сорцов шикимори из гитхаб. Выглядит как мегакостыль. Вот, смотри, я тебе кидал API: /api/animes/820/franchise. Его интерфейс выглядит так:

interface AnimeFranchiseInfo {
    links: AnimeFranchiseLink[];
    nodes: AnimeFranchiseNode[];
}

interface AnimeFranchiseLink {
      id: number;

      /** от какого аниме отношение */
      target_id: number;

      /** по отношению к какому аниме */
      source_id: number;

      /** приквел / сиквел / побочная история / оригинальная история (первоисточник) / альтернативная версия */
      relation: 'prequel' | 'sequel' | 'side_story' | 'parent_story' | 'alternative_version';

      /** с этими полями попробуй сам разбраться */
      source: number;
      target: number;
      weight: number;
}

interface AnimeFranchiseNode {
      /** аниме id (связано с links.source_id и links.target_id */
      id: number;

      /** дата выхода (в секундах!) */
      date: number;

      /** название */
      name: string;

      /** ссылка на постер */
      image_url: string;

      /** ссылка на аниме */
      url: string;

      /** год выхода (1993) */
      year: number;

      /** тип */
      kind: 'Фильм' | 'OVA'; // и т.п...

      weight: number;
}

Почему этот эндпоинт не используешь? По-моему он достаточно прозрачный и не требует изменения CSP в манифесте, дополнительных запросов и сложной логики фильтрации (разве что нужно будет отобрать из links корректные связки source_id и target_id и корректно маппить их с nodes).

2.

Так же удобно было бы сразу видеть что уже просмотрено (я это добавил в виде смайликов)

По реализации по-моему мнению, дизайн сомнительный. Понимаю, что он не сильно отличается от того, что есть в плане списка эпизодов и видео, но есть один важный нюанс - такого не было в оригинальном плеере. Плюс, опять же, на мой взгляд он перегружен, т.к. не совсем понятно с точки зрения пользователя что есть что (см. скриншот):

изображение

Я бы всё же предпочел, чтобы это выглядело так, как описывал в issue. Хз, самое близкое по дизайну то, что на шикимори в франшизах, собственно

изображение

3.

Общий комментарий по коду: почитай, пожалуйста, как пользоваться реактивностью (rxjs) и angular. Рекомендую поискать статьи на хабре, но сначала почитать доки (особенно angular, там и без статей всё понятно):

Персональная рекомендация, если захочешь углубиться, можешь опять же на хабре найти статьи от Tinkoff по angular. Сам их иногда почитываю.

4 (минорная)

Ты правишь код через github? Лучше локально заиметь git и какую-нибудь IDE (рекомендую webstorm) и редактировать код оттуда. Так тебе будет сильно проще локально смотреть изменения, открывать/искать нужные файлы и коммитится не по одному файлу.