static void set_entry(JamDoc *doc, LJEntry *entry) { #ifdef HAVE_GTK GtkTextIter start, end; #endif /* HAVE_GTK */ lj_entry_free(doc->entry); if (entry) doc->entry = entry; else entry = doc->entry = lj_entry_new(); #ifdef HAVE_GTK /* block the buffer signal so we don't rapidly flip to dirty and back. */ g_signal_handler_block(doc->buffer, doc->buffer_signal); gtk_text_buffer_get_bounds(doc->buffer, &start, &end); gtk_text_buffer_delete(doc->buffer, &start, &end); if (entry->event) gtk_text_buffer_insert(doc->buffer, &start, entry->event, -1); g_signal_handler_unblock(doc->buffer, doc->buffer_signal); #endif /* HAVE_GTK */ jam_doc_set_dirty(doc, FALSE); #ifdef HAVE_GTK /* since the buffer signal was blocked, we need to do this manually. */ gtk_text_buffer_set_modified(doc->buffer, FALSE); #endif /* HAVE_GTK */ }
LJEntry* lj_entry_new_from_xml_node(void* doc, void* node) { LJEntry *entry; entry = lj_entry_new(); lj_entry_load_from_xml_node(entry, doc, node); return entry; }
static LJEntry* lj_entry_new_from_result(LJResult *result, int i) { LJEntry *entry; char *itemid, *anum; itemid = lj_result_getf(result, "events_%d_itemid", i); if (!itemid) return NULL; entry = lj_entry_new(); entry->itemid = atoi(itemid); anum = lj_result_getf(result, "events_%d_anum", i); if (anum) entry->anum = atoi(anum); lj_ljdate_to_tm(lj_result_getf(result, "events_%d_eventtime", i), &entry->time); entry->event = lj_urldecode(lj_result_getf(result, "events_%d_event", i)); if (!verify_utf8(&entry->event)) g_warning("Bad UTF-8 in event of itemid %d.\n", entry->itemid); /* http://www.livejournal.com/community/logjam/113710.html */ if (!entry->event) entry->event = g_strdup(""); entry->subject = g_strdup(lj_result_getf(result, "events_%d_subject", i)); if (!verify_utf8(&entry->subject)) g_warning("Bad UTF-8 in subject of itemid %d.\n", entry->itemid); lj_security_from_strings(&entry->security, lj_result_getf(result, "events_%d_security", i), lj_result_getf(result, "events_%d_allowmask", i)); return entry; }
static gboolean load_items(DraftStoreUI *dsui) { LJEntry *entry; entry = lj_entry_new(); draft_store_each_header(dsui->ds, entry, load_item_cb, dsui); lj_entry_free(entry); return TRUE; }
static void jam_doc_init(GTypeInstance *inst, gpointer g_class) { JamDoc *doc = LOGJAM_DOC(inst); doc->entry = lj_entry_new(); doc->entry->security = conf.defaultsecurity; doc->dirty = FALSE; #ifdef HAVE_GTK doc->buffer = gtk_text_buffer_new(NULL); doc->buffer_signal = g_signal_connect(G_OBJECT(doc->buffer), "modified-changed", G_CALLBACK(buffer_changed_cb), doc); gtk_text_buffer_set_modified(doc->buffer, FALSE); if (conf.options.smartquotes) smartquotes_attach(doc->buffer); #endif /* HAVE_GTK */ }
LJEntry* journal_store_get_entry(JournalStore *js, int get_itemid) { LJEntry *entry; sqlite3_stmt *stmt = NULL; int ret; time_t timestamp; SQLCHECK(sqlite3_prepare(js->db, "SELECT anum, subject, event, moodid, mood, " /* 0-4 */ "music, pickeyword, preformatted, backdated, " /* 5-9 */ "comments, timestamp, security, taglist " /* 10-13 */ "FROM entry WHERE itemid=?1", -1, &stmt, NULL)); SQLCHECK(sqlite3_bind_int(stmt, 1, get_itemid)); ret = sqlite3_step(stmt); if (ret != SQLITE_ROW) { SQLCHECK(sqlite3_finalize(stmt)); return NULL; } entry = lj_entry_new(); entry->itemid = get_itemid; entry->anum = sqlite3_column_int(stmt, 0); entry->subject = dup_col_or_null(stmt, 1); entry->event = dup_col_or_null(stmt, 2); entry->moodid = sqlite3_column_int(stmt, 3); entry->mood = dup_col_or_null(stmt, 4); entry->music = dup_col_or_null(stmt, 5); entry->pickeyword = dup_col_or_null(stmt, 6); entry->preformatted = sqlite3_column_int(stmt, 7); entry->backdated = sqlite3_column_int(stmt, 8); entry->comments = sqlite3_column_int(stmt, 9); entry->taglist = dup_col_or_null(stmt, 12); timestamp = sqlite3_column_int(stmt, 10); gmtime_r(×tamp, &entry->time); if (sqlite3_column_type(stmt, 11) != SQLITE_NULL) security_from_int(&entry->security, sqlite3_column_int(stmt, 11)); SQLCHECK(sqlite3_finalize(stmt)); return entry; }
LJEntry * lj_entry_copy(LJEntry *e) { LJEntry *newe = lj_entry_new(); memcpy(newe, e, sizeof(LJEntry)); if (e->subject) newe->subject = g_strdup(e->subject); if (e->event) newe->event = g_strdup(e->event); if (e->mood) newe->mood = g_strdup(e->mood); if (e->music) newe->music = g_strdup(e->music); if (e->location) newe->location = g_strdup(e->location); if (e->taglist) newe->taglist = g_strdup(e->taglist); if (e->pickeyword) newe->pickeyword = g_strdup(e->pickeyword); return newe; }
LJEntry* lj_entry_new_from_file(FILE *f, LJEntryFileType type, LJEntryFileType *typeret, GError **err) { GString *str = g_string_new(NULL); char buf[1024]; int len; LJEntry *entry; while ((len = (int)fread(buf, 1, 1024, f)) > 0) g_string_append_len(str, buf, len); entry = lj_entry_new(); if (!lj_entry_load(entry, str->str, str->len, type, typeret, err)) { lj_entry_free(entry); entry = NULL; } g_string_free(str, TRUE); return entry; }