示例#1
0
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 */
}
示例#2
0
文件: entry.c 项目: spotrh/LogJam
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;
}
示例#3
0
文件: entry.c 项目: spotrh/LogJam
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;
}
示例#4
0
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;
}
示例#5
0
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 */
}
示例#6
0
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(&timestamp, &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;
}
示例#7
0
文件: entry.c 项目: spotrh/LogJam
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;
}
示例#8
0
文件: entry.c 项目: spotrh/LogJam
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;
}