Bug 10612

Summary: lyrics_lyrc.rb gets wrong proxy
Product: Sisyphus Reporter: Mikhail Yakshin <greycat>
Component: kde4-amarokAssignee: Sergey V Turchin <zerg>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: grenka, zerg
Version: unstable   
Hardware: all   
OS: Linux   

Description Mikhail Yakshin 2007-01-08 18:13:00 MSK
В amarok есть скрипт, получающий текст играющей в данный момент песни, лежит в
/usr/share/apps/amarok/scripts/lyrics_lyrc/lyrics_lyrc.rb.

Скрипт написан на Ruby и использует для работы с сетью методы стандартных
библиотек этого языка, а не напрямую методы kdelibs, которые использует сам
amarok. Чтобы работать корректно, скрипт запрашивает у amarok конфигурацию
сетевого подключения, а именно настройки прокси, с помощью такого запроса dcop:

    proxy_host = nil
    proxy_port = nil
    if ( @proxy == nil )
        @proxy = `dcop amarok script proxyForProtocol http`
    end
    proxy_uri = URI.parse( @proxy )
    if ( proxy_uri.class != URI::Generic )
        proxy_host = proxy_uri.host
        proxy_port = proxy_uri.port
    end

amarok же в свою очередь обращается к KDE за этими настройками и делает это не
совсем корректно. В настройках KDE может быть действительно указана прокси (была
указана когда-то давно), но при этом флажок использовать ее не стоит - выбран
вариант прямого подключения. Видимо, amarok не глядя берет настройки из
~/.kde/share/config/kioslaverc, у меня они такие:

[Proxy Settings]
AuthMode=0
NoProxyFor=.house28,.house28.ru,localhost
Proxy Config Script=
ProxyType=0
ReversedException=false
ftpProxy=http://127.0.0.1:3128
httpProxy=http://127.0.0.1:3128
httpsProxy=http://127.0.0.1:3128

и, игнорируя ProxyType, просто выдает то, что есть в поле httpProxy. В
результате при попытке посмотреть текст песни скрипт сваливается с ошибкой
доступа, причем если разбираться - то он лезет через какую-то очень странную
прокси, которая в системе нигде, кроме как в полувыключенных конфигах, не
фигурирует.

Общее предложение: исправить вызов proxyForProtocol в amarok с тем, чтобы он
выдавал корректные настройки прокси.
Comment 1 Mikhail Yakshin 2007-01-08 18:16:29 MSK
Добавил zerg@ с целью проконсультироваться, как с точки зрения KDE правильнее
всего должен себя вести amarok? Сейчас он, видимо, читает напрямую конфиг
kioslave - может быть есть в kdelibs какие-то методы, которыми правильно
получать это значение? Или вообще amarok не должен иметь такого вызова,
правильнее делать dcop запрос к какому-то компоненту KDE?
Comment 2 Mikhail Yakshin 2007-01-08 18:21:44 MSK
Быстрые разбирательства показали, что внутри amarok использует очень простой
вызов из kdelibs:

    QString
    proxyForProtocol(const QString& protocol)
    {
        return KProtocolManager::proxyFor( protocol );
    }

Вот здесь он документирован:
http://developer.kde.org/documentation/library/3.4-api/kio/html/classKProtocolManager.html#e12

Из документации ясно, что по идее - он должен возвращать "the proxy server
address if one is available, or QString::null if not available", т.е. в случае
отключенного прокси - возвращать QString::null?

Это стоит исправить в kdelibs или нужно пробрасывать через amarok еще и proxyType

http://developer.kde.org/documentation/library/3.4-api/kio/html/classKProtocolManager.html#w7

и анализировать его в скрипте?
Comment 3 Sergey V Turchin 2007-01-25 14:02:38 MSK
dcop amarok script proxyForUrl http://xxx
значит оттуда содрать можно
Comment 4 Sergey V Turchin 2007-01-25 14:52:41 MSK
А может и просто писать в скрипте
@proxy = `dcop amarok script proxyForUrl http://www.ru`
Я не знаю, вдруг поведение proxyForProtocol так задумано
Comment 5 Grigory Ustinov 2018-07-18 22:11:56 MSK
Такого пакета больше нет в сизифе. Закрываю багу.
Comment 6 Grigory Ustinov 2018-07-19 19:01:15 MSK
Переоткрываю багу и переношу на нужный компонент.
Comment 7 Sergey V Turchin 2018-07-23 12:14:13 MSK
Там сейчас всё сильно по другому и написано на JS.
Судя по тексту /usr/share/kde4/apps/amarok/scripts/lyrics_lyricwiki/main.js конкретно этой проблеме он не подвержен.