summaryrefslogtreecommitdiffstats
path: root/src/modules/log/libkvilog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/log/libkvilog.cpp')
-rw-r--r--src/modules/log/libkvilog.cpp309
1 files changed, 309 insertions, 0 deletions
diff --git a/src/modules/log/libkvilog.cpp b/src/modules/log/libkvilog.cpp
new file mode 100644
index 00000000..5e29e30d
--- /dev/null
+++ b/src/modules/log/libkvilog.cpp
@@ -0,0 +1,309 @@
+//==============================================================================
+//
+// File : libkvilog.cpp
+// Creation date : Sat Jan 06 2001 13:28:02 CEST by Szymon Stefanek
+//
+// 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_window.h"
+#include "kvi_app.h"
+#include "kvi_locale.h"
+#include "kvi_ircview.h"
+
+
+//#warning "log.stats"
+//#warning "log.compress (gzip -r the log directory)"
+
+/*
+ @doc: log
+ @title:
+ The log interface module
+ @short:
+ Interface to the KVirc log subsystem
+ @type:
+ module
+ @keyterms:
+ logging
+ @body:
+ The log module is an interface to the KVIrc logging subsystem.[br]
+ It provides commands and functions that allow the management of
+ logging in the KVIrc windows:[br]
+ [cmd]log.start[/cmd], [cmd]log.stop[/cmd], [cmd]log.flush[/cmd],
+ [fnc]$log.file[/fnc]().[br]
+ NOTE:[br]
+ If you want to AUTOENABLE logging in certain types of windows
+ you have to use the [cmd]option[/cmd] command.[br]
+ For example, [b]option boolAutoLogQueries 1[/b] enables logging in all the newly created
+ query windows.
+*/
+
+/*
+ @doc: log.start
+ @type:
+ command
+ @title:
+ log.start
+ @keyterms:
+ logging
+ @short:
+ Starts logging in a specified window
+ @syntax:
+ log.start [-w = <window_id>] [-p] [filename]
+ @description:
+ Starts logging in the current window or in the window specified by the -w switch.[br]
+ If a logging session is already running in the specified window, it is stopped first.[br]
+ If [filename] is specified, this filename is used as log file, otherwise a default
+ filename is used.[br]
+ If the -p switch is used, all the already existing contents of the window are
+ stored to the log file before starting the log action.[br]
+ Please note that some windows do not have logging capabilities...this command
+ will print a warning in that case.[br]
+ @seealso:
+ [fnc]$window[/fnc],
+ [cmd]log.stop[/cmd],
+ [fnc]$log.file[/fnc],
+ [doc:window_naming_conventions]window naming conventions documentation[/doc]
+*/
+
+
+static bool log_kvs_cmd_start(KviKvsModuleCommandCall * c)
+{
+ QString szFile;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("filename",KVS_PT_STRING,KVS_PF_OPTIONAL,szFile)
+ KVSM_PARAMETERS_END(c)
+
+ KviWindow * pWnd = c->window();
+ if(c->hasSwitch('w',"window"))
+ {
+ QString szWindow;
+ if(c->switches()->getAsStringIfExisting('w',"window",szWindow))
+ {
+ pWnd = g_pApp->findWindow(szWindow);
+ if(!pWnd)
+ {
+ c->warning(__tr2qs("Window %Q not found"),&szWindow);
+ return true;
+ }
+
+ } else {
+ c->warning(__tr2qs("Missing window id after the 'w' switch"));
+ return true;
+ }
+ }
+
+ if(pWnd->view())
+ {
+
+ if(szFile.isEmpty())
+ {
+ pWnd->getDefaultLogFileName(szFile);
+ }
+ if(!pWnd->view()->startLogging(szFile,c->hasSwitch('p',"log-buffer")))
+ c->warning(__tr2qs("Can't log to file %Q"),&szFile);
+ } else {
+ c->warning(__tr2qs("This window has no logging capabilities"));
+ return true;
+ }
+ return true;
+}
+
+/*
+ @doc: log.stop
+ @type:
+ command
+ @title:
+ log.stop
+ @keyterms:
+ logging
+ @short:
+ Stops logging in a specified window
+ @syntax:
+ log.stop [-w = <window_id>]
+ @description:
+ Stops logging in the current window or in the window specified by the -w switch.[br]
+ If logging is not enabled in the specified window, this command does nothing.[br]
+ @seealso:
+ [fnc]$window[/fnc],
+ [cmd]log.start[/cmd],
+ [doc:window_naming_conventions]window naming conventions documentation[/doc]
+*/
+
+static bool log_kvs_cmd_stop(KviKvsModuleCommandCall * c)
+{
+
+ KviWindow * pWnd = c->window();
+ if(c->hasSwitch('w',"window"))
+ {
+ QString szWindow;
+ if(c->switches()->getAsStringIfExisting('w',"window",szWindow))
+ {
+ pWnd = g_pApp->findWindow(szWindow);
+ if(!pWnd)
+ {
+ c->warning(__tr2qs("Window %Q not found"),&szWindow);
+ return true;
+ }
+
+ } else {
+ c->warning(__tr2qs("Missing window id after the 'w' switch"));
+ return true;
+ }
+ }
+
+ if(pWnd->view())
+ pWnd->view()->stopLogging();
+ return true;
+}
+
+/*
+ @doc: log.flush
+ @type:
+ command
+ @title:
+ log.flush
+ @keyterms:
+ logging
+ @short:
+ Flushes the log file for a specified window
+ @syntax:
+ log.flush [-w = <window_id>]
+ @description:
+ Flushes the log file the current window or in the window specified by the -w switch.[br]
+ If logging is not enabled in the specified window, this command does nothing.[br]
+ If this command is never used, the log file is flushed at regulear file-size intervals,
+ depending on the underlying IO subsystem. This is usually 4KB.[br]
+ The "block flushing" is used to achieve a fast I/O on files, but may cause
+ the last data block to be lost in case of a program crash.[br]
+ @seealso:
+ [fnc]$window[/fnc],
+ [cmd]log.start[/cmd],
+ [cmd]log.stop[/cmd],
+ [doc:window_naming_conventions]window naming conventions documentation[/doc]
+*/
+
+static bool log_kvs_cmd_flush(KviKvsModuleCommandCall * c)
+{
+
+ KviWindow * pWnd = c->window();
+ if(c->hasSwitch('w',"window"))
+ {
+ QString szWindow;
+ if(c->switches()->getAsStringIfExisting('w',"window",szWindow))
+ {
+ pWnd = g_pApp->findWindow(szWindow);
+ if(!pWnd)
+ {
+ c->warning(__tr2qs("Window %Q not found"),&szWindow);
+ return true;
+ }
+
+ } else {
+ c->warning(__tr2qs("Missing window id after the 'w' switch"));
+ return true;
+ }
+ }
+
+ if(pWnd->view())
+ pWnd->view()->flushLog();
+ return true;
+}
+
+/*
+ @doc: log.file
+ @type:
+ function
+ @title:
+ $log.file
+ @short:
+ Returns the current log filename
+ @syntax:
+ $log.file
+ $log.file(<window id>)
+ @description:
+ The form with the <window id> parameter returns the log file name
+ of the window that has the specified id. If logging is not enabled
+ in the specified window, this function returns an empty string.[br]
+ The form without parameters returns the log file name of the current window,
+ thus it is equivalent to calling $log.file([fnc]$window[/fnc])
+ @examples:
+ [example]
+ [cmd]log[/cmd] mylogfilename.log
+ [cmd]echo[/cmd] $log
+ [cmd]echo[/cmd] $log([fnc]$console[/fnc])
+ [/example]
+ @seealso:
+ [fnc]$window[/fnc],
+ [cmd]log.start[/cmd],
+ [cmd]log.stop[/cmd],
+ [doc:window_naming_conventions]window naming conventions documentation[/doc]
+*/
+
+static bool log_kvs_fnc_file(KviKvsModuleFunctionCall * c)
+{
+ QString szWindow;
+ QString buffer;
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("window id",KVS_PT_STRING,KVS_PF_OPTIONAL,szWindow)
+ KVSM_PARAMETERS_END(c)
+
+ KviWindow * wnd = c->window();
+
+ if(!szWindow.isEmpty())
+ {
+ wnd = g_pApp->findWindow(szWindow);
+ if(!wnd)
+ {
+ c->warning(__tr2qs("Window with id '%Q' not found, returning empty string"),&szWindow);
+ return true;
+ }
+ }
+
+ if(wnd->view())wnd->view()->getLogFileName(buffer);
+ c->returnValue()->setString(buffer);
+ return true;
+}
+
+static bool log_module_init(KviModule * m)
+{
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"start",log_kvs_cmd_start);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"stop",log_kvs_cmd_stop);
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"flush",log_kvs_cmd_flush);
+
+ KVSM_REGISTER_FUNCTION(m,"file",log_kvs_fnc_file);
+ return true;
+}
+
+static bool log_module_cleanup(KviModule *m)
+{
+ return true;
+}
+
+KVIRC_MODULE(
+ "Log", // module name
+ "1.0.0", // module version
+ "Copyright (C) 2001 Szymon Stefanek (pragma at kvirc dot net)", // author & (C)
+ "User interface to the logging system for KVIrc",
+ log_module_init,
+ 0,
+ 0,
+ log_module_cleanup
+)