Changeset 2563

Show
Ignore:
Timestamp:
10/14/07 15:29:12 (1 year ago)
Author:
dgollub
Message:

Initial support for unidirectioanl synchronization.

Example:

Changing the member configuratin (syncmember.conf) from

<write>1</write>

to

<write>0</write>

make the member objtype sink to "read-only". Only for this objtype sink!
No changes will be commited to this object type sink...

This can be changed and checked with:

osync_bool osync_objtype_sink_get_write(OSyncObjTypeSink *sink);
void osync_objtype_sink_set_write(OSyncObjTypeSink *sink, osync_bool write);

To store this settinges changes in the member confguration it's required to call:

osync_bool osync_member_save(OSyncMember *member, OSyncError **error)

<write>1</write> is default if the plugin provides a commit function.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/opensync/engine/opensync_obj_engine.c

    r2562 r2563  
    12361236        for (p = engine->sink_engines; p; p = p->next) { 
    12371237                sinkengine = p->data; 
     1238 
     1239                OSyncMember *member = osync_client_proxy_get_member(sinkengine->proxy); 
     1240                OSyncObjTypeSink *objtype_sink = osync_member_find_objtype_sink(member, engine->objtype); 
     1241 
     1242                /* If the sink engine isn't able/allowed to write we don't care if everything got written ("how dirty is it!?") */  
     1243                if (!osync_objtype_sink_get_write(objtype_sink))  
     1244                        break; 
    12381245                 
    12391246                for (e = sinkengine->entries; e; e = e->next) { 
     
    15121519                g_free(engine); 
    15131520        } 
     1521} 
     1522 
     1523static int _osync_obj_engine_num_write_sinks(OSyncObjEngine *objengine) { 
     1524        osync_trace(TRACE_ENTRY, "%s(%p)", __func__, objengine); 
     1525 
     1526        int num = 0; 
     1527        GList *p = NULL; 
     1528        OSyncSinkEngine *sink; 
     1529 
     1530        for (p = objengine->sink_engines; p; p = p->next) { 
     1531                sink = p->data; 
     1532 
     1533 
     1534        } 
     1535 
     1536        osync_trace(TRACE_EXIT, "%s: %i", __func__, num); 
     1537        return num; 
    15141538} 
    15151539 
     
    16931717                        } 
    16941718 
     1719                        int write_sinks = _osync_obj_engine_num_write_sinks(engine); 
     1720 
     1721                        /* Get change entries since last sync. (get_changes) */ 
    16951722                        for (p = engine->sink_engines; p; p = p->next) { 
    16961723                                sinkengine = p->data; 
     1724 
     1725 
     1726                                OSyncMember *member = osync_client_proxy_get_member(sinkengine->proxy); 
     1727                                OSyncObjTypeSink *objtype_sink = osync_member_find_objtype_sink(member, engine->objtype); 
     1728 
     1729                                /* Is there at least one other writeable sink? */ 
     1730                                if (osync_objtype_sink_get_write(objtype_sink) && write_sinks) { 
     1731                                        _obj_engine_read_callback(sinkengine->proxy, sinkengine, *error); 
     1732                                        osync_trace(TRACE_INTERNAL, "no other writable sinks .... SKIP"); 
     1733                                        continue; 
     1734                                } 
     1735 
    16971736                                if (!osync_client_proxy_get_changes(sinkengine->proxy, _obj_engine_read_callback, sinkengine, engine->objtype, engine->slowsync, error)) 
    16981737                                        goto error; 
     
    17251764                                sinkengine = p->data; 
    17261765                                 
     1766                                OSyncMember *member = osync_client_proxy_get_member(sinkengine->proxy); 
     1767                                long long int memberid = osync_member_get_id(member); 
     1768 
     1769                                OSyncObjTypeSink *objtype_sink = osync_member_find_objtype_sink(member, engine->objtype); 
     1770 
    17271771                                for (e = sinkengine->entries; e; e = e->next) { 
    17281772                                        OSyncMappingEntryEngine *entry_engine = e->data; 
    17291773                                        osync_assert(entry_engine); 
    1730  
    1731                                         OSyncMember *member = osync_client_proxy_get_member(sinkengine->proxy); 
    1732                                         long long int memberid = osync_member_get_id(member); 
    1733                                          
    17341774 
    17351775                                        /* Merger - Save the entire xml and demerge */ 
     
    17681808                                        } 
    17691809 
    1770                                         if (osync_entry_engine_is_dirty(entry_engine)) { 
     1810 
     1811                                        /* Only commit change if the objtype sink is able/allowed to write. */ 
     1812                                        if (osync_objtype_sink_get_write(objtype_sink) && osync_entry_engine_is_dirty(entry_engine)) { 
    17711813                                                osync_assert(entry_engine->change); 
    17721814                                                OSyncChange *change = entry_engine->change;