Я посмотрел в CVS Valknut - там никаких коммитов последние 14 месяцев не было, кроме того, он не умеет русский поиск, и интерфейс неудобный. LinuxDC++ насколько я знаю не умеет мультизагрузку. Что предложите?
Когда-то давно я на скорую руку написал патч для валкнута, который
худо-бедно, но обеспечивает работоспособность русского поиска. Сейчас
его с этим патчем и использую. Надо сказать, что работа с кодировками
там сделана довольно криво (то ли это особенность валкнута, то ли
особенность qt, то ли это "в генах" протокола dc++ который изначально
неюникодный. Сам патч вот, может пригодится кому (в нём, как можно
видеть, жёстко прошита кодировка протокола dc cp1251; он решает проблему
только с поиском, имена расшареных файлов он не правит)...
diff -u valknut-orig/dcfilebrowser.cpp valknut/dcfilebrowser.cpp
--- valknut-orig/dcfilebrowser.cpp 2005-02-01 20:18:53.000000000 +0300
+++ valknut/dcfilebrowser.cpp 2006-06-01 22:11:20.000000000 +0400
@@ -344,6 +344,7 @@
if ( file.open( IO_ReadOnly ) )
{
QTextStream stream( &file );
+ stream.setEncoding(QTextStream::UnicodeUTF8);
QString line;
line = stream.readLine();
@@ -374,11 +375,8 @@
}
// read content ...
- while ( !stream.atEnd() )
- {
- stream.readRawBytes(&ch,1);
- m_sList += ch;
- }
+ m_sList=stream.read();
+
if ( m_sType != "XMLFILELIST" )
{
@@ -540,8 +538,10 @@
xmlNodePtr node;
xml = new CXml();
+
+ QCString u8str=m_sList.utf8();
- if ( xml->ParseMemory(m_sList.ascii(),m_sList.length()) == TRUE )
+ if ( xml->ParseMemory(u8str,u8str.length()) == TRUE )
{
for(node=xml->doc()->children;node!=0;node=node->next)
{
diff -u valknut-orig/main.cpp valknut/main.cpp
--- valknut-orig/main.cpp 2005-02-14 22:39:15.000000000 +0300
+++ valknut/main.cpp 2006-06-01 21:13:56.000000000 +0400
@@ -38,6 +38,7 @@
#include <qlabel.h>
#include <qstylefactory.h>
#include <private/qinternal_p.h>
+#include <qtextcodec.h>
#include "dcconfig.h"
#include "dcsplash.h"
@@ -108,6 +109,8 @@
bool bTray = FALSE;
bool bEnableTray = TRUE;
+ QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));
+
#ifdef WIN32
#ifdef _DEBUG
//_CrtSetDbgFlag ( _CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF );