static int sync_do_upload () { char **files; char **cursor; const char* directory = editor_sync_get_export_path(); int count; upload_context * context; char * full_path; int size; const char *header; files = roadmap_path_list (directory, ".wud"); count = 0; for (cursor = files; *cursor != NULL; ++cursor) { count++; } // cursor = files; count = 0; // context= malloc(sizeof(upload_context)); context->cursor = cursor; context->files = files; full_path = roadmap_path_join( directory, *cursor ); context->full_path = full_path; SyncProgressItems = count; SyncProgressCurrentItem = 1; SyncProgressLoaded = 0; SyncUploadNumMessages = 0; // this starts the async sending sequence. Further progress is done through the callbacks. size = roadmap_file_length (NULL, full_path); header = roadmap_http_async_get_upload_header(DEFAULT_CONTENT_TYPE, full_path, size, RealTime_GetUserName(), Realtime_GetPassword()); if (!roadmap_http_async_post_file(&gUploadCallbackFunctions, (void *)context, editor_upload_get_url(), header, full_path, size)) { roadmap_log( ROADMAP_ERROR, "File upload error, couldn't start sync socket connect. for file %s ", full_path); // roadmap_path_free(full_path); // roadmap_path_list_free (files); // free(context); return 0; } return 1; }
/* * Called once one file was sent successfully. Starts the sending of the next file, if there is one. */ static void upload_done( void *context, char *last_modified, const char *format, ... ) { upload_context * uContext = (upload_context *)context; char msg[MAX_SIZEOF_RESPONSE_MSG]; va_list ap; char ** new_cursor; char * new_full_path; if(format) { va_start(ap, format); vsnprintf(msg,sizeof(msg),format,ap); va_end(ap); roadmap_log(ROADMAP_DEBUG,"done uploading file : %s. Received response : %s",*uContext->cursor,msg); strncpy(SyncUploadMessages[SyncUploadNumMessages], msg, MAX_SIZEOF_RESPONSE_MSG); } SyncProgressCurrentItem ++ ; SyncProgressLoaded = 0; SyncUploadNumMessages ++; new_cursor = (uContext->cursor)+1; roadmap_file_remove(NULL, uContext->full_path); // remove the previous file if( (*new_cursor == NULL ) || ( SyncUploadNumMessages == MAX_MSGS ) ) { roadmap_path_list_free(uContext->files); roadmap_log(ROADMAP_DEBUG, "finished uploading editor_sync files"); } else { int size; const char *header; upload_context * new_context; new_full_path = roadmap_path_join( editor_sync_get_export_path(), *new_cursor ); new_context= malloc(sizeof(upload_context)); new_context->cursor = new_cursor; new_context->files = uContext->files; new_context->full_path = new_full_path; size = roadmap_file_length (NULL, new_full_path); header = roadmap_http_async_get_upload_header(DEFAULT_CONTENT_TYPE, new_full_path, size, RealTime_GetUserName(), Realtime_GetPassword()); if (!roadmap_http_async_post_file(&gUploadCallbackFunctions, (void *)new_context, editor_upload_get_url(), header, new_full_path, size)) { roadmap_log( ROADMAP_ERROR, "File upload error, couldn't start sync socket connect. for file %s ", new_full_path); roadmap_path_free(new_full_path); roadmap_path_list_free (new_context->files); free(new_context); } } roadmap_path_free(uContext->full_path); free(uContext); }
/////////////////////////////////////////////////////// // Compress files and prepare for upload int prepare_for_upload () { int res; char out_filename[256]; char **files; char **cursor; const char* directory; int count; int total; time_t now; struct tm *tms; char year[5], month[5], day[5]; #ifdef RIMAPI timeStruct time_s; #endif sprintf (warning_message,"%s",roadmap_lang_get("Preparing files for upload...")); ssd_progress_msg_dialog_show(warning_message); roadmap_main_flush(); //Count files for upload directory = roadmap_path_gps(); files = roadmap_path_list (directory, ".csv"); count = 1; //Counting also the postmortem for (cursor = files; *cursor != NULL; ++cursor) { count++; } total = count; count = 0; //Prepare log count++; sprintf (warning_message,"%s\n%d/%d",roadmap_lang_get("Preparing files for upload..."),count, total); ssd_progress_msg_dialog_show(warning_message); roadmap_main_flush(); // Building the filename time( &now ); tms = localtime( &now ); #ifdef RIMAPI roadmap_time_get_time(&time_s); tms->tm_hour = time_s.hours; tms->tm_min = time_s.minutes; #endif GET_2_DIGIT_STRING( tms->tm_mday, day ); GET_2_DIGIT_STRING( tms->tm_mon+1, month ); // Zero based from January GET_2_DIGIT_STRING( tms->tm_year-100, year ); // Year from 1900 snprintf(out_filename,256, "%s%s%s__%d_%d__%s_%d_%s__%s.gz", day, month, year, tms->tm_hour, tms->tm_min, RealTime_GetUserName(), RT_DEVICE_ID, roadmap_start_version(), roadmap_log_filename()); #ifndef RIMAPI res = roadmap_zlib_compress(roadmap_log_path(), roadmap_log_filename(), roadmap_path_debug(), out_filename, COMPRESSION_LEVEL,TRUE); #else // 0 = Z_OK = SUCCESS. 1 = failure. res = NOPH_ZLib_compress(roadmap_log_path(), roadmap_log_filename(), roadmap_path_debug(),out_filename,COMPRESSION_LEVEL); strcpy(zipped_log_name,out_filename); // emporary until path_list is implemented #endif if (res != Z_OK) { ssd_progress_msg_dialog_hide(); return 0; } //Prepare CSV files for (cursor = files; *cursor != NULL; ++cursor) { count++; sprintf (warning_message,"%s\n%d/%d",roadmap_lang_get("Preparing files for upload..."),count, total); ssd_progress_msg_dialog_show(warning_message); roadmap_main_flush(); sprintf(out_filename, "%s%s.gz", *cursor, RealTime_GetUserName()); #ifndef J2ME res = roadmap_zlib_compress(directory, *cursor, roadmap_path_debug(), out_filename, COMPRESSION_LEVEL,FALSE); #else // 0 = Z_OK = SUCCESS. 1 = failure. res = NOPH_ZLib_compress(directory, *cursor, roadmap_path_debug(),out_filename,COMPRESSION_LEVEL); #endif if (res != Z_OK) { ssd_progress_msg_dialog_hide(); return 0; } else { roadmap_file_remove(directory, *cursor); } } roadmap_path_list_free (files); ssd_progress_msg_dialog_hide(); return 1; }