mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-11-14 19:03:47 +01:00
Implement cb_zathura_db_watch_file
This commit is contained in:
parent
a0aa0d44b7
commit
186353111e
@ -38,6 +38,9 @@ static bool zathura_db_check_file(const char* path);
|
|||||||
static girara_list_t* zathura_db_read_bookmarks_from_file(char* path);
|
static girara_list_t* zathura_db_read_bookmarks_from_file(char* path);
|
||||||
static girara_list_t* zathura_db_read_history_from_file(char* path);
|
static girara_list_t* zathura_db_read_history_from_file(char* path);
|
||||||
static void zathura_db_write_history_to_file(const char* file, girara_list_t* urls);
|
static void zathura_db_write_history_to_file(const char* file, girara_list_t* urls);
|
||||||
|
static void cb_zathura_db_watch_file(GFileMonitor* monitor, GFile* file, GFile*
|
||||||
|
other_file, GFileMonitorEvent event, zathura_database_t* database);
|
||||||
|
static void zathura_db_file_info_free(zathura_db_file_info_t* file_info);
|
||||||
|
|
||||||
struct zathura_database_s
|
struct zathura_database_s
|
||||||
{
|
{
|
||||||
@ -89,6 +92,15 @@ zathura_db_init(const char* dir)
|
|||||||
goto error_free;
|
goto error_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
girara_list_set_free_function(db->bookmarks, (girara_free_function_t) zathura_bookmark_free);
|
||||||
|
|
||||||
|
g_signal_connect(
|
||||||
|
G_OBJECT(db->bookmark_monitor),
|
||||||
|
"changed",
|
||||||
|
G_CALLBACK(cb_zathura_db_watch_file),
|
||||||
|
db
|
||||||
|
);
|
||||||
|
|
||||||
/* history */
|
/* history */
|
||||||
db->history_path = g_build_filename(dir, HISTORY, NULL);
|
db->history_path = g_build_filename(dir, HISTORY, NULL);
|
||||||
if (db->history_path == NULL ||
|
if (db->history_path == NULL ||
|
||||||
@ -109,11 +121,20 @@ zathura_db_init(const char* dir)
|
|||||||
}
|
}
|
||||||
g_object_unref(history_file);
|
g_object_unref(history_file);
|
||||||
|
|
||||||
|
g_signal_connect(
|
||||||
|
G_OBJECT(db->history_monitor),
|
||||||
|
"changed",
|
||||||
|
G_CALLBACK(cb_zathura_db_watch_file),
|
||||||
|
db
|
||||||
|
);
|
||||||
|
|
||||||
db->history = zathura_db_read_history_from_file(db->history_path);
|
db->history = zathura_db_read_history_from_file(db->history_path);
|
||||||
if (db->history == NULL) {
|
if (db->history == NULL) {
|
||||||
goto error_free;
|
goto error_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
girara_list_set_free_function(db->history, (girara_free_function_t) zathura_db_file_info_free);
|
||||||
|
|
||||||
return db;
|
return db;
|
||||||
|
|
||||||
error_free:
|
error_free:
|
||||||
@ -458,3 +479,43 @@ zathura_db_write_history_to_file(const char* file, girara_list_t* history)
|
|||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cb_zathura_db_watch_file(GFileMonitor* UNUSED(monitor), GFile* file, GFile* UNUSED(other_file),
|
||||||
|
GFileMonitorEvent event, zathura_database_t* database)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "read history\n");
|
||||||
|
if (event != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT || database == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* path = g_file_get_path(file);
|
||||||
|
if (path == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (database->bookmark_path && strcmp(database->bookmark_path, path) == 0) {
|
||||||
|
girara_list_free(database->bookmarks);
|
||||||
|
zathura_lock_lock(database->bookmark_lock);
|
||||||
|
database->bookmarks = zathura_db_read_bookmarks_from_file(database->bookmark_path);
|
||||||
|
zathura_lock_unlock(database->bookmark_lock);
|
||||||
|
girara_list_set_free_function(database->bookmarks, (girara_free_function_t) zathura_bookmark_free);
|
||||||
|
} else if (database->history_path && strcmp(database->history_path, path) == 0) {
|
||||||
|
girara_list_free(database->history);
|
||||||
|
zathura_lock_lock(database->history_lock);
|
||||||
|
database->history = zathura_db_read_history_from_file(database->history_path);
|
||||||
|
zathura_lock_unlock(database->history_lock);
|
||||||
|
girara_list_set_free_function(database->history, (girara_free_function_t) zathura_db_file_info_free);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
zathura_db_file_info_free(zathura_db_file_info_t* file_info)
|
||||||
|
{
|
||||||
|
if (file_info == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(file_info->file);
|
||||||
|
free(file_info);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user