Exemple #1
0
static void handle_update(char* data) {
  destroy_lines();

  data_processor_init(data, '|');
  num_lines = data_processor_get_int();
  lines = malloc(sizeof(TubeLine*) * num_lines);
  for (uint8_t l = 0; l < num_lines; l += 1) {
    TubeLine* line = malloc(sizeof(TubeLine));
    line->name = data_processor_get_string();
    line->status = data_processor_get_string();
    lines[l] = line;
  }
  update_handler();
}
// Several strings separated by delimiter should be extractable.
static char* test_global_multiple_strings(void) {
  data_processor_init("Hello|Hi|Hey||", '|');
  ProcessingState* state = data_processor_get_global();
  const char* str1 = data_processor_get_string(state);
  const char* str2 = data_processor_get_string(state);
  const char* str3 = data_processor_get_string(state);
  const char* str4 = data_processor_get_string(state);
  const char* str5 = data_processor_get_string(state);
  bool pass = strcmp(str1, "Hello") == 0;
  pass = pass && strcmp(str2, "Hi") == 0;
  pass = pass && strcmp(str3, "Hey") == 0;
  pass = pass && strcmp(str4, "") == 0;
  pass = pass && strcmp(str5, "") == 0;
  mu_assert(pass, "Multiple strings not extracted from global state");
  return 0;
}
// A single string should be extractable.
static char* test_global_single_string(void) {
  data_processor_init("Hello", '|');
  ProcessingState* state = data_processor_get_global();
  const char* str = data_processor_get_string(state);
  mu_assert(strcmp(str, "Hello") == 0, "Single string not extracted from global state");
  return 0;
}
Exemple #4
0
static void inbox_received_callback(DictionaryIterator *iterator, void *context) {
  Tuple *t = dict_read_first(iterator);
  
  while(t != NULL) {
    switch (t->key) {
      case NUM_MENU_ITEMS:
        s_num_menu_items = t->value->uint16;
        break;
      case POSTS:
      {
        ProcessingState *state = data_processor_create(t->value->cstring, '|');
        uint8_t num_strings = data_processor_count(state);
        s_strings = malloc(sizeof(char*) * num_strings);
        for (uint8_t n = 0; n < num_strings; n += 1) {
          s_strings[n] = data_processor_get_string(state);
        }
        data_processor_destroy(state);
        break;
      }
      case COMMENTS:
        break;
    }
    // Get next pair, if any
    t = dict_read_next(iterator);
  }
  
  layer_mark_dirty(menu_layer_get_layer(s_menu_layer));
}
Exemple #5
0
static void handle_details(char* data) {
  free_safe(details);
  data_processor_init(data, '|');
  details = data_processor_get_string();
  if (details_handler) {
    details_handler(details);
  }
}
Exemple #6
0
/**
 * Function to process the data of a preset update.
 * @param data "DATA" response of the given message, formatted either
 * as "stop_id|stop_name|route_id|route_name", or as "END" to signify the end
 * of the preset messages.
 */
static void process_preset_data(char* data){
	if (strcmp(data, "END") != 0){
		data_processor_init(data, '|');
		Preset *preset = malloc(sizeof(Preset));
		strcpy(preset->stop_id, data_processor_get_string());
		strcpy(preset->stop_name, data_processor_get_string());
		strcpy(preset->route_id, data_processor_get_string());
		strcpy(preset->route_name, data_processor_get_string());
		preset->eta = -5;
		presets_add(preset);
	}
	else{
		send_all_eta_req();
		refresh();
		reset_selected_index();
		update_time_text();
	}
}
// Mixed values should be extractable from a single local state.
static char* test_single_local_mixed(void) {
  ProcessingState* state = data_processor_create("8|This is a string!|0|6765444", '|');
  int num1 = data_processor_get_int(state);
  char* string1 = data_processor_get_string(state);
  bool boolean1 = data_processor_get_bool(state);
  int num2 = data_processor_get_int(state);
  mu_assert(8 == num1 && 0 == strcmp("This is a string!", string1) && false == boolean1 && 6765444 == num2, "Mixed values not extracted from global state");
  return 0;
}
int data_processor_get_int(ProcessingState* state) {
  if (NULL == state) {
    return -1;
  }
  char* tmp_str = data_processor_get_string(state);
  int num = atoi(tmp_str);
  free(tmp_str);
  return num;
}
Exemple #9
0
/**
 * Function to process the data of an ETA update message.
 * @param data the "DATA" response of the given method, which is formatted as "stop_id|route_id|eta"
 */
static void process_eta_data(char* data){
	data_processor_init(data, '|');
	char* stop_id = data_processor_get_string();
	char* route_id = data_processor_get_string();
	char* eta_string = data_processor_get_string();
	int eta = PRESET_NO_ETA;
	if (strcmp(eta_string, "NO ETA") != 0){
		eta = atoi(eta_string);
	}
	for (int i = 0; i < presets_get_count(); i++){
		Preset *preset = presets_get(i);
		if (strcmp(preset->stop_id, stop_id) == 0 && strcmp(preset->route_id, route_id) == 0){
			preset->eta = eta;
			break;
		}
	}
	free(stop_id);
	free(route_id);
	refresh();
	update_time_text();
}
int data_processor_get_int(void) {
  char* tmp_str = data_processor_get_string();
  int num = atoi(tmp_str);
  free(tmp_str);
  return num;
}