Compare commits
No commits in common. "27fcc1cea081b35ecadc6ff69873f3f72f4d6f52" and "6dbff67bee5fb2fc902298de23ebff061ca39cbe" have entirely different histories.
27fcc1cea0
...
6dbff67bee
@ -5,4 +5,3 @@ ADD_DEFINITIONS("-Wall -Werror -std=c99")
|
|||||||
ENABLE_TESTING()
|
ENABLE_TESTING()
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(lib)
|
ADD_SUBDIRECTORY(lib)
|
||||||
ADD_SUBDIRECTORY(edwatch)
|
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.24)
|
|
||||||
PROJECT(edterm)
|
|
||||||
|
|
||||||
SET(SOURCES
|
|
||||||
"edwatch.c"
|
|
||||||
)
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
|
||||||
${GLIB2_INCLUDE_DIRS}
|
|
||||||
${EDAPI_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
ADD_EXECUTABLE("edwatch" ${SOURCES})
|
|
||||||
TARGET_LINK_LIBRARIES(
|
|
||||||
"edwatch"
|
|
||||||
"edapi"
|
|
||||||
)
|
|
@ -1,56 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <gio/gio.h>
|
|
||||||
|
|
||||||
#include <edapi/journal/journal.h>
|
|
||||||
#include <edapi/journal/entry.h>
|
|
||||||
#include <edapi/journal/file.h>
|
|
||||||
|
|
||||||
static EDJournal *journal = NULL;
|
|
||||||
static GApplication *app = NULL;
|
|
||||||
|
|
||||||
static void interrupt(int signal)
|
|
||||||
{
|
|
||||||
if (app != NULL) {
|
|
||||||
g_application_release(app);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void new_entry(EDJournal *sender, EDJournalFile *file,
|
|
||||||
EDJournalEntry *entry, gpointer data)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "new event!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void activate(GApplication *self, gpointer data)
|
|
||||||
{
|
|
||||||
gchar *location = NULL;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
journal = ed_journal_new_with_location(location, &error);
|
|
||||||
if (journal == NULL) {
|
|
||||||
fprintf(stderr, "failed to open journal: %s\n",
|
|
||||||
error->message);
|
|
||||||
g_application_quit(self);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_signal_connect(journal, "new-entry", G_CALLBACK(new_entry), NULL);
|
|
||||||
|
|
||||||
g_application_hold(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int ac, char **av)
|
|
||||||
{
|
|
||||||
app = g_application_new("org.nola.edwatch", 0);
|
|
||||||
if (app == NULL) {
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
signal(SIGINT, interrupt);
|
|
||||||
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
|
|
||||||
|
|
||||||
g_application_run(app, 0, NULL);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -18,9 +18,6 @@ SET(SOURCES
|
|||||||
"src/journal/journal.c"
|
"src/journal/journal.c"
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(EDAPI_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
|
|
||||||
CACHE STRING "EDAPI lib include dir")
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
"include"
|
"include"
|
||||||
${GIO2_INCLUDE_DIRS}
|
${GIO2_INCLUDE_DIRS}
|
||||||
|
@ -33,20 +33,10 @@ EDErrorCode ed_journal_file_parse_filename(
|
|||||||
*
|
*
|
||||||
* To fully load all entries call ed_journal_file_load().
|
* To fully load all entries call ed_journal_file_load().
|
||||||
*/
|
*/
|
||||||
EDErrorCode ed_journal_file_peek(EDJournalFile *file,
|
EDErrorCode ed_journal_file_open(EDJournalFile *file,
|
||||||
char const *filename,
|
char const *filename,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens the file and seeks to its end. If any new entries are
|
|
||||||
* added by the game then ed_journal_file_read() will return new
|
|
||||||
* entries.
|
|
||||||
*/
|
|
||||||
EDErrorCode ed_journal_file_open_tail(EDJournalFile *self);
|
|
||||||
void ed_journal_file_close(EDJournalFile *self);
|
|
||||||
|
|
||||||
EDJournalEntry *ed_journal_file_read(EDJournalFile *self, GError **error);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load all entries from this given journal.
|
* Load all entries from this given journal.
|
||||||
*/
|
*/
|
||||||
|
@ -13,16 +13,12 @@ G_DECLARE_FINAL_TYPE(
|
|||||||
|
|
||||||
#define ED_TYPE_JOURNAL ed_journal_get_type()
|
#define ED_TYPE_JOURNAL ed_journal_get_type()
|
||||||
|
|
||||||
gchar *ed_journal_determine_location(void);
|
|
||||||
|
|
||||||
EDJournal *ed_journal_new(void);
|
EDJournal *ed_journal_new(void);
|
||||||
|
|
||||||
EDJournal *ed_journal_new_with_location(gchar const *dir, GError **error);
|
EDJournal *ed_journal_new_with_location(gchar const *dir);
|
||||||
|
|
||||||
gchar const *ed_journal_get_location(EDJournal *j);
|
gchar const *ed_journal_get_location(EDJournal *j);
|
||||||
|
EDErrorCode ed_journal_set_location(EDJournal *j, gchar const *dir);
|
||||||
void ed_journal_close(EDJournal *self);
|
|
||||||
EDErrorCode ed_journal_open(EDJournal *j, gchar const *dir, GError **error);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of files. Files are sorted in ascending order, with
|
* Get a list of files. Files are sorted in ascending order, with
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gchar *filename;
|
gchar *filename;
|
||||||
GFile *file;
|
|
||||||
gchar *datetime;
|
gchar *datetime;
|
||||||
GDateTime *timestamp;
|
GDateTime *timestamp;
|
||||||
gint part;
|
gint part;
|
||||||
@ -16,9 +15,6 @@ typedef struct {
|
|||||||
EDCommander *commander;
|
EDCommander *commander;
|
||||||
gchar *gameversion;
|
gchar *gameversion;
|
||||||
|
|
||||||
GDataInputStream *reader;
|
|
||||||
GFileInputStream *stream;
|
|
||||||
|
|
||||||
EDJournalEntry *first;
|
EDJournalEntry *first;
|
||||||
EDJournalEntry *last;
|
EDJournalEntry *last;
|
||||||
} EDJournalFilePrivate;
|
} EDJournalFilePrivate;
|
||||||
@ -44,13 +40,8 @@ static void ed_journal_file_dispose(GObject *obj)
|
|||||||
EDJournalFile *self = ED_JOURNALFILE(obj);
|
EDJournalFile *self = ED_JOURNALFILE(obj);
|
||||||
EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self);
|
EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self);
|
||||||
|
|
||||||
g_clear_object(&p->file);
|
|
||||||
g_clear_object(&p->reader);
|
|
||||||
g_clear_object(&p->stream);
|
|
||||||
|
|
||||||
g_clear_object(&p->first);
|
g_clear_object(&p->first);
|
||||||
g_clear_object(&p->last);
|
g_clear_object(&p->last);
|
||||||
|
|
||||||
g_clear_object(&p->commander);
|
g_clear_object(&p->commander);
|
||||||
|
|
||||||
G_OBJECT_CLASS(ed_journal_file_parent_class)->dispose(obj);
|
G_OBJECT_CLASS(ed_journal_file_parent_class)->dispose(obj);
|
||||||
@ -224,7 +215,6 @@ static EDErrorCode ed_journal_file_parse_(EDJournalFile *self,
|
|||||||
|
|
||||||
g_free(p->filename);
|
g_free(p->filename);
|
||||||
p->filename = g_strdup(filename);
|
p->filename = g_strdup(filename);
|
||||||
p->file = g_file_new_for_path(p->filename);
|
|
||||||
|
|
||||||
ret = ed_error_success;
|
ret = ed_error_success;
|
||||||
|
|
||||||
@ -267,6 +257,7 @@ static EDErrorCode ed_journal_file_read_first_(EDJournalFile *self)
|
|||||||
EDErrorCode ret = ed_error_internal;
|
EDErrorCode ret = ed_error_internal;
|
||||||
EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self);
|
EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self);
|
||||||
|
|
||||||
|
GFile *file = NULL;
|
||||||
GFileInputStream *stream = NULL;
|
GFileInputStream *stream = NULL;
|
||||||
GDataInputStream *reader = NULL;
|
GDataInputStream *reader = NULL;
|
||||||
EDJournalEntry *entry = NULL;
|
EDJournalEntry *entry = NULL;
|
||||||
@ -274,7 +265,10 @@ static EDErrorCode ed_journal_file_read_first_(EDJournalFile *self)
|
|||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
gsize linelen = 0;
|
gsize linelen = 0;
|
||||||
|
|
||||||
stream = g_file_read(p->file, NULL, NULL);
|
file = g_file_new_for_path(p->filename);
|
||||||
|
goto_if_true(file == NULL, done);
|
||||||
|
|
||||||
|
stream = g_file_read(file, NULL, NULL);
|
||||||
if (stream == NULL) {
|
if (stream == NULL) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -325,6 +319,7 @@ done:
|
|||||||
|
|
||||||
g_clear_object(&reader);
|
g_clear_object(&reader);
|
||||||
g_clear_object(&stream);
|
g_clear_object(&stream);
|
||||||
|
g_clear_object(&file);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -367,9 +362,9 @@ static EDErrorCode ed_journal_file_read_last_(EDJournalFile *self)
|
|||||||
|
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
/* arbitrary */
|
/* arbitrary */
|
||||||
pos = (pos - 100);
|
pos = end - 100;
|
||||||
if (pos <= 0) {
|
if (pos <= 0) {
|
||||||
pos = 0;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_seekable_seek(G_SEEKABLE(stream), pos, G_SEEK_SET,
|
if (!g_seekable_seek(G_SEEKABLE(stream), pos, G_SEEK_SET,
|
||||||
@ -403,11 +398,7 @@ static EDErrorCode ed_journal_file_read_last_(EDJournalFile *self)
|
|||||||
} while (TRUE);
|
} while (TRUE);
|
||||||
|
|
||||||
if (last == NULL) {
|
if (last == NULL) {
|
||||||
if (pos <= 0) {
|
goto done;
|
||||||
goto done;
|
|
||||||
} else {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = ed_journal_entry_new_parse(last, NULL);
|
entry = ed_journal_entry_new_parse(last, NULL);
|
||||||
@ -529,7 +520,7 @@ done:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
EDErrorCode ed_journal_file_peek(EDJournalFile *file,
|
EDErrorCode ed_journal_file_open(EDJournalFile *file,
|
||||||
char const *filename,
|
char const *filename,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
@ -645,78 +636,3 @@ gboolean ed_journal_file_has_entries_in_range(EDJournalFile *self,
|
|||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EDJournalEntry *ed_journal_file_read(EDJournalFile *self, GError **error)
|
|
||||||
{
|
|
||||||
return_if_true(self == NULL, NULL);
|
|
||||||
EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self);
|
|
||||||
GError *tmp = NULL;
|
|
||||||
|
|
||||||
if (p->reader == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
gchar *line = NULL;
|
|
||||||
gsize linelen = 0;
|
|
||||||
|
|
||||||
line = g_data_input_stream_read_line_utf8(
|
|
||||||
p->reader, &linelen, NULL, &tmp);
|
|
||||||
if (line == NULL) {
|
|
||||||
g_propagate_error(error, tmp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strchomp(line);
|
|
||||||
if (strlen(line) <= 0) {
|
|
||||||
g_free(line);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
EDJournalEntry *entry = ed_journal_entry_new_parse(line, &tmp);
|
|
||||||
g_free(line);
|
|
||||||
|
|
||||||
if (entry == NULL) {
|
|
||||||
g_propagate_error(error, tmp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ed_journal_file_close(EDJournalFile *self)
|
|
||||||
{
|
|
||||||
return_if_true(self == NULL,);
|
|
||||||
EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self);
|
|
||||||
|
|
||||||
g_clear_object(&p->stream);
|
|
||||||
g_clear_object(&p->reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
EDErrorCode ed_journal_file_open_tail(EDJournalFile *self)
|
|
||||||
{
|
|
||||||
return_if_true(self == NULL, ed_error_args);
|
|
||||||
EDJournalFilePrivate *p = ed_journal_file_get_instance_private(self);
|
|
||||||
|
|
||||||
EDErrorCode ret = ed_error_internal;
|
|
||||||
|
|
||||||
p->stream = g_file_read(p->file, NULL, NULL);
|
|
||||||
goto_if_true(p->stream == NULL, done);
|
|
||||||
|
|
||||||
p->reader = g_data_input_stream_new(G_INPUT_STREAM(p->stream));
|
|
||||||
goto_if_true(p->reader == NULL, done);
|
|
||||||
|
|
||||||
if (!g_seekable_seek(G_SEEKABLE(p->stream), 0, G_SEEK_END, NULL, NULL)) {
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = ed_error_success;
|
|
||||||
|
|
||||||
done:
|
|
||||||
|
|
||||||
if (ED_ERROR(ret)) {
|
|
||||||
g_clear_object(&p->stream);
|
|
||||||
g_clear_object(&p->reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
@ -2,14 +2,9 @@
|
|||||||
#include <edapi/journal/file.h>
|
#include <edapi/journal/file.h>
|
||||||
#include <edapi/util.h>
|
#include <edapi/util.h>
|
||||||
|
|
||||||
#include <gio/gio.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gchar *location;
|
gchar *location;
|
||||||
GFile *loc;
|
|
||||||
GList *files;
|
GList *files;
|
||||||
GFileMonitor *monitor;
|
|
||||||
} EDJournalPrivate;
|
} EDJournalPrivate;
|
||||||
|
|
||||||
struct _EDJournal {
|
struct _EDJournal {
|
||||||
@ -28,10 +23,6 @@ G_DEFINE_TYPE_EXTENDED(
|
|||||||
G_ADD_PRIVATE(EDJournal)
|
G_ADD_PRIVATE(EDJournal)
|
||||||
);
|
);
|
||||||
|
|
||||||
static void ed_journal_changed(GFileMonitor *self, GFile *file, GFile *other,
|
|
||||||
GFileMonitorEvent event,
|
|
||||||
gpointer user);
|
|
||||||
|
|
||||||
static void ed_journal_finalize(GObject *obj)
|
static void ed_journal_finalize(GObject *obj)
|
||||||
{
|
{
|
||||||
EDJournal *self = ED_JOURNAL(obj);
|
EDJournal *self = ED_JOURNAL(obj);
|
||||||
@ -43,34 +34,12 @@ static void ed_journal_finalize(GObject *obj)
|
|||||||
G_OBJECT_CLASS(ed_journal_parent_class)->finalize(obj);
|
G_OBJECT_CLASS(ed_journal_parent_class)->finalize(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ed_journal_dispose(GObject *obj)
|
|
||||||
{
|
|
||||||
EDJournal *self = ED_JOURNAL(obj);
|
|
||||||
EDJournalPrivate *p = ed_journal_get_instance_private(self);
|
|
||||||
|
|
||||||
g_clear_object(&p->loc);
|
|
||||||
g_clear_object(&p->monitor);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS(ed_journal_parent_class)->dispose(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ed_journal_class_init(EDJournalClass *klass)
|
static void ed_journal_class_init(EDJournalClass *klass)
|
||||||
{
|
{
|
||||||
g_signal_new("new-entry",
|
|
||||||
G_TYPE_FROM_CLASS(klass),
|
|
||||||
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
|
|
||||||
0, NULL, NULL, NULL,
|
|
||||||
G_TYPE_NONE,
|
|
||||||
2,
|
|
||||||
ED_TYPE_JOURNALFILE,
|
|
||||||
ED_TYPE_JOURNALENTRY
|
|
||||||
);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS(klass)->finalize = ed_journal_finalize;
|
G_OBJECT_CLASS(klass)->finalize = ed_journal_finalize;
|
||||||
G_OBJECT_CLASS(klass)->dispose = ed_journal_dispose;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar *ed_journal_determine_location(void)
|
static EDErrorCode ed_journal_determine_location(EDJournal *self)
|
||||||
{
|
{
|
||||||
gchar *location = NULL;
|
gchar *location = NULL;
|
||||||
gchar *tmp = NULL;
|
gchar *tmp = NULL;
|
||||||
@ -98,19 +67,22 @@ gchar *ed_journal_determine_location(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (S_EMPTY(location)) {
|
if (S_EMPTY(location)) {
|
||||||
return NULL;
|
return ed_error_invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_file_test(location, G_FILE_TEST_IS_DIR)) {
|
if (!g_file_test(location, G_FILE_TEST_IS_DIR)) {
|
||||||
g_free(location);
|
g_free(location);
|
||||||
return NULL;
|
return ed_error_invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
return location;
|
ed_journal_set_location(self, location);
|
||||||
|
|
||||||
|
return ed_error_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ed_journal_init(EDJournal *self)
|
static void ed_journal_init(EDJournal *self)
|
||||||
{
|
{
|
||||||
|
ed_journal_determine_location(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
EDJournal *ed_journal_new(void)
|
EDJournal *ed_journal_new(void)
|
||||||
@ -118,32 +90,18 @@ EDJournal *ed_journal_new(void)
|
|||||||
return g_object_new(ED_TYPE_JOURNAL, NULL);
|
return g_object_new(ED_TYPE_JOURNAL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
EDJournal *ed_journal_new_with_location(gchar const *dir, GError **error)
|
EDJournal *ed_journal_new_with_location(gchar const *dir)
|
||||||
{
|
{
|
||||||
EDJournal *j = NULL;
|
EDJournal *j = NULL;
|
||||||
EDErrorCode ret = ed_error_success;
|
EDErrorCode ret = ed_error_success;
|
||||||
GError *tmp = NULL;
|
|
||||||
|
|
||||||
if (dir == NULL) {
|
|
||||||
gchar *loc = ed_journal_determine_location();
|
|
||||||
return_if_true(loc == NULL, NULL);
|
|
||||||
|
|
||||||
j = ed_journal_new_with_location(loc, error);
|
|
||||||
g_free(loc);
|
|
||||||
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
j = ed_journal_new();
|
j = ed_journal_new();
|
||||||
return_if_true(j == NULL, NULL);
|
return_if_true(j == NULL, NULL);
|
||||||
|
|
||||||
if (!S_EMPTY(dir)) {
|
ret = ed_journal_set_location(j, dir);
|
||||||
ret = ed_journal_open(j, dir, &tmp);
|
if (ED_ERROR(ret)) {
|
||||||
if (ED_ERROR(ret)) {
|
g_clear_object(&j);
|
||||||
g_propagate_error(error, tmp);
|
return NULL;
|
||||||
g_clear_object(&j);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
@ -185,7 +143,7 @@ static void ed_journal_load_files(EDJournal *self)
|
|||||||
journalfile = ed_journal_file_new();
|
journalfile = ed_journal_file_new();
|
||||||
goto_if_true(journalfile == NULL, next);
|
goto_if_true(journalfile == NULL, next);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(journalfile, full, NULL);
|
ret = ed_journal_file_open(journalfile, full, NULL);
|
||||||
if (ED_SUCCESS(ret)) {
|
if (ED_SUCCESS(ret)) {
|
||||||
p->files = g_list_append(p->files, journalfile);
|
p->files = g_list_append(p->files, journalfile);
|
||||||
}
|
}
|
||||||
@ -206,40 +164,6 @@ done:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static EDErrorCode ed_journal_watch(EDJournal *self, GError **error)
|
|
||||||
{
|
|
||||||
return_if_true(self == NULL, ed_error_args);
|
|
||||||
|
|
||||||
EDJournalPrivate *p = ed_journal_get_instance_private(self);
|
|
||||||
GError *tmp = NULL;
|
|
||||||
|
|
||||||
g_clear_object(&p->monitor);
|
|
||||||
|
|
||||||
p->monitor = g_file_monitor_directory(p->loc, 0, NULL, &tmp);
|
|
||||||
if (p->monitor == NULL) {
|
|
||||||
g_propagate_error(error, tmp);
|
|
||||||
return ed_error_internal;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_signal_connect(
|
|
||||||
p->monitor, "changed", G_CALLBACK(ed_journal_changed), self);
|
|
||||||
|
|
||||||
return ed_error_success;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ed_journal_changed(GFileMonitor *mon, GFile *file, GFile *other,
|
|
||||||
GFileMonitorEvent event,
|
|
||||||
gpointer user)
|
|
||||||
{
|
|
||||||
EDJournal *self = ED_JOURNAL(user);
|
|
||||||
|
|
||||||
if (event == G_FILE_MONITOR_EVENT_CHANGED) {
|
|
||||||
printf("file changed!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
(void)self;
|
|
||||||
}
|
|
||||||
|
|
||||||
gchar const *ed_journal_get_location(EDJournal *self)
|
gchar const *ed_journal_get_location(EDJournal *self)
|
||||||
{
|
{
|
||||||
return_if_true(self == NULL, NULL);
|
return_if_true(self == NULL, NULL);
|
||||||
@ -247,30 +171,11 @@ gchar const *ed_journal_get_location(EDJournal *self)
|
|||||||
return p->location;
|
return p->location;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ed_journal_close(EDJournal *self)
|
EDErrorCode ed_journal_set_location(EDJournal *self, gchar const *dir)
|
||||||
{
|
|
||||||
return_if_true(self == NULL,);
|
|
||||||
|
|
||||||
EDJournalPrivate *p = ed_journal_get_instance_private(self);
|
|
||||||
|
|
||||||
g_free(p->location);
|
|
||||||
p->location = NULL;
|
|
||||||
|
|
||||||
g_clear_object(&p->loc);
|
|
||||||
|
|
||||||
g_clear_object(&p->monitor);
|
|
||||||
|
|
||||||
g_list_free_full(p->files, g_object_unref);
|
|
||||||
p->files = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
EDErrorCode ed_journal_open(EDJournal *self, gchar const *dir, GError **error)
|
|
||||||
{
|
{
|
||||||
return_if_true(self == NULL || dir == NULL, ed_error_args);
|
return_if_true(self == NULL || dir == NULL, ed_error_args);
|
||||||
|
|
||||||
EDJournalPrivate *p = ed_journal_get_instance_private(self);
|
EDJournalPrivate *p = ed_journal_get_instance_private(self);
|
||||||
EDErrorCode ret = 0;
|
|
||||||
GError *tmp = NULL;
|
|
||||||
|
|
||||||
if (!g_file_test(dir, G_FILE_TEST_IS_DIR)) {
|
if (!g_file_test(dir, G_FILE_TEST_IS_DIR)) {
|
||||||
return ed_error_invalid;
|
return ed_error_invalid;
|
||||||
@ -279,18 +184,8 @@ EDErrorCode ed_journal_open(EDJournal *self, gchar const *dir, GError **error)
|
|||||||
g_free(p->location);
|
g_free(p->location);
|
||||||
p->location = g_strdup(dir);
|
p->location = g_strdup(dir);
|
||||||
|
|
||||||
g_clear_object(&p->loc);
|
|
||||||
p->loc = g_file_new_for_path(dir);
|
|
||||||
|
|
||||||
ed_journal_load_files(self);
|
ed_journal_load_files(self);
|
||||||
|
|
||||||
ret = ed_journal_watch(self, &tmp);
|
|
||||||
if (ED_ERROR(ret)) {
|
|
||||||
g_propagate_error(error, tmp);
|
|
||||||
ed_journal_close(self);
|
|
||||||
return ed_error_internal;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ed_error_success;
|
return ed_error_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ static void test_new_filename(void **state)
|
|||||||
|
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ static void test_old_filename(void **state)
|
|||||||
|
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ static void test_new_datetime(void **state)
|
|||||||
|
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ static void test_old_datetime(void **state)
|
|||||||
|
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ static void test_valid_load(void **state)
|
|||||||
file = ed_journal_file_new();
|
file = ed_journal_file_new();
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
|
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
@ -128,7 +128,7 @@ static void test_valid_peek(void **state)
|
|||||||
file = ed_journal_file_new();
|
file = ed_journal_file_new();
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
|
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
@ -161,7 +161,7 @@ static void test_first_last(void **state)
|
|||||||
file = ed_journal_file_new();
|
file = ed_journal_file_new();
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
|
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
@ -193,7 +193,7 @@ static void test_in_range(void **state)
|
|||||||
file = ed_journal_file_new();
|
file = ed_journal_file_new();
|
||||||
assert_non_null(file);
|
assert_non_null(file);
|
||||||
|
|
||||||
ret = ed_journal_file_peek(file, filename, &error);
|
ret = ed_journal_file_open(file, filename, &error);
|
||||||
|
|
||||||
assert_null(error);
|
assert_null(error);
|
||||||
assert_int_equal(ret, ed_error_success);
|
assert_int_equal(ret, ed_error_success);
|
||||||
|
@ -14,7 +14,7 @@ static void test_userprofile_location(void **state)
|
|||||||
{
|
{
|
||||||
setenv("USERPROFILE", "./", 1);
|
setenv("USERPROFILE", "./", 1);
|
||||||
|
|
||||||
EDJournal *journal = ed_journal_new_with_location(NULL, NULL);
|
EDJournal *journal = ed_journal_new();
|
||||||
assert_non_null(journal);
|
assert_non_null(journal);
|
||||||
|
|
||||||
gchar const *location = ed_journal_get_location(journal);
|
gchar const *location = ed_journal_get_location(journal);
|
||||||
@ -27,7 +27,7 @@ static void test_file_sorting(void **state)
|
|||||||
{
|
{
|
||||||
setenv("USERPROFILE", "./", 1);
|
setenv("USERPROFILE", "./", 1);
|
||||||
|
|
||||||
EDJournal *journal = ed_journal_new_with_location(NULL, NULL);
|
EDJournal *journal = ed_journal_new();
|
||||||
assert_non_null(journal);
|
assert_non_null(journal);
|
||||||
|
|
||||||
gchar const *location = ed_journal_get_location(journal);
|
gchar const *location = ed_journal_get_location(journal);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user