summaryrefslogtreecommitdiffstats
path: root/src/modules/sharedfile
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/sharedfile')
-rw-r--r--src/modules/sharedfile/Makefile.am18
-rw-r--r--src/modules/sharedfile/libkvisharedfile.cpp281
2 files changed, 299 insertions, 0 deletions
diff --git a/src/modules/sharedfile/Makefile.am b/src/modules/sharedfile/Makefile.am
new file mode 100644
index 00000000..5c4ace3b
--- /dev/null
+++ b/src/modules/sharedfile/Makefile.am
@@ -0,0 +1,18 @@
+###############################################################################
+# KVirc IRC client Makefile - 10.03.2000 Szymon Stefanek <stefanek@tin.it>
+###############################################################################
+
+AM_CPPFLAGS = -I$(SS_TOPSRCDIR)/src/kvilib/include/ -I$(SS_TOPSRCDIR)/src/kvirc/include/ \
+$(SS_INCDIRS) $(SS_CPPFLAGS) -DGLOBAL_KVIRC_DIR=\"$(globalkvircdir)\"
+
+pluglib_LTLIBRARIES = libkvisharedfile.la
+
+libkvisharedfile_la_LDFLAGS = -module -avoid-version $(SS_LDFLAGS) $(SS_LIBDIRS)
+
+libkvisharedfile_la_SOURCES = libkvisharedfile.cpp
+libkvisharedfile_la_LIBADD = $(SS_LIBLINK) ../../kvilib/build/libkvilib.la
+
+#noinst_HEADERS= sharedfilewindow.h
+
+m_%.moc: %.h
+ $(SS_QT_MOC) $< -o $@
diff --git a/src/modules/sharedfile/libkvisharedfile.cpp b/src/modules/sharedfile/libkvisharedfile.cpp
new file mode 100644
index 00000000..93959f77
--- /dev/null
+++ b/src/modules/sharedfile/libkvisharedfile.cpp
@@ -0,0 +1,281 @@
+//=============================================================================
+//
+// File : libkvisharedfile.cpp (orig : libkvioffer.cpp)
+// Creation date : Wed Sep 27 2000 20:59:02 CEST by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2000-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_sharedfiles.h"
+#include "kvi_ircmask.h"
+#include "kvi_fileutils.h"
+#include "kvi_locale.h"
+
+#include "kvi_out.h"
+#include "kvi_mirccntrl.h"
+#include "kvi_window.h"
+#include "kvi_frame.h"
+
+
+#include <time.h>
+#include "kvi_pointerhashtable.h"
+
+extern KVIRC_API KviSharedFilesManager * g_pSharedFilesManager;
+
+
+/*
+ @doc: sharedfile.add
+ @type:
+ command
+ @title:
+ sharedfile.add
+ @keyterms:
+ trading files by dcc
+ @short:
+ Adds a file sharedfile
+ @syntax:
+ sharedfile.add [-t=<timeout:integer>] [-n=<visible name>] <filename> [user_mask]
+ @switches:
+ !sw: -t=<timeout> | --timeout=<timeout>
+ Specified the timeout after that the share will be automatically removed
+ !sw: -n=<visible name> | --name=<visible name>
+ Explicitly specifies the visible name of the share
+ @description:
+ Adds <filename> to the list of the active shared files.
+ The users will be able to request the file via [cmd]dcc.get[/cmd].
+ If [user_mask] is specified , the access to the file is limited
+ to the users that match this mask, otherwise the mask will
+ be automatically set to '*!*@*'.[br]
+ If the 't' switch is used, the sharedfile will be removed after
+ <timeout> seconds. If the 'n' switch is used, the sharedfile
+ will be visible to the oter users as <visible name> instead
+ of the real <filename> (stripped of the leading path).
+ <filename> must be an absolute path.
+ @seealso:
+ [cmd]sharedfile.remove[/cmd], [cmd]sharedfile.list[/cmd],
+ [cmd]dcc.get[/cmd]
+*/
+
+static bool sharedfile_kvs_cmd_add(KviKvsModuleCommandCall * c)
+{
+ QString szFileName,szUserMask;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("filename",KVS_PT_NONEMPTYSTRING,0,szFileName)
+ KVSM_PARAMETER("user_mask",KVS_PT_NONEMPTYSTRING,KVS_PF_OPTIONAL,szUserMask)
+ KVSM_PARAMETERS_END(c)
+
+ if(!KviFileUtils::isReadable(szFileName))
+ {
+ c->warning(__tr2qs_ctx("The file '%Q' is not readable","sharedfile"),&szFileName);
+ return true;
+ }
+
+ if(szUserMask.isEmpty())szUserMask="*!*@*";
+ KviIrcMask u(szUserMask);
+
+ QString szm;
+ u.mask(szm);
+
+ kvs_int_t timeout = 0;
+
+ if(KviKvsVariant * v = c->switches()->find('t',"timeout"))
+ {
+ if(!v->asInteger(timeout))
+ {
+ c->warning(__tr2qs_ctx("Invalid timeout, ignoring","sharedfile"));
+ timeout = 0;
+ }
+ }
+
+ QString szVisibleName = szFileName;
+ KviQString::cutToLast(szVisibleName,'/');
+
+ if(KviKvsVariant * n = c->switches()->find('n',"name"))
+ {
+ QString tmp;
+ n->asString(tmp);
+ if(tmp.isEmpty())
+ {
+ c->warning(__tr2qs_ctx("Invalid visible name: using default","sharedfile"));
+ } else szVisibleName = tmp;
+ }
+
+ if(!g_pSharedFilesManager->addSharedFile(szVisibleName,szFileName,szUserMask,timeout))
+ {
+ c->warning(__tr2qs_ctx("Ops..failed to add the sharedfile...","sharedfile"));
+ }
+
+ return true;
+}
+
+
+/*
+ @doc: sharedfile.remove
+ @type:
+ command
+ @title:
+ sharedfile.remove
+ @keyterms:
+ trading files by dcc
+ @short:
+ Removes a shared file
+ @syntax:
+ sharedfile.remove <visible name:string> <user mask:string> [filesize:integer]
+ @description:
+ Removes the shared file that matches <visible name> and <user mask>.
+ If [filesize] is specified, then it must be matched by the entry
+ to be removed.
+ @seealso:
+ [cmd]sharedfile.add[/cmd], [cmd]sharedfile.list[/cmd], [cmd]sharedfile.clear[/cmd]
+*/
+
+static bool sharedfile_kvs_cmd_remove(KviKvsModuleCommandCall * c)
+{
+ QString szVisibleName,szUserMask;
+ kvs_uint_t uSize;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("visible_name",KVS_PT_NONEMPTYSTRING,0,szVisibleName)
+ KVSM_PARAMETER("user_mask",KVS_PT_NONEMPTYSTRING,0,szUserMask)
+ KVSM_PARAMETER("filesize",KVS_PT_UINT,KVS_PF_OPTIONAL,uSize)
+ KVSM_PARAMETERS_END(c)
+
+ if(!g_pSharedFilesManager->removeSharedFile(szVisibleName,szUserMask,uSize))
+ c->warning(__tr2qs_ctx("No sharedfile with visible name '%Q' and user mask '%Q'","sharedfile"),&szVisibleName,&szUserMask);
+
+ return true;
+}
+
+
+
+/*
+ @doc: sharedfile.clear
+ @type:
+ command
+ @title:
+ sharedfile.clear
+ @keyterms:
+ trading files by dcc, shared files
+ @short:
+ Clears the shared files list
+ @syntax:
+ sharedfile.clear
+ @description:
+ Clears the shared files list
+ @seealso:
+ [cmd]sharedfile.add[/cmd], [cmd]sharedfile.list[/cmd], [cmd]sharedfile.remove[/cmd]
+*/
+
+static bool sharedfile_kvs_cmd_clear(KviKvsModuleCommandCall * c)
+{
+ g_pSharedFilesManager->clear();
+ return true;
+}
+
+
+/*
+ @doc: sharedfile.list
+ @type:
+ command
+ @title:
+ sharedfile.list
+ @keyterms:
+ trading files by dcc
+ @short:
+ Lists the active file sharedfile
+ @syntax:
+ sharedfile.list
+ @description:
+ Lists the active file sharedfile.
+ @seealso:
+ [cmd]sharedfile.add[/cmd], [cmd]sharedfile.remove[/cmd]
+*/
+
+static bool sharedfile_kvs_cmd_list(KviKvsModuleCommandCall * c)
+{
+ KviPointerHashTableIterator<QString,KviSharedFileList> it(*(g_pSharedFilesManager->sharedFileListDict()));
+
+ int idx = 0;
+
+ while(KviSharedFileList * l = it.current())
+ {
+ for(KviSharedFile * o = l->first();o;o = l->next())
+ {
+ c->window()->output(KVI_OUT_NONE,"%c%d. %s",
+ KVI_TEXT_BOLD,idx + 1,it.currentKey().utf8().data());
+ c->window()->output(KVI_OUT_NONE,__tr2qs_ctx(" File: %s (%u bytes)","sharedfile"),
+ o->absFilePath().utf8().data(),o->fileSize());
+ c->window()->output(KVI_OUT_NONE,__tr2qs_ctx(" Mask: %s","sharedfile"),
+ o->userMask().utf8().data());
+ if(o->expireTime() > 0)
+ {
+ int secs = ((int)(o->expireTime())) - ((int)(time(0)));
+ int hour = secs / 3600;
+ secs = secs % 3600;
+ int mins = secs / 60;
+ secs = secs % 60;
+ c->window()->output(KVI_OUT_NONE,__tr2qs_ctx(" Expires in %d hours %d minutes %d seconds","sharedfile"),
+ hour,mins,secs);
+ }
+ ++idx;
+ }
+ ++it;
+ }
+
+//#warning "FIND A BETTER KVI_OUT_*"
+
+ if(idx == 0)c->window()->outputNoFmt(KVI_OUT_NONE,__tr2qs_ctx("No active file sharedfile","sharedfile"));
+ else c->window()->output(KVI_OUT_NONE,__tr2qs_ctx("Total: %d sharedfile","sharedfile"),idx);
+
+ return true;
+}
+
+
+static bool sharedfile_module_init(KviModule * m)
+{
+
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"add",sharedfile_kvs_cmd_add);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"remove",sharedfile_kvs_cmd_remove);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"list",sharedfile_kvs_cmd_list);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"clear",sharedfile_kvs_cmd_clear);
+
+ return true;
+}
+
+static bool sharedfile_module_can_unload(KviModule *m)
+{
+ return true;
+}
+
+static bool sharedfile_module_cleanup(KviModule *m)
+{
+ return true;
+}
+
+KVIRC_MODULE(
+ "Offer", // module name
+ "1.0.0", // module version
+ "Copyright (C) 2000-2003 Szymon Stefanek (pragma at kvirc dot net)", // author & (C)
+ "User interface to the file sharing system",
+ sharedfile_module_init,
+ sharedfile_module_can_unload,
+ 0,
+ sharedfile_module_cleanup
+)