aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Transports/http/downloader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Transports/http/downloader.cpp')
-rw-r--r--src/plugins/Transports/http/downloader.cpp47
1 files changed, 36 insertions, 11 deletions
diff --git a/src/plugins/Transports/http/downloader.cpp b/src/plugins/Transports/http/downloader.cpp
index e2bfbe252..ff1f3b3c1 100644
--- a/src/plugins/Transports/http/downloader.cpp
+++ b/src/plugins/Transports/http/downloader.cpp
@@ -119,10 +119,17 @@ Downloader::Downloader(QObject *parent, const QString &url)
m_metacount = 0;
m_meta_sent = FALSE;
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
- m_codec = QTextCodec::codecForName(settings.value("HTTP/icy_encoding","windows-1252").toByteArray ());
- m_buffer_size = settings.value("HTTP/buffer_size",128).toInt() * 1000;
+ settings.beginGroup("HTTP");
+ m_codec = QTextCodec::codecForName(settings.value("icy_encoding","windows-1252").toByteArray ());
+ m_buffer_size = settings.value("buffer_size",128).toInt() * 1000;
if (!m_codec)
m_codec = QTextCodec::codecForName ("UTF-8");
+#ifdef WITH_ENCA
+ m_analyser = 0;
+ if(settings.value("use_enca", FALSE).toBool())
+ m_analyser = enca_analyser_alloc(settings.value("enca_lang").toByteArray ().constData());
+#endif
+ settings.endGroup();
}
@@ -136,6 +143,10 @@ Downloader::~Downloader()
free(m_stream.buf);
m_stream.buf = 0;
+#ifdef WITH_ENCA
+ if(m_analyser)
+ enca_analyser_free(m_analyser);
+#endif
}
@@ -224,10 +235,7 @@ void Downloader::run()
//proxy
if (QmmpSettings::instance()->isProxyEnabled())
curl_easy_setopt(m_handle, CURLOPT_PROXY,
- strdup((QmmpSettings::instance()->proxy().host() + ":" +
- QString("%1").arg(QmmpSettings::instance()->proxy().port())).
- toLatin1 ().constData ()));
-
+ strdup((QmmpSettings::instance()->proxy().toString().toLatin1().constData())));
if (QmmpSettings::instance()->useProxyAuth())
curl_easy_setopt(m_handle, CURLOPT_PROXYUSERPWD,
strdup((QmmpSettings::instance()->proxy().userName() + ":" +
@@ -343,17 +351,34 @@ void Downloader::readICYMetaData()
qApp->processEvents();
m_mutex.lock();
}
- readBuffer(packet, size);
+ qint64 l = readBuffer(packet, size);
qDebug("Downloader: ICY metadata: %s", packet);
- parseICYMetaData(packet);
+ parseICYMetaData(packet, l);
}
m_mutex.unlock();
}
-void Downloader::parseICYMetaData(char *data)
-{
- QString str = m_codec->toUnicode(data).trimmed();
+void Downloader::parseICYMetaData(char *data, qint64 size)
+{
+ if(!size)
+ return;
+ QTextCodec *codec = m_codec;
+#ifdef WITH_ENCA
+ if(m_analyser)
+ {
+ EncaEncoding encoding = enca_analyse(m_analyser, (uchar *) data, size);
+ if(encoding.charset != ENCA_CS_UNKNOWN)
+ {
+ codec = QTextCodec::codecForName(enca_charset_name(encoding.charset,ENCA_NAME_STYLE_ENCA));
+ qDebug("Downloader: detected charset: %s",
+ enca_charset_name(encoding.charset,ENCA_NAME_STYLE_ENCA));
+ if(!codec)
+ codec = m_codec;
+ }
+ }
+#endif
+ QString str = codec->toUnicode(data).trimmed();
QStringList list(str.split(";", QString::SkipEmptyParts));
foreach(QString line, list)
{