Changeset 2410

Show
Ignore:
Timestamp:
08/05/07 22:19:56 (1 year ago)
Author:
dgollub
Message:

refactored anchor loading/storing... removed lot of duplicate code...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/irmc-sync/src/irmc_sync.c

    r2409 r2410  
    230230 
    231231/** 
    232  * Load the synchronization anchors
     232 * Load the general synchronization anchor
    233233 */ 
    234234void load_sync_anchors( irmc_environment *env ) 
     
    238238  irmc_config *config = &(env->config); 
    239239 
    240   char *anchor = osync_anchor_retrieve(env->anchor_path, "event"); 
    241   if (!anchor) { 
    242     config->calendar_changecounter = 0; 
    243     config->calendar_dbid = NULL; 
    244   } else { 
    245     char data[ 256 ]; 
    246     memset( data, 0, sizeof( data ) ); 
    247  
    248     sscanf( anchor, "%d:%256s", &config->calendar_changecounter, data ); 
    249     config->calendar_dbid = g_strdup( data ); 
    250   } 
    251   g_free( anchor ); 
    252  
    253   anchor = osync_anchor_retrieve(env->anchor_path, "contact"); 
    254   if (!anchor) { 
    255     config->addressbook_changecounter = 0; 
    256     config->addressbook_dbid = NULL; 
    257   } else { 
    258     char data[ 256 ]; 
    259     memset( data, 0, sizeof( data ) ); 
    260     sscanf( anchor, "%d:%256s", &config->addressbook_changecounter, data ); 
    261     config->addressbook_dbid = g_strdup( data ); 
    262   } 
    263   g_free( anchor ); 
    264  
    265   anchor = osync_anchor_retrieve(env->anchor_path, "note"); 
    266   if (!anchor) { 
    267     config->notebook_changecounter = 0; 
    268     config->notebook_dbid = NULL; 
    269   } else { 
    270     char data[ 256 ]; 
    271     memset( data, 0, sizeof( data ) ); 
    272  
    273     sscanf( anchor, "%d:%256s", &config->notebook_changecounter, data ); 
    274     config->notebook_dbid = g_strdup( data ); 
    275   } 
    276   g_free( anchor ); 
    277  
    278   anchor = osync_anchor_retrieve(env->anchor_path, "general"); 
     240  char *anchor = osync_anchor_retrieve(env->anchor_path, "general"); 
    279241  if (!anchor) { 
    280242    config->serial_number = NULL; 
     
    297259  osync_trace(TRACE_ENTRY, "%s(%p)", __func__, env); 
    298260 
    299   char anchor[ 1024 ]; 
    300261  const irmc_config *config = &(env->config); 
    301  
    302   /* TODO: check if sink is active  
    303   if (osync_member_objtype_enabled(member, "event")) { 
    304         if (config->calendar_changecounter >= 0 && strcmp(config->calendar_dbid, "FFFFFF")) { 
    305                 snprintf( anchor, sizeof( anchor ), "%d:%s", config->calendar_changecounter, config->calendar_dbid ); 
    306                 osync_anchor_update( env->anchor_path, "event", anchor ); 
    307         } else { 
    308                 osync_trace(TRACE_INTERNAL, "ERROR: Invalid values for event anchor detected."); 
    309         } 
    310   } else { 
    311         osync_trace(TRACE_INTERNAL, "WARNING: Synchronization of events was disabled."); 
    312   } 
    313   
    314   if (osync_member_objtype_enabled(member, "contact")) { 
    315         if (config->addressbook_changecounter >= 0 && strcmp(config->addressbook_dbid, "FFFFFF")) { 
    316                 snprintf( anchor, sizeof( anchor ), "%d:%s", config->addressbook_changecounter, config->addressbook_dbid ); 
    317                 osync_anchor_update( env->anchor_path, "contact", anchor ); 
    318         } else { 
    319                 osync_trace(TRACE_INTERNAL, "ERROR: Invalid values for contact anchor detected."); 
    320         } 
    321   } else { 
    322         osync_trace(TRACE_INTERNAL, "WARNING: Synchronization of contacts was disabled."); 
    323   } 
    324  
    325   if (osync_member_objtype_enabled(member, "note")) { 
    326         if (config->notebook_changecounter >= 0 && strcmp(config->notebook_dbid, "FFFFFF")) { 
    327                 snprintf( anchor, sizeof( anchor ), "%d:%s", config->notebook_changecounter, config->notebook_dbid ); 
    328                 osync_anchor_update( env->anchor_path, "note", anchor ); 
    329         } else { 
    330                 osync_trace(TRACE_INTERNAL, "ERROR: Invalid values for note anchor detected."); 
    331         } 
    332   } else { 
    333         osync_trace(TRACE_INTERNAL, "WARNING: Synchronization of notes was disabled."); 
    334   } 
    335   */ 
    336262    
    337   snprintf( anchor, sizeof( anchor ), "%s", config->serial_number ); 
    338   osync_anchor_update( env->anchor_path, "general", anchor ); 
     263  osync_anchor_update( env->anchor_path, "general", config->serial_number ); 
    339264  osync_trace(TRACE_EXIT, "%s", __func__); 
    340265} 
     
    937862{ 
    938863  osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx);                     
     864 
    939865  irmc_environment *env = (irmc_environment *)data; 
    940866  irmc_config *config = &(env->config); 
     867  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
     868  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
     869 
     870  const char *objtype = osync_objtype_sink_get_name(sink); 
     871 
     872  char *anchor = osync_anchor_retrieve(env->anchor_path, objtype); 
     873  if (!anchor) { 
     874    database->changecounter = 0; 
     875    database->dbid = NULL; 
     876  } else { 
     877    char data[ 256 ]; 
     878    memset( data, 0, sizeof( data ) ); 
     879 
     880    sscanf( anchor, "%d:%256s", &(database->changecounter), data ); 
     881    database->dbid = g_strdup( data ); 
     882  } 
     883  g_free( anchor ); 
    941884 
    942885  config->obexhandle = irmc_obex_client(config); 
     
    951894  } 
    952895 
    953   // load the synchronization anchors 
     896  // load the general synchronization anchors 
    954897  load_sync_anchors(env); 
    955898 
     
    1019962  irmc_disconnect(&(env->config)); 
    1020963 
     964  save_sync_anchors(env); 
     965 
    1021966  osync_context_report_success(ctx); 
    1022967 
     
    1030975{ 
    1031976  osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, data, info, ctx);                         
     977 
     978  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
     979 
    1032980  irmc_environment *env = (irmc_environment *)data; 
    1033  
    1034   // save synchronization anchors 
    1035   save_sync_anchors( env ); 
     981  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
     982 
     983  const char *objtype = osync_objtype_sink_get_name(sink); 
     984 
     985  if (database->changecounter >= 0 && strcmp(database->dbid, "FFFFFF")) { 
     986    char *anchor = g_strdup_printf("%d:%s", database->changecounter, database->dbid); 
     987    osync_anchor_update( env->anchor_path, objtype, anchor ); 
     988    g_free(anchor); 
     989  } else { 
     990    osync_trace(TRACE_INTERNAL, "ERROR: Invalid values for event anchor detected."); 
     991  } 
    1036992 
    1037993  osync_context_report_success(ctx); 
     
    10511007  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    10521008  irmc_environment *env = (irmc_environment *)data; 
    1053   irmc_config *config = &(env->config); 
     1009  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
    10541010 
    10551011  data_type_information datainfo; 
     
    10601016  strcpy(datainfo.path_identifier, "cal"); 
    10611017  strcpy(datainfo.path_extension, "vcs"); 
    1062   datainfo.change_counter = &(config->calendar_changecounter); 
     1018  datainfo.change_counter = &(database->changecounter); 
     1019 
    10631020 
    10641021  if (!get_generic_changeinfo(env, sink, ctx, &datainfo, &error)) 
     
    10861043  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    10871044  irmc_environment *env = (irmc_environment *)data; 
    1088   irmc_config *config = &(env->config); 
     1045  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
    10891046 
    10901047  data_type_information datainfo; 
     
    10951052  strcpy(datainfo.path_identifier, "pb"); 
    10961053  strcpy(datainfo.path_extension, "vcf"); 
    1097   datainfo.change_counter = &(config->addressbook_changecounter); 
     1054  datainfo.change_counter = &(database->changecounter); 
    10981055 
    10991056  if (!get_generic_changeinfo(env, sink, ctx, &datainfo, &error)) 
     
    11211078  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    11221079  irmc_environment *env = (irmc_environment *)data; 
    1123   irmc_config *config = &(env->config); 
     1080  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
    11241081 
    11251082  data_type_information datainfo; 
     
    11301087  strcpy(datainfo.path_identifier, "nt"); 
    11311088  strcpy(datainfo.path_extension, "vnt"); 
    1132   datainfo.change_counter = &(config->notebook_changecounter); 
     1089  datainfo.change_counter = &(database->changecounter); 
    11331090 
    11341091  if (!get_generic_changeinfo(env, sink, ctx, &datainfo, &error)) 
     
    12911248  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    12921249  irmc_environment *env = (irmc_environment *)data; 
    1293   irmc_config *config = &(env->config); 
     1250  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
    12941251 
    12951252  memset(&datainfo, 0, sizeof(datainfo)); 
     
    12981255  strcpy(datainfo.path_identifier, "cal"); 
    12991256  strcpy(datainfo.path_extension, "vcs"); 
    1300   datainfo.change_counter = &(config->calendar_changecounter); 
     1257  datainfo.change_counter = &(database->changecounter); 
    13011258 
    13021259  irmcGenericCommitChange(env, sink, ctx, &datainfo, change); 
     
    13141271  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    13151272  irmc_environment *env = (irmc_environment *)data; 
    1316   irmc_config *config = &(env->config); 
     1273  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
    13171274 
    13181275  memset(&datainfo, 0, sizeof(datainfo)); 
     
    13211278  strcpy(datainfo.path_identifier, "pb"); 
    13221279  strcpy(datainfo.path_extension, "vcf"); 
    1323   datainfo.change_counter = &(config->addressbook_changecounter); 
     1280  datainfo.change_counter = &(database->changecounter); 
    13241281 
    13251282  irmcGenericCommitChange(env, sink, ctx, &datainfo, change); 
     
    13371294  OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); 
    13381295  irmc_environment *env = (irmc_environment *)data; 
    1339   irmc_config *config = &(env->config); 
     1296  irmc_database *database = osync_objtype_sink_get_userdata(sink); 
    13401297 
    13411298  memset(&datainfo, 0, sizeof(datainfo)); 
     
    13441301  strcpy(datainfo.path_identifier, "nt"); 
    13451302  strcpy(datainfo.path_extension, "vnt"); 
    1346   datainfo.change_counter = &(config->notebook_changecounter); 
     1303  datainfo.change_counter = &(database->changecounter); 
    13471304 
    13481305  irmcGenericCommitChange(env, sink, ctx, &datainfo, change); 
     
    13581315 
    13591316  irmc_environment *env = (irmc_environment *)data; 
     1317 
    13601318  g_free(env->anchor_path); 
    13611319 
  • plugins/irmc-sync/src/irmc_sync.h

    r2409 r2410  
    3434typedef struct  { 
    3535  char *serial_number; 
    36   unsigned int calendar_changecounter; 
    37   char *calendar_dbid; 
    38   unsigned int addressbook_changecounter; 
    39   char *addressbook_dbid; 
    40   unsigned int notebook_changecounter; 
    41   char *notebook_dbid; 
    4236 
    4337  obex_t obexhandle;             // Handle to the obex connection 
     
    7266typedef struct irmc_database { 
    7367  OSyncObjFormat *objformat;     // The configured objformat for this database 
     68  unsigned int changecounter;    
     69  char *dbid; 
    7470} irmc_database; 
    7571