55
60
unsigned int year, month, day, hour, min, sec;
58
const gchar *logdir = RLogDir().c_str();
63
string history_log = _config->FindFile("Dir::Log::History");
64
const gchar *logfile = history_log.c_str();
67
while (history.stepToNextEntry() == true)
69
string start_date = history.getStartDate();
70
if(sscanf(start_date.c_str(), "%4u-%2u-%2u %2u:%2u:%2u",
71
&year, &month, &day, &hour, &min, &sec) != 6)
75
t.tm_year = year-1900;
81
GDate *date = g_date_new_dmy(day, (GDateMonth)month, year);
82
// need to convert here:
83
// glib: 1=Monday to 7=Sunday
84
// libc: 0=Sunday to 6=Saturday
85
t.tm_wday = g_date_get_weekday(date);
88
history_key = year*100+month;
89
if(history_map.count(history_key) == 0) {
90
gtk_tree_store_append(store, &month_iter, NULL);
91
strftime(str, sizeof(str), "%B %Y", &t);
92
gchar *sort_key = g_strdup_printf("%i", history_key);
93
gtk_tree_store_set (store, &month_iter,
94
COLUMN_LOG_DAY, utf8(str),
95
COLUMN_LOG_FILENAME, sort_key,
96
COLUMN_LOG_TYPE, LOG_TYPE_TOPLEVEL,
100
history_map.insert(make_pair<int,GtkTreeIter>(history_key,month_iter));
102
month_iter = history_map[history_key];
105
strftime(str, 512, "%x %R", &t);
106
gtk_tree_store_append (store, &date_iter, &month_iter);
107
gtk_tree_store_set (store, &date_iter,
108
COLUMN_LOG_DAY, utf8(str),
109
COLUMN_LOG_FILENAME, history.getCurrentLogfileName().c_str(),
110
COLUMN_LOG_TYPE, LOG_TYPE_FILE,
111
COLUMN_OFFSET, history.getOffset(),
59
117
GDir *dir = g_dir_open(logdir, 0, NULL);
60
118
while((logfile=g_dir_read_name(dir)) != NULL) {
61
119
if(sscanf(logfile, "%4u-%2u-%2u.%2u%2u%2u.log",
79
137
history_key = year*100+month;
80
138
if(history_map.count(history_key) == 0) {
81
139
gtk_tree_store_append(store, &month_iter, NULL);
82
strftime(str, 128, "%B %Y", &t);
140
strftime(str, sizeof(str), "%B %Y", &t);
83
141
gchar *sort_key = g_strdup_printf("%i", history_key);
84
142
gtk_tree_store_set (store, &month_iter,
85
143
COLUMN_LOG_DAY, utf8(str),
131
190
GtkTreeModel *model;
132
191
GtkTextIter start, end;
133
192
gchar *file = NULL;
135
195
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
136
196
GtkTextBuffer *buffer;
137
197
GtkTextIter start,end;
139
199
gtk_tree_model_get (model, &iter, COLUMN_LOG_FILENAME, &file, -1);
200
gtk_tree_model_get (model, &iter, COLUMN_OFFSET, &offset, -1);
140
202
// the months do not have a valid file
141
if(!FileExists(RLogDir()+string(file)))
203
if (!FileExists(string(file)))
206
// FIXME: port to RHistory
208
pkgTagSection Section;
209
Fd.Open(file, FileFd::ReadOnly);
210
pkgTagFile Parser(&Fd);
211
Parser.Jump(Section, offset);
144
213
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(me->_textView));
145
214
gtk_text_buffer_get_start_iter (buffer, &start);
146
215
gtk_text_buffer_get_end_iter(buffer,&end);
147
216
gtk_text_buffer_delete(buffer,&start,&end);
149
string logfile = RLogDir() + string(file);
218
const char *pstart, *pend;
220
Section.GetSection(pstart, pend);
221
strncpy(buf, pstart, std::min(unsigned long(pend-pstart), sizeof(buf)));
222
buf[pend-pstart] = 0;
223
gtk_text_buffer_set_text(buffer, buf, -1);
225
string logfile = string(file);
150
226
ifstream in(logfile.c_str());
152
while(getline(in, s)) {
228
while(getline(in, s))
153
230
// no need to free str later, it is allocated in a static buffer
154
231
const char *str = utf8(s.c_str());
156
234
gtk_text_buffer_get_end_iter(buffer, &end);
157
235
int line = gtk_text_iter_get_line(&end);
158
236
gtk_text_buffer_insert_at_cursor(buffer, str, -1);
160
239
char *off = g_strstr_len(str, strlen(str), me->findStr);
162
242
gtk_text_buffer_get_iter_at_line_index(buffer, &start,
164
244
gtk_text_buffer_get_iter_at_line_index(buffer, &end,