Angel777d / kodi.plugin.yandex-music

Yandex Music plugin for Kodi
https://angel777d.github.io/kodi.plugin.yandex-music/
GNU Lesser General Public License v3.0
44 stars 3 forks source link

Не работает поиск #7

Closed thedilletante closed 3 years ago

thedilletante commented 3 years ago

Привет! Спасибо огромное за классный проект. Не могу нарадоваться возможности включать плейлист из Я.музыки прямо на raspberry! Наткнулся на проблему отображения поиска.

Воспроизведение

Ожидаемое поведение Отображается список релевантных песен/исполнителей/альбомов

Наблюдаемое поведение Сообщение об ошибке при запросе Дополнительная информация Версия raspbian

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

Версия kodi

pi@raspberrypi:~ $ apt info kodi
Package: kodi
Version: 2:18.7-1~buster
Priority: optional
Section: video
Source: kodi

Версия плагина

pi@raspberrypi:~ $ cat .kodi/addons/plugin.yandex-music/addon.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.yandex-music" name="yandex-music" version="0.0.38" provider-name="Angelovich">
    <requires>
        <import addon="xbmc.python" version="2.25.0"/>
        <import addon="script.module.requests" version="2.22.0"/>
    </requires>

    <extension point="xbmc.python.pluginsource" library="plugin.py">
        <provides>audio</provides>
    </extension>
    <!-- start="[login|startup]" -->
    <!-- extension point="xbmc.service" library="service.py" start="startup"/-->

    <extension point="xbmc.addon.metadata">
        <summary lang="en_gb">Yandex music</summary>
        <description lang="en_gb">Yandex music addon</description>
        <language>en_gb</language>
        <platform>all</platform>
    </extension>
</addon>

Лог kodi во время ошибки:

2020-12-20 09:30:12.149 T:1454354656  NOTICE: [---] codec: mp3, high_res: False
2020-12-20 09:30:13.958 T:1454354656  NOTICE: [---] build playlist item. tracks: 0
2020-12-20 09:30:16.986 T:1339535584  NOTICE: Previous line repeats 6 times.
2020-12-20 09:30:16.987 T:1339535584  NOTICE: [Radio Service] check valid: True
2020-12-20 09:30:23.180 T:1445961952  NOTICE: [---] sys.argv: ['plugin://plugin.yandex-music/', '56', '?mode=search&title=Search', 'resume:false']
2020-12-20 09:30:23.180 T:1445961952  NOTICE: [---] codec: mp3, high_res: False
2020-12-20 09:30:26.988 T:1339535584  NOTICE: [Radio Service] check valid: True
2020-12-20 09:30:27.305 T:1339535584  NOTICE: [Radio Service] Yandex.Radio::onQueueNextItem
2020-12-20 09:30:27.306 T:1339535584  NOTICE: [Radio Service] Yandex.Radio::queue_next
2020-12-20 09:30:28.339 T:1752953056  NOTICE: CDVDAudioCodecFFmpeg::Open() Successful opened audio decoder mp3float
2020-12-20 09:30:28.472 T:1502601440  NOTICE: [---] high_res: False, dInfo: 2
2020-12-20 09:30:29.154 T:1502601440  NOTICE: [Radio Service] Yandex.Radio::__on_play_next
2020-12-20 09:30:29.155 T:1502601440  NOTICE: [Radio Service] Yandex.Radio::add_next_track
2020-12-20 09:30:36.990 T:1339535584  NOTICE: [Radio Service] check valid: True
2020-12-20 09:30:39.449 T:1445961952   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.TypeError'>
                                            Error Contents: ABCMeta object argument after ** must be a mapping, not NoneType
                                            Traceback (most recent call last):
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/plugin.py", line 670, in <module>
                                                main()
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/plugin.py", line 509, in main
                                                build_search(client)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/plugin.py", line 421, in build_search
                                                results = getSortedResults(client.search(searchString))
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/client.py", line 35, in wrapper
                                                result = method(*args, **kwargs)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/client.py", line 736, in search
                                                return Search.de_json(result, self)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/search/search.py", line 98, in de_json
                                                data['best'] = Best.de_json(data.get('best'), client)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/search/best.py", line 69, in de_json
                                                data['result'] = de_json_result.get(data.get('type_'))(data.get('result'), client)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/artist/artist.py", line 144, in de_json
                                                data['popular_tracks'] = Track.de_list(data.get('popular_tracks'), client)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/track/track.py", line 177, in de_list
                                                tracks.append(cls.de_json(track, client))
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/track/track.py", line 153, in de_json
                                                data['albums'] = Album.de_list(data.get('albums'), client)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/album/album.py", line 226, in de_list
                                                albums.append(cls.de_json(album, client))
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/album/album.py", line 202, in de_json
                                                data['labels'] = Label.de_list(data.get('labels'), client)
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/album/label.py", line 71, in de_list
                                                labels.append(cls.de_json(label, client))
                                              File "/home/pi/.kodi/addons/plugin.yandex-music/lib/yandex-music-api/yandex_music/album/label.py", line 52, in de_json
                                                return cls(client=client, **data)
                                            TypeError: ABCMeta object argument after ** must be a mapping, not NoneType
                                            -->End of Python script error report<--
2020-12-20 09:30:39.876 T:1557651680   ERROR: GetDirectory - Error getting plugin://plugin.yandex-music/?mode=search&title=Search
2020-12-20 09:30:39.877 T:1899934640   ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.yandex-music/?mode=search&title=Search) failed
2020-12-20 09:30:46.129 T:1445961952  NOTICE: [---] sys.argv: ['plugin://plugin.yandex-music/', '57', '', 'resume:false']
2020-12-20 09:30:46.129 T:1445961952  NOTICE: [---] codec: mp3, high_res: False
2020-12-20 09:30:46.992 T:1339535584  NOTICE: [Radio Service] check valid: True
thedilletante commented 3 years ago

Подебажился немного. Нашел проблему в методе yandex_music.Client.search. Раньше, видимо, ожидался следующий формат label:

{
  "id": int,
  "name": str
}

Сейчас приходит просто строка. Например

'labels': ['NoiseArt']

Закрываю issue, пойду ребятам из yandex-music-api заведу.

thedilletante commented 3 years ago

Согласно https://github.com/MarshalX/yandex-music-api/issues/387 - ребята поправили этот баг в ветке development. Релизиться не хотят пока.

Angel777d commented 3 years ago

Спасибо за теплые слова! ))) Да я вроде и так собирался с dev ветки. Проверяю.

Angel777d commented 3 years ago

А, я понял. Проблема в том, что под версию kodi 18 используется питон 2.7 Пришлось ручками даунгредить библиотеку с 3 до 2 питона. Недавно kodi выложили бету 19 версии и под нее плагин уже собран с последними изменениями. Может стоит дать шанс бетке? Очень уж не хочется патчить устаревший код.

thedilletante commented 3 years ago

Спасибо за быстрый ответ и рекомендацию. Буду пробовать накатить бету, похоже, придется научиться ее собирать (не смог найти сборку для raspbian)

Angel777d commented 3 years ago

а там какая то отличная от убунты сборка? а то тут есть такое вроде https://launchpad.net/~team-xbmc/+archive/ubuntu/xbmc-nightly немного не в теме: у меня таргет на андроид и винду

thedilletante commented 3 years ago

Да, к сожалению, сборка другая (raspbian - форк debian, да и то кастомизированный)

Angel777d commented 3 years ago

залил фикс поиска: https://github.com/Angel777d/kodi.plugin.yandex-music/raw/master/bin/kodi.plugin.yandex-music-0.0.39.zip как успехи со сборкой? )

thedilletante commented 3 years ago

Прошу прощения за задержавшийся ответ. Поковырялся со сборкой несколько часов - не осилив, забросил. ( Спасибо за сборку с фиксом!

Angel777d commented 3 years ago

Незачто )