Bug 10612 - lyrics_lyrc.rb gets wrong proxy
: lyrics_lyrc.rb gets wrong proxy
Status: NEW
: Sisyphus
(All bugs in Sisyphus/amarok)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2007-01-08 18:13 by
Modified: 2009-09-19 09:51 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-01-08 18:13:00
В 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 From 2007-01-08 18:16:29 -------
Добавил zerg@ с целью проконсультироваться, как с точки зрения KDE правильнее
всего должен себя вести amarok? Сейчас он, видимо, читает напрямую конфиг
kioslave - может быть есть в kdelibs какие-то методы, которыми правильно
получать это значение? Или вообще amarok не должен иметь такого вызова,
правильнее делать dcop запрос к какому-то компоненту KDE?
------- Comment #2 From 2007-01-08 18:21:44 -------
Быстрые разбирательства показали, что внутри 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 From 2007-01-25 14:02:38 -------
dcop amarok script proxyForUrl http://xxx
значит оттуда содрать можно
------- Comment #4 From 2007-01-25 14:52:41 -------
А может и просто писать в скрипте
@proxy = `dcop amarok script proxyForUrl http://www.ru`
Я не знаю, вдруг поведение proxyForProtocol так задумано