# HG changeset patch # User Mikael Berthe # Date 1268167654 -3600 # Node ID c2ad0b151a5e595a154a00fc97be353fd15a5205 # Parent fbfc64c5d6be111dea1e6d3ced9252fec33228e4 New module: clock diff -r fbfc64c5d6be -r c2ad0b151a5e Makefile.am --- a/Makefile.am Mon Mar 08 22:00:09 2010 +0100 +++ b/Makefile.am Tue Mar 09 21:47:34 2010 +0100 @@ -1,1 +1,1 @@ -SUBDIRS = comment extsay +SUBDIRS = comment extsay clock diff -r fbfc64c5d6be -r c2ad0b151a5e clock/Makefile.am --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clock/Makefile.am Tue Mar 09 21:47:34 2010 +0100 @@ -0,0 +1,11 @@ + +if INSTALL_MODULE_CLOCK + +pkglib_LTLIBRARIES = libclock.la +libclock_la_SOURCES = clock.c +libclock_la_LDFLAGS = -module -avoid-version -shared + +LDADD = $(GLIB_LIBS) $(MCABBER_LIBS) +AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS) $(MCABBER_CFLAGS) + +endif diff -r fbfc64c5d6be -r c2ad0b151a5e clock/clock.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clock/clock.c Tue Mar 09 21:47:34 2010 +0100 @@ -0,0 +1,110 @@ +/* + Copyright 2010 Mikael Berthe + + Module "clock" -- Displays date and time + +Options: +- clock_precision_onesec: boolean (default: 0) + If true, the clock will be updated every second, + if false, the clock is updated once per minute. +- clock_strfmt: string (default: "%Y-%m-%d %H:%M") + strftime format string. + +This module 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 option) 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, see . +*/ + +#include + +#include +#include +#include + +static void clock_init(void); +static void clock_uninit(void); + +/* Module description */ +module_info_t info_clock = { + .mcabber_version = "0.10.0", + .requires = NULL, + .init = clock_init, + .uninit = clock_uninit, +}; + +static guint srcno = 0; +static gboolean precision_onesec; +static gchar *backup_info; +static gchar *strfmt; +static const gchar dfltstrfmt[] = "%Y-%m-%d %H:%M"; // Default string format + +static gboolean clock_cb(void) +{ + char buf[256]; + time_t now_t; + struct tm *now; + + time(&now_t); + now = localtime(&now_t); + strftime(buf, sizeof(buf), strfmt, now); + settings_set(SETTINGS_TYPE_OPTION, "info", buf); + scr_UpdateChatStatus(TRUE); + + if (precision_onesec) + return TRUE; // Let's be called again in 1 second + + // Set up new timeout event + srcno = g_timeout_add_seconds((now->tm_sec < 60 ? 60 - now->tm_sec : 1), + (GSourceFunc)clock_cb, NULL); + return FALSE; // Destroy the old timeout +} + +static void clock_setup_timer(gboolean activate) +{ + if ((activate && srcno) || (!activate && !srcno)) + return; + + if (activate) { + srcno = g_timeout_add_seconds(1, (GSourceFunc)clock_cb, NULL); + } else { + g_source_remove(srcno); + srcno = 0; + } +} + +//static void do_clock(char *args) +//{ +//} + +/* Initialization */ +static void clock_init(void) +{ + backup_info = g_strdup(settings_opt_get("info")); + precision_onesec = settings_opt_get_int("clock_precision_onesec"); + strfmt = g_strdup(settings_opt_get("clock_strfmt")); + if (!strfmt) + strfmt = g_strdup(dfltstrfmt); + clock_setup_timer(TRUE); +} + +/* Deinitialization */ +static void clock_uninit(void) +{ + clock_setup_timer(FALSE); + settings_set(SETTINGS_TYPE_OPTION, "info", backup_info); + g_free(backup_info); + g_free(strfmt); + backup_info = strfmt = NULL; // probably useless... + scr_UpdateChatStatus(TRUE); +} + +/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */ diff -r fbfc64c5d6be -r c2ad0b151a5e configure.ac --- a/configure.ac Mon Mar 08 22:00:09 2010 +0100 +++ b/configure.ac Tue Mar 09 21:47:34 2010 +0100 @@ -97,6 +97,9 @@ AC_HELP_STRING([--enable-all-modules], [enable all modules]), enable_all_modules=$enableval) +AC_ARG_ENABLE(module-clock, + AC_HELP_STRING([--enable-module-clock], [enable module clock]), + enable_module_clock=$enableval) AC_ARG_ENABLE(module-comment, AC_HELP_STRING([--enable-module-comment], [enable module comment]), enable_module_comment=$enableval) @@ -104,6 +107,10 @@ AC_HELP_STRING([--enable-module-extsay], [enable module extsay]), enable_module_extsay=$enableval) +AM_CONDITIONAL([INSTALL_MODULE_CLOCK], + [test x"${enable_all_modules}" = x"yes" -o \ + x"${enable_module_clock}" = x"yes"]) + AM_CONDITIONAL([INSTALL_MODULE_COMMENT], [test x"${enable_all_modules}" = x"yes" -o \ x"${enable_module_comment}" = x"yes"]) @@ -112,7 +119,8 @@ [test x"${enable_all_modules}" = x"yes" -o \ x"${enable_module_extsay}" = x"yes"]) -AC_CONFIG_FILES([comment/Makefile +AC_CONFIG_FILES([clock/Makefile + comment/Makefile extsay/Makefile Makefile]) AC_OUTPUT