# HG changeset patch # User Nathan Walp # Date 1081103265 0 # Node ID 599d6ac9bbfec497a60844b06db888e4a9968674 # Parent ddbcef747dc7f37485f7b80c6954dc4194ae0f4a [gaim-migrate @ 9326] a jabber tweak i forgot to commit a fix for logging times wrt daylight savings time re-fix html logging timestamp sizes, after the syslog merge a cosmetic change to the log window committer: Tailor Script diff -r ddbcef747dc7 -r 599d6ac9bbfe src/gtklog.c --- a/src/gtklog.c Sun Apr 04 15:08:26 2004 +0000 +++ b/src/gtklog.c Sun Apr 04 18:27:45 2004 +0000 @@ -301,15 +301,13 @@ gtk_tree_view_append_column (GTK_TREE_VIEW(lv->treeview), col); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (lv->treeview), FALSE); gtk_container_add (GTK_CONTAINER (sw), lv->treeview); - - gtk_widget_set_size_request(lv->treeview, 170, 200); populate_log_tree(lv); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (lv->treeview)); g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (log_select_cb), lv); - + /* Viewer ************/ vbox = gtk_vbox_new(FALSE, 6); gtk_paned_add2(GTK_PANED(pane), vbox); diff -r ddbcef747dc7 -r 599d6ac9bbfe src/gtkprefs.c --- a/src/gtkprefs.c Sun Apr 04 15:08:26 2004 +0000 +++ b/src/gtkprefs.c Sun Apr 04 18:27:45 2004 +0000 @@ -206,8 +206,16 @@ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); +#if 0 /* GTK_CHECK_VERSION(2,4,0) */ + if(type == GAIM_PREF_INT) + model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); + else if(type == GAIM_PREF_STRING) + model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); + dropdown = gtk_combo_box_new_with_model(model); +#else dropdown = gtk_option_menu_new(); menu = gtk_menu_new(); +#endif gtk_label_set_mnemonic_widget(GTK_LABEL(label), dropdown); diff -r ddbcef747dc7 -r 599d6ac9bbfe src/log.c --- a/src/log.c Sun Apr 04 15:08:26 2004 +0000 +++ b/src/log.c Sun Apr 04 18:27:45 2004 +0000 @@ -307,39 +307,13 @@ return NULL; } while ((filename = g_dir_read_name(dir))) { - if (gaim_str_has_suffix(filename, ext)) { - const char *l = filename; - struct tm time; + if (gaim_str_has_suffix(filename, ext) && + strlen(filename) == 17 + strlen(ext)) { GaimLog *log; struct generic_logger_data *data; - char d[5]; - - strncpy(d, l, 4); - d[4] = '\0'; - time.tm_year = atoi(d) - 1900; - l = l + 5; - - strncpy(d, l, 2); - d[2] = '\0'; - time.tm_mon = atoi(d) - 1; - l = l + 3; + time_t stamp = gaim_str_to_time(filename, FALSE); - strncpy(d, l, 2); - time.tm_mday = atoi(d); - l = l + 3; - - strncpy(d, l, 2); - time.tm_hour = atoi(d); - l = l + 2; - - strncpy(d, l, 2); - time.tm_min = atoi(d); - l = l + 2; - - strncpy(d, l, 2); - time.tm_sec = atoi(d); - l = l + 2; - log = gaim_log_new(GAIM_LOG_IM, screenname, account, mktime(&time)); + log = gaim_log_new(GAIM_LOG_IM, screenname, account, stamp); log->logger = logger; log->logger_data = data = g_new0(struct generic_logger_data, 1); data->path = g_build_filename(path, filename, NULL); @@ -524,36 +498,36 @@ gaim_markup_html_to_xhtml(message, &msg_fixed, NULL); - if(log->type == GAIM_LOG_SYSTEM){ - strftime(date, sizeof(date), "%c", localtime(&time)); - fprintf(data->file, "---- %s @ %s ----
\n", msg_fixed, date); - } else { - strftime(date, sizeof(date), "%H:%M:%S", localtime(&time)); - if (type & GAIM_MESSAGE_SYSTEM) - fprintf(data->file, "(%s) %s
\n", date, msg_fixed); - else if (type & GAIM_MESSAGE_WHISPER) - fprintf(data->file, "(%s) %s: %s
\n", - date, from, msg_fixed); - else if (type & GAIM_MESSAGE_AUTO_RESP) { - if (type & GAIM_MESSAGE_SEND) - fprintf(data->file, _("(%s) %s <AUTO-REPLY>: %s
\n"), date, from, msg_fixed); - else if (type & GAIM_MESSAGE_RECV) - fprintf(data->file, _("(%s) %s <AUTO-REPLY>: %s
\n"), date, from, msg_fixed); - } else if (type & GAIM_MESSAGE_RECV) { - if(gaim_message_meify(msg_fixed, -1)) - fprintf(data->file, "(%s) ***%s %s
\n", - date, from, gc->prpl->info->name, msg_fixed); - else - fprintf(data->file, "(%s) %s: %s
\n", - date, from, gc->prpl->info->name, msg_fixed); - } else if (type & GAIM_MESSAGE_SEND) { - if(gaim_message_meify(msg_fixed, -1)) - fprintf(data->file, "(%s) ***%s %s
\n", - date, from, gc->prpl->info->name, msg_fixed); - else - fprintf(data->file, "(%s) %s: %s
\n", - date, from, gc->prpl->info->name, msg_fixed); - } + if(log->type == GAIM_LOG_SYSTEM){ + strftime(date, sizeof(date), "%c", localtime(&time)); + fprintf(data->file, "---- %s @ %s ----
\n", msg_fixed, date); + } else { + strftime(date, sizeof(date), "%H:%M:%S", localtime(&time)); + if (type & GAIM_MESSAGE_SYSTEM) + fprintf(data->file, "(%s) %s
\n", date, msg_fixed); + else if (type & GAIM_MESSAGE_WHISPER) + fprintf(data->file, "(%s) %s: %s
\n", + date, from, msg_fixed); + else if (type & GAIM_MESSAGE_AUTO_RESP) { + if (type & GAIM_MESSAGE_SEND) + fprintf(data->file, _("(%s) %s <AUTO-REPLY>: %s
\n"), date, from, msg_fixed); + else if (type & GAIM_MESSAGE_RECV) + fprintf(data->file, _("(%s) %s <AUTO-REPLY>: %s
\n"), date, from, msg_fixed); + } else if (type & GAIM_MESSAGE_RECV) { + if(gaim_message_meify(msg_fixed, -1)) + fprintf(data->file, "(%s) ***%s %s
\n", + date, from, gc->prpl->info->name, msg_fixed); + else + fprintf(data->file, "(%s) %s: %s
\n", + date, from, gc->prpl->info->name, msg_fixed); + } else if (type & GAIM_MESSAGE_SEND) { + if(gaim_message_meify(msg_fixed, -1)) + fprintf(data->file, "(%s) ***%s %s
\n", + date, from, gc->prpl->info->name, msg_fixed); + else + fprintf(data->file, "(%s) %s: %s
\n", + date, from, gc->prpl->info->name, msg_fixed); + } } g_free(msg_fixed); diff -r ddbcef747dc7 -r 599d6ac9bbfe src/protocols/jabber/jutil.c --- a/src/protocols/jabber/jutil.c Sun Apr 04 15:08:26 2004 +0000 +++ b/src/protocols/jabber/jutil.c Sun Apr 04 18:27:45 2004 +0000 @@ -26,73 +26,6 @@ #include "presence.h" #include "jutil.h" -time_t str_to_time(const char *timestamp) -{ - struct tm t; - time_t retval = 0; - char buf[32]; - char *c; - int tzoff = 0; - - time(&retval); - localtime_r(&retval, &t); - - snprintf(buf, sizeof(buf), "%s", timestamp); - c = buf; - - /* 4 digit year */ - if(!sscanf(c, "%04d", &t.tm_year)) return 0; - c+=4; - if(*c == '-') - c++; - - t.tm_year -= 1900; - - /* 2 digit month */ - if(!sscanf(c, "%02d", &t.tm_mon)) return 0; - c+=2; - if(*c == '-') - c++; - - t.tm_mon -= 1; - - /* 2 digit day */ - if(!sscanf(c, "%02d", &t.tm_mday)) return 0; - c+=2; - if(*c == 'T') { /* we have more than a date, keep going */ - c++; /* skip the "T" */ - - /* 2 digit hour */ - if(sscanf(c, "%02d:%02d:%02d", &t.tm_hour, &t.tm_min, &t.tm_sec)) { - int tzhrs, tzmins; - c+=8; - if(*c == '.') /* dealing with precision we don't care about */ - c += 4; - - if((*c == '+' || *c == '-') && - sscanf(c+1, "%02d:%02d", &tzhrs, &tzmins)) { - tzoff = tzhrs*60*60 + tzmins*60; - if(*c == '+') - tzoff *= -1; - } - -#ifdef HAVE_TM_GMTOFF - tzoff += t.tm_gmtoff; -#else -# ifdef HAVE_TIMEZONE - tzset(); /* making sure */ - tzoff -= timezone; -# endif -#endif - } - } - retval = mktime(&t); - - retval += tzoff; - - return retval; -} - const char *jabber_get_state_string(int s) { switch(s) { case JABBER_STATE_AWAY: diff -r ddbcef747dc7 -r 599d6ac9bbfe src/protocols/jabber/jutil.h --- a/src/protocols/jabber/jutil.h Sun Apr 04 15:08:26 2004 +0000 +++ b/src/protocols/jabber/jutil.h Sun Apr 04 18:27:45 2004 +0000 @@ -39,7 +39,6 @@ char *jabber_get_resource(const char *jid); char *jabber_get_bare_jid(const char *jid); -time_t str_to_time(const char *timestamp); const char *jabber_get_state_string(int state); const char *jabber_normalize(const GaimAccount *account, const char *in); diff -r ddbcef747dc7 -r 599d6ac9bbfe src/protocols/jabber/message.c --- a/src/protocols/jabber/message.c Sun Apr 04 15:08:26 2004 +0000 +++ b/src/protocols/jabber/message.c Sun Apr 04 18:27:45 2004 +0000 @@ -304,7 +304,7 @@ } else if(xmlns && !strcmp(xmlns, "jabber:x:delay")) { const char *timestamp = xmlnode_get_attrib(child, "stamp"); if(timestamp) - jm->sent = str_to_time(timestamp); + jm->sent = gaim_str_to_time(timestamp, TRUE); } else if(xmlns && !strcmp(xmlns, "jabber:x:conference") && jm->type != JABBER_MESSAGE_GROUPCHAT_INVITE) { const char *jid = xmlnode_get_attrib(child, "jid"); diff -r ddbcef747dc7 -r 599d6ac9bbfe src/protocols/jabber/presence.c --- a/src/protocols/jabber/presence.c Sun Apr 04 15:08:26 2004 +0000 +++ b/src/protocols/jabber/presence.c Sun Apr 04 18:27:45 2004 +0000 @@ -39,7 +39,12 @@ { JabberChat *chat = val; xmlnode *presence = user_data; - char *chat_full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server, + char *chat_full_jid; + + if(!chat->conv) + return; + + chat_full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server, chat->handle); xmlnode_set_attrib(presence, "to", chat_full_jid); diff -r ddbcef747dc7 -r 599d6ac9bbfe src/util.c --- a/src/util.c Sun Apr 04 15:08:26 2004 +0000 +++ b/src/util.c Sun Apr 04 18:27:45 2004 +0000 @@ -427,6 +427,83 @@ return mktime(&tm); } +time_t +gaim_str_to_time(const char *timestamp, gboolean utc) +{ + struct tm t; + time_t retval = 0; + char buf[32]; + char *c; + int tzoff = 0; + + time(&retval); + localtime_r(&retval, &t); + + snprintf(buf, sizeof(buf), "%s", timestamp); + c = buf; + + /* 4 digit year */ + if(!sscanf(c, "%04d", &t.tm_year)) return 0; + c+=4; + if(*c == '-') + c++; + + t.tm_year -= 1900; + + /* 2 digit month */ + if(!sscanf(c, "%02d", &t.tm_mon)) return 0; + c+=2; + if(*c == '-') + c++; + + t.tm_mon -= 1; + + + /* 2 digit day */ + if(!sscanf(c, "%02d", &t.tm_mday)) return 0; + c+=2; + if(*c == 'T' || *c == '.') { /* we have more than a date, keep going */ + c++; /* skip the "T" */ + + /* 2 digit hour */ + if(sscanf(c, "%02d:%02d:%02d", &t.tm_hour, &t.tm_min, &t.tm_sec) == 3 || + sscanf(c, "%02d%02d%02d", &t.tm_hour, &t.tm_min, &t.tm_sec) == 3) { + int tzhrs, tzmins; + c+=8; + if(*c == '.') /* dealing with precision we don't care about */ + c += 4; + + if((*c == '+' || *c == '-') && + sscanf(c+1, "%02d:%02d", &tzhrs, &tzmins)) { + tzoff = tzhrs*60*60 + tzmins*60; + if(*c == '+') + tzoff *= -1; + } + + if(tzoff || utc) { + +#ifdef HAVE_TM_GMTOFF + tzoff += t.tm_gmtoff; +#else +# ifdef HAVE_TIMEZONE + tzset(); /* making sure */ + tzoff -= timezone; +# endif +#endif + } + } + } + + t.tm_isdst = -1; + + retval = mktime(&t); + + retval += tzoff; + + return retval; +} + + /************************************************************************** * Markup Functions diff -r ddbcef747dc7 -r 599d6ac9bbfe src/util.h --- a/src/util.h Sun Apr 04 15:08:26 2004 +0000 +++ b/src/util.h Sun Apr 04 18:27:45 2004 +0000 @@ -183,6 +183,16 @@ time_t gaim_time_build(int year, int month, int day, int hour, int min, int sec); +/** + * Parses a timestamp in jabber or ISO8601 format and returns a time_t. + * + * @param timestamp The timestamp + * @param utc Assume UTC if no timezone specified + * + * @return A time_t. + */ +time_t gaim_str_to_time(const char *timestamp, gboolean utc); + /*@}*/