You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvirc/src/modules/torrent/libkvitorrent.cpp

905 lines
24 KiB

//=============================================================================
//
// File : libkvitorrent.cpp
// Creation date : Fri Jan 1 15:42:25 2007 GMT by Alexander Stillich
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 2001-2005 Szymon Stefanek (pragma at kvirc dot net)
//
// This program is FREE software. You can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your opinion) any later version.
//
// This program is distributed in the HOPE that it will be USEFUL,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, write to the Free Software Foundation,
// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
//=============================================================================
#include "kvi_module.h"
#include "kvi_options.h"
#include "kvi_frame.h"
#include "tc_interface.h"
#include "tc_ktorrentdcopinterface.h"
#include "tc_statusbarapplet.h"
#include "kvi_locale.h"
#include "kvi_out.h"
static KviPointerList<KviTorrentInterfaceDescriptor> * g_pDescriptorList = 0;
static KviTorrentInterface *auto_detect_torrent_client(KviWindow * pOut = 0)
{
int iBest = 0;
KviTorrentInterface * pBest = 0;
KviTorrentInterfaceDescriptor * d;
KviTorrentInterfaceDescriptor * pDBest = 0;
for (d=g_pDescriptorList->first(); d!=0; d=g_pDescriptorList->next())
{
// instance gets deleted by descriptor later
KviTorrentInterface *i = d->instance();
if (i)
{
int iScore = i->detect();
if(iScore > iBest)
{
iBest = iScore;
pBest = i;
pDBest = d;
}
if(pOut)
{
pOut->output(KVI_OUT_TORRENT,
__tr2qs_ctx("Trying torrent client interface \"%Q\": score %d", "torrent"),
&d->name(),
iScore);
}
}
}
/* if(iBest < 90)
{
if(pOut)
pOut->outputNoFmt(KVI_OUT_MULTIMEDIA,__tr2qs_ctx("Not sure about the results, trying a second, more agressive detection pass","mediaplayer"));
// no sure player found... try again with a destructive test
for(d = g_pDescriptorList->first();d;d = g_pDescriptorList->next())
{
KviMediaPlayerInterface * i = d->instance();
if(i)
{
int iScore = i->detect(true);
if(iScore > iBest)
{
iBest = iScore;
pBest = i;
pDBest = d;
}
if(pOut)
{
TQString szOut;
TQString szNam = d->name();
KviTQString::sprintf(szOut,__tr2qs_ctx("Trying media player interface \"%Q\": score %d","mediaplayer"),&(szNam),iScore);
pOut->output(KVI_OUT_MULTIMEDIA,szOut);
}
}
}
}
*/
if(pDBest)
{
KVI_OPTION_STRING(KviOption_stringPreferredTorrentClient) = pDBest->name();
if(pOut)
pOut->output(KVI_OUT_TORRENT,
__tr2qs_ctx("Choosing torrent client interface \"%Q\"", "torrent"),
&pDBest->name());
} else
{
if(pOut)
pOut->outputNoFmt(KVI_OUT_TORRENT,
__tr2qs_ctx("Seems that there is no usable torrent client on this machine", "torrent"));
}
return pBest;
}
#define TC_KVS_FAIL_ON_NO_INTERFACE \
if (!KviTorrentInterface::selected()) \
{ \
c->warning(__tr2qs_ctx("No torrent client interface selected. Try /torrent.detect", "torrent")); \
return true; \
}
#define TC_KVS_COMMAND(__name) static bool torrent_kvs_cmd_ ## __name (KviKvsModuleCommandCall * c)
#define TC_KVS_FUNCTION(__name) static bool torrent_kvs_fnc_ ## __name (KviKvsModuleFunctionCall * c)
#define TC_KVS_COMMAND_ERROR \
if (!c->hasSwitch('q',"quiet")) \
{ \
c->warning(__tr2qs_ctx("The selected torrent client interface failed to execute the requested function", "torrent")); \
TQString tmp = __tr2qs_ctx("Last interface error: ", "torrent"); \
tmp += KviTorrentInterface::selected()->lastError(); \
c->warning(tmp); \
} \
#define TC_KVS_SIMPLE_COMMAND(__name, __ifacecommand) \
TC_KVS_COMMAND(__name) \
{ \
KVSM_PARAMETERS_BEGIN(c) \
KVSM_PARAMETERS_END(c) \
\
TC_KVS_FAIL_ON_NO_INTERFACE \
\
if (!KviTorrentInterface::selected()->__ifacecommand()) \
{ \
TC_KVS_COMMAND_ERROR \
} \
return true; \
}
#define TC_KVS_INT_COMMAND(__name, __ifacecommand, __argname) \
TC_KVS_COMMAND(__name) \
{ \
kvs_int_t arg; \
KVSM_PARAMETERS_BEGIN(c) \
KVSM_PARAMETER(__argname, KVS_PT_INT, 0, arg) \
KVSM_PARAMETERS_END(c) \
\
TC_KVS_FAIL_ON_NO_INTERFACE \
\
if (!KviTorrentInterface::selected()->__ifacecommand(arg)) \
{ \
TC_KVS_COMMAND_ERROR \
} \
return true; \
}
#define TC_KVS_INT_INT_STRING_COMMAND(__name, __ifacecommand, __argname1, __argname2, __argname3) \
TC_KVS_COMMAND(__name) \
{ \
kvs_int_t arg1; \
kvs_int_t arg2; \
TQString arg3; \
KVSM_PARAMETERS_BEGIN(c) \
KVSM_PARAMETER(__argname1, KVS_PT_INT, 0, arg1) \
KVSM_PARAMETER(__argname2, KVS_PT_INT, 0, arg2) \
KVSM_PARAMETER(__argname3, KVS_PT_STRING, 0, arg3) \
KVSM_PARAMETERS_END(c) \
\
TC_KVS_FAIL_ON_NO_INTERFACE \
\
if (!KviTorrentInterface::selected()->__ifacecommand(arg1, arg2, arg3)) \
{ \
TC_KVS_COMMAND_ERROR \
} \
return true; \
}
// TODO: error handling for functions
#define TC_KVS_STRINGRET_FUNCTION(__name, __ifacecommand) \
TC_KVS_FUNCTION(__name) \
{ \
TC_KVS_FAIL_ON_NO_INTERFACE \
TQString szRet = KviTorrentInterface::selected()->__ifacecommand(); \
c->returnValue()->setString(szRet); \
return true; \
}
#define TC_KVS_INTRET_FUNCTION(__name, __ifacecommand) \
TC_KVS_FUNCTION(__name) \
{ \
TC_KVS_FAIL_ON_NO_INTERFACE \
kvs_int_t ret = KviTorrentInterface::selected()->__ifacecommand(); \
c->returnValue()->setInteger(ret); \
return true; \
}
#define TC_KVS_FLOATRET_FUNCTION(__name, __ifacecommand) \
TC_KVS_FUNCTION(__name) \
{ \
TC_KVS_FAIL_ON_NO_INTERFACE \
kvs_real_t ret = KviTorrentInterface::selected()->__ifacecommand(); \
c->returnValue()->setReal(ret); \
return true; \
}
#define TC_KVS_INTRET_INT_FUNCTION(__name, __ifacecommand, __argname) \
TC_KVS_FUNCTION(__name) \
{ \
kvs_int_t arg; \
KVSM_PARAMETERS_BEGIN(c) \
KVSM_PARAMETER(__argname, KVS_PT_INT, 0, arg) \
KVSM_PARAMETERS_END(c) \
TC_KVS_FAIL_ON_NO_INTERFACE \
kvs_int_t ret = KviTorrentInterface::selected()->__ifacecommand(arg); \
c->returnValue()->setInteger(ret); \
return true; \
}
#define TC_KVS_STRINGRET_INT_FUNCTION(__name, __ifacecommand, __argname) \
TC_KVS_FUNCTION(__name) \
{ \
kvs_int_t arg; \
KVSM_PARAMETERS_BEGIN(c) \
KVSM_PARAMETER(__argname, KVS_PT_INT, 0, arg) \
KVSM_PARAMETERS_END(c) \
TC_KVS_FAIL_ON_NO_INTERFACE \
TQString szRet = KviTorrentInterface::selected()->__ifacecommand(arg); \
c->returnValue()->setString(szRet); \
return true; \
}
#define TC_KVS_STRINGRET_INT_INT_FUNCTION(__name, __ifacecommand, __argname1, __argname2) \
TC_KVS_FUNCTION(__name) \
{ \
kvs_int_t arg1; \
kvs_int_t arg2; \
KVSM_PARAMETERS_BEGIN(c) \
KVSM_PARAMETER(__argname1, KVS_PT_INT, 0, arg1) \
KVSM_PARAMETER(__argname2, KVS_PT_INT, 0, arg2) \
KVSM_PARAMETERS_END(c) \
TC_KVS_FAIL_ON_NO_INTERFACE \
TQString szRet = KviTorrentInterface::selected()->__ifacecommand(arg1, arg2); \
c->returnValue()->setString(szRet); \
return true; \
}
#define TC_KVS_INTRET_INT_INT_FUNCTION(__name, __ifacecommand, __argname1, __argname2) \
TC_KVS_FUNCTION(__name) \
{ \
kvs_int_t arg1; \
kvs_int_t arg2; \
KVSM_PARAMETERS_BEGIN(c) \
KVSM_PARAMETER(__argname1, KVS_PT_INT, 0, arg1) \
KVSM_PARAMETER(__argname2, KVS_PT_INT, 0, arg2) \
KVSM_PARAMETERS_END(c) \
TC_KVS_FAIL_ON_NO_INTERFACE \
kvs_int_t ret = KviTorrentInterface::selected()->__ifacecommand(arg1, arg2); \
c->returnValue()->setInteger(ret); \
return true; \
}
TC_KVS_COMMAND(detect)
{
KviTorrentInterface::select(auto_detect_torrent_client(c->hasSwitch('q',"quiet") ? 0 : c->window()));
return true;
}
/*
@doc: torrent.maxUploadSpeed
@type:
function
@title:
$torrent.maxUploadSpeed
@short:
Returns maximum upload speed set in client.
@syntax:
$torrent.maxUploadSpeed()
@description:
Returns maximum upload speed set in client.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INTRET_FUNCTION(maxUploadSpeed, maxUploadSpeed)
/*
@doc: torrent.maxDownloadSpeed
@type:
function
@title:
$torrent.maxDownloadSpeed
@short:
Returns maximum download speed set in client.
@syntax:
$torrent.maxDownloadSpeed()
@description:
Returns maximum download speed set in client.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INTRET_FUNCTION(maxDownloadSpeed, maxDownloadSpeed)
/*
@doc: torrent.setMaxUploadSpeed
@type:
command
@title:
torrent.setMaxUploadSpeed
@short:
Sets maximum upload speed
@syntax:
torrent.setMaxUploadSpeed <kbytes_per_sec>
@description:
Sets maximum upload speed
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INT_COMMAND(setMaxUploadSpeed, setMaxUploadSpeed, "kbytes_per_sec")
/*
@doc: torrent.setMaxDownloadSpeed
@type:
command
@title:
torrent.setMaxDownloadSpeed
@short:
Sets maximum download speed
@syntax:
torrent.setMaxDownloadSpeed <kbytes_per_sec>
@description:
Sets maximum download speed
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INT_COMMAND(setMaxDownloadSpeed, setMaxDownloadSpeed, "kbytes_per_sec")
/*
@doc: torrent.speedUp
@type:
function
@title:
$torrent.speedUp
@short:
Returns current total upload speed
@syntax:
$torrent.speedUp()
@description:
Returns current total upload speed
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_FLOATRET_FUNCTION(speedUp, speedUp)
/*
@doc: torrent.speedDown
@type:
function
@title:
$torrent.speedDown
@short:
Returns current total download speed
@syntax:
$torrent.speedDown()
@description:
Returns current total download speed
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_FLOATRET_FUNCTION(speedDown, speedDown)
/*
@doc: torrent.trafficUp
@type:
function
@title:
$torrent.trafficUp
@short:
Returns the total number of bytes uploaded
@syntax:
$torrent.trafficUp()
@description:
Returns the total number of bytes uploaded
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_FLOATRET_FUNCTION(trafficUp, trafficUp)
/*
@doc: torrent.trafficDown
@type:
function
@title:
$torrent.trafficDown
@short:
Returns the total number of bytes download
@syntax:
$torrent.trafficDown()
@description:
Returns the total number of bytes download
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_FLOATRET_FUNCTION(trafficDown, trafficDown)
/*
@doc: torrent.count
@type:
function
@title:
$torrent.count
@short:
Returns number of torrents in client
@syntax:
$torrent.name()
@description:
Returns number of torrents in client
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INTRET_FUNCTION(count, count)
/*
@doc: torrent.name
@type:
function
@title:
$torrent.name
@short:
Returns torrent name as displayed in client
@syntax:
$torrent.name(torrent_number)
@description:
Returns torrent name as displayed in client
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_STRINGRET_INT_FUNCTION(name, name, "torrent_number")
/*
@doc: torrent.start
@type:
command
@title:
torrent.start
@short:
Starts downloading of torrent <torrent_number>
@syntax:
torrent.start <torrent_number>
@description:
Starts downloading of torrent <torrent_number>
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.stop[/cmd], [cmd]torrent.stopAll[/cmd],
[cmd]torrent.startAll[/cmd]
*/
TC_KVS_INT_COMMAND(start, start, "torrent_number")
/*
@doc: torrent.stop
@type:
command
@title:
torrent.stop
@short:
Stops downloading of torrent <torrent_number>
@syntax:
torrent.stop <torrent_number>
@description:
Stops downloading of torrent <torrent_number>
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.stopAll[/cmd], [cmd]torrent.startAll[/cmd],
[cmd]torrent.start[/cmd]
*/
TC_KVS_INT_COMMAND(stop, stop, "torrent_number")
/*
@doc: torrent.announce
@type:
command
@title:
torrent.announce
@short:
Manually announces torrent to tracker
@syntax:
torrent.announce <torrent_number>
@description:
Manually announces torrent to tracker
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INT_COMMAND(announce, announce, "torrent_number")
/*
@doc: torrent.fileCount
@type:
function
@title:
$torrent.fileCount
@short:
Returns the number of files in a torrent.
@syntax:
$torrent.fileCount <torrent_number>
@description:
Returns the number of files in a torrent.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INTRET_INT_FUNCTION(fileCount, fileCount, "torrent_number")
/*
@doc: torrent.fileName
@type:
function
@title:
$torrent.fileName
@short:
Returns the name of a file in a torrent.
@syntax:
$torrent.fileName <torrent_number> <file_number>
@description:
Returns the name of a file in a torrent.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_STRINGRET_INT_INT_FUNCTION(fileName, fileName, "torrent_number", "file_number")
/*
@doc: torrent.filePriority
@type:
function
@title:
$torrent.filePriority
@short:
Returns the priority of a file in a torrent.
@syntax:
$torrent.filePriority <torrent_number> <file_number>
@description:
Returns the priority of a file in a torrent.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_STRINGRET_INT_INT_FUNCTION(filePriority, filePriority, "torrent_number", "file_number")
/*
@doc: torrent.setFilePriority
@type:
command
@title:
torrent.setFilePriority
@short:
Sets the priority of a file in a torrent.
@syntax:
torrent.setFilePriority <torrent_number> <file_number>
@description:
Sets the priority of a file in a torrent.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_INT_INT_STRING_COMMAND(setFilePriority, setFilePriority, "torrent_number", "file_number", "priority")
/*
@doc: torrent.startAll
@type:
command
@title:
torrent.startAll
@short:
Starts downloading of all torrents
@syntax:
torrent.startAll
@description:
Starts downloading of all torrents
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.stopAll[/cmd], [cmd]torrent.start[/cmd],
[cmd]torrent.stop[/cmd]
*/
TC_KVS_SIMPLE_COMMAND(startAll, startAll)
/*
@doc: torrent.stopAll
@type:
command
@title:
torrent.stopAll
@short:
Stops downloading of all torrents
@syntax:
torrent.stopAll
@description:
Stops downloading of all torrents
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.startAll[/cmd], [cmd]torrent.start[/cmd],
[cmd]torrent.stop[/cmd]
*/
TC_KVS_SIMPLE_COMMAND(stopAll, stopAll)
/*
@doc: torrent.list
@type:
function
@title:
torrent.list
@short:
Returns a list of all torrents
@syntax:
$torrent.list()
@description:
Returns a list of all torrents
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.startAll[/cmd], [cmd]torrent.start[/cmd],
[cmd]torrent.stop[/cmd]
*/
//MP_KVS_SIMPLE_COMMAND(list,list)
/*
@doc: torrent.setClient
@type:
command
@title:
torrent.setClient
@short:
Sets the torrent client interface
@syntax:
torrent.setClient <client_name>
@description:
Sets the torrent client interface to be used by the
torrent interface module. <interface_name> must be one
of the client names returned by [cmd]torrent.clientList[/cmd]
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.detect[/cmd], [fnc]$torrent.client[/fnc]
*/
TC_KVS_COMMAND(setClient)
{
TQString client;
KVSM_PARAMETERS_BEGIN(c)
KVSM_PARAMETER("client", KVS_PT_STRING, 0, client)
KVSM_PARAMETERS_END(c)
for (KviTorrentInterfaceDescriptor *d = g_pDescriptorList->first(); d; d=g_pDescriptorList->next())
{
if (d->name() == client)
{
KviTorrentInterface::select(d->instance());
KVI_OPTION_STRING(KviOption_stringPreferredTorrentClient) = client;
if (!c->hasSwitch('q',"quiet"))
c->window()->output(KVI_OUT_TORRENT,
__tr2qs_ctx("Using client interface \"%Q\".", "torrent"),
&client);
return true;
}
}
if (!c->hasSwitch('q',"quiet"))
c->window()->output(KVI_OUT_TORRENT,
__tr2qs_ctx("Invalid client interface \"%Q\"!", "torrent"),
&client);
return false;
}
/*
@doc: torrent.client
@type:
function
@title:
$torrent.client
@short:
Returns the currently set torrent client interface
@syntax:
$torrent.client()
@description:
Returns the currently set torrent client interface.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.detect[/cmd], [cmd]torrent.setClient[/cmd]
*/
TC_KVS_FUNCTION(client)
{
c->returnValue()->setString(KVI_OPTION_STRING(KviOption_stringPreferredTorrentClient));
return true;
}
/*
@doc: torrent.clientList
@type:
function
@title:
$torrent.clientList
@short:
Returns a list of all supported clients.
@syntax:
$torrent.clientList()
@description:
Returns a list of all supported clients.
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
[cmd]torrent.detect[/cmd], [cmd]torrent.setClient[/cmd],
[cmd]torrent.client[/cmd]
*/
TC_KVS_FUNCTION(clientList)
{
KviKvsArray *pArray = new KviKvsArray();
int id=0;
for (KviTorrentInterfaceDescriptor *d=g_pDescriptorList->first(); d; d=g_pDescriptorList->next())
pArray->set(id++, new KviKvsVariant(d->name()));
c->returnValue()->setArray(pArray);
return true;
}
/*
@doc: torrent.state
@type:
function
@title:
$torrent.state
@short:
Returns state of torrent (Stopped, Stalled, Seeding, Downloading)
@syntax:
$torrent.state <torrent_number>
@description:
Returns state of torrent (Stopped, Stalled, Seeding, Downloading)
Take a look at the [module:torrent]torrent client documentation[/module]
for more details about how it works.[br]
@seealso:
[module:torrent]torrent client documentation[/module],
*/
TC_KVS_STRINGRET_INT_FUNCTION(state, state, "torrent_number")
static bool torrent_module_init(KviModule *m)
{
#define TC_KVS_REGCMD(__name,__stringname) KVSM_REGISTER_SIMPLE_COMMAND(m, __stringname, torrent_kvs_cmd_ ## __name)
#define TC_KVS_REGFNC(__name,__stringname) KVSM_REGISTER_FUNCTION(m, __stringname, torrent_kvs_fnc_ ## __name)
TC_KVS_REGCMD(detect, "detect");
TC_KVS_REGCMD(setClient, "setClient");
TC_KVS_REGCMD(start, "start")
TC_KVS_REGCMD(stop, "stop")
TC_KVS_REGCMD(announce, "announce")
TC_KVS_REGCMD(startAll, "startAll")
TC_KVS_REGCMD(stopAll, "stopAll")
TC_KVS_REGCMD(setMaxUploadSpeed, "setMaxUploadSpeed")
TC_KVS_REGCMD(setMaxDownloadSpeed, "setMaxDownloadSpeed")
TC_KVS_REGCMD(setFilePriority, "setFilePriority")
TC_KVS_REGFNC(client, "client")
TC_KVS_REGFNC(clientList, "clientList")
TC_KVS_REGFNC(maxUploadSpeed, "maxUploadSpeed")
TC_KVS_REGFNC(maxDownloadSpeed, "maxDownloadSpeed")
TC_KVS_REGFNC(speedUp, "speedUp")
TC_KVS_REGFNC(speedDown, "speedDown")
TC_KVS_REGFNC(trafficUp, "trafficUp")
TC_KVS_REGFNC(trafficDown, "trafficDown")
TC_KVS_REGFNC(count, "count")
TC_KVS_REGFNC(name, "name")
TC_KVS_REGFNC(state, "state")
TC_KVS_REGFNC(fileCount, "fileCount")
TC_KVS_REGFNC(fileName, "fileName")
TC_KVS_REGFNC(filePriority, "filePriority")
g_pDescriptorList = new KviPointerList<KviTorrentInterfaceDescriptor>;
g_pDescriptorList->setAutoDelete(true);
#ifdef COMPILE_TDE_SUPPORT
g_pDescriptorList->append(new KviKTorrentDCOPInterfaceDescriptor);
#endif // COMPILE_TDE_SUPPORT
KviTorrentInterface::select(0);
if (g_pFrame->mainStatusBar())
KviTorrentStatusBarApplet::selfRegister(g_pFrame->mainStatusBar());
if(KVI_OPTION_STRING(KviOption_stringPreferredMediaPlayer) == "auto")
{
KviTorrentInterface::select(auto_detect_torrent_client());
} else
{
for (KviTorrentInterfaceDescriptor *d=g_pDescriptorList->first(); d; d=g_pDescriptorList->next())
{
if (d->name() == KVI_OPTION_STRING(KviOption_stringPreferredTorrentClient))
KviTorrentInterface::select(d->instance());
}
}
return true;
}
static bool torrent_module_cleanup( KviModule * m )
{
delete g_pDescriptorList;
return true;
}
static bool torrent_module_can_unload( KviModule * m )
{
return true;
}
static bool torrent_module_ctrl(KviModule * m,const char * operation,void * param)
{
tqDebug("torrent module ctrl");
/* if(kvi_strEqualCI(operation,"getAvailableMediaPlayers"))
{
// we expect param to be a pointer to TQStringList
TQStringList * l = (TQStringList *)param;
for(KviMediaPlayerInterfaceDescriptor * d = g_pDescriptorList->first();d;d = g_pDescriptorList->next())
{
l->append(d->name());
}
return true;
}
if(kvi_strEqualCI(operation,"detectMediaPlayer"))
{
auto_detect_player(0);
return true;
}
*/
return false;
}
KVIRC_MODULE(
"torrent",
"1.0.0",
"Copyright (C) 2007 Alexander Stillich (torque at pltn dot org)",
"Interface to various torrent clients",
torrent_module_init,
torrent_module_can_unload,
torrent_module_ctrl,
torrent_module_cleanup
)