2 * libosengine - A synchronization engine for the opensync framework
3 * Copyright (C) 2004-2005 Armin Bauer <armin.bauer@opensync.org>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "opensync_internals.h"
24 #include "opensync-archive.h"
25 #include "opensync-group.h"
26 #include "opensync-engine.h"
27 #include "opensync-data.h"
28 #include "opensync-mapping.h"
30 #include "opensync_obj_engine.h"
32 #include "opensync_mapping_engine.h"
33 #include "opensync_sink_engine_internals.h"
35 #include "opensync_mapping_entry_engine_internals.h"
36 #include "opensync_mapping_engine_internals.h"
39 OSyncMappingEntryEngine
*osync_entry_engine_new(OSyncMappingEntry
*entry
, OSyncMappingEngine
*mapping_engine
, OSyncSinkEngine
*sink_engine
, OSyncObjEngine
*objengine
, OSyncError
**error
)
41 OSyncMappingEntryEngine
*engine
= NULL
;
42 osync_trace(TRACE_ENTRY
, "%s(%p, %p, %p, %p, %p)", __func__
, entry
, mapping_engine
, sink_engine
, objengine
, error
);
43 osync_assert(sink_engine
);
46 engine
= osync_try_malloc0(sizeof(OSyncMappingEntryEngine
), error
);
49 engine
->ref_count
= 1;
51 engine
->sink_engine
= sink_engine
;
53 engine
->objengine
= objengine
;
55 engine
->mapping_engine
= osync_mapping_engine_ref(mapping_engine
);
56 engine
->entry
= osync_mapping_entry_ref(entry
);
58 sink_engine
->entries
= g_list_append(sink_engine
->entries
, engine
);
59 osync_entry_engine_ref(engine
);
61 osync_trace(TRACE_EXIT
, "%s: %p", __func__
, engine
);
65 osync_trace(TRACE_EXIT_ERROR
, "%s: %s", __func__
, osync_error_print(error
));
69 OSyncMappingEntryEngine
*osync_entry_engine_ref(OSyncMappingEntryEngine
*engine
)
73 g_atomic_int_inc(&(engine
->ref_count
));
78 void osync_entry_engine_unref(OSyncMappingEntryEngine
*engine
)
82 if (g_atomic_int_dec_and_test(&(engine
->ref_count
))) {
85 osync_change_unref(engine
->change
);
87 if (engine
->mapping_engine
)
88 osync_mapping_engine_unref(engine
->mapping_engine
);
91 osync_mapping_entry_unref(engine
->entry
);
97 osync_bool
osync_entry_engine_matches(OSyncMappingEntryEngine
*engine
, OSyncChange
*change
)
99 OSyncMappingEntry
*entry
= NULL
;
100 const char *mapping_entry_uid
= NULL
;
101 osync_assert(engine
);
102 osync_assert(engine
->entry
);
103 osync_assert(change
);
105 entry
= engine
->entry
;
106 mapping_entry_uid
= osync_mapping_entry_get_uid(entry
);
107 osync_assert(mapping_entry_uid
);
109 if (!strcmp(mapping_entry_uid
, osync_change_get_uid(change
)))
115 void osync_entry_engine_update(OSyncMappingEntryEngine
*engine
, OSyncChange
*change
)
117 osync_assert(engine
);
120 osync_change_unref(engine
->change
);
122 engine
->change
= change
;
123 engine
->mapping_engine
->synced
= FALSE
;
126 osync_change_ref(change
);
129 OSyncChange
*osync_entry_engine_get_change(OSyncMappingEntryEngine
*engine
)
131 osync_assert(engine
);
132 return engine
->change
;
135 osync_bool
osync_entry_engine_is_dirty(OSyncMappingEntryEngine
*engine
)
137 osync_assert(engine
);
138 return engine
->dirty
;
141 void osync_entry_engine_set_dirty(OSyncMappingEntryEngine
*engine
, osync_bool dirty
)
143 osync_assert(engine
);
144 engine
->dirty
= dirty
;