gn_error deleteringtone(int argc, char *argv[], gn_data *data, struct gn_statemachine *state) { gn_ringtone ringtone; gn_error error; int i, start, end; memset(&ringtone, 0, sizeof(ringtone)); gn_data_clear(data); data->ringtone = &ringtone; start = gnokii_atoi(optarg); if (errno || start < 0) return deleteringtone_usage(stderr, -1); end = parse_end_value_option(argc, argv, optind, start); if (errno || end < 0) return deleteringtone_usage(stderr, -1); for (i = start; i <= end; i++) { ringtone.location = i; if ((error = gn_sm_functions(GN_OP_DeleteRingtone, data, state)) == GN_ERR_NONE) fprintf(stderr, _("Ringtone %d deleted\n"), i); else fprintf(stderr, _("Failed to delete ringtone %d: %s\n"), i, gn_error_print(error)); } return GN_ERR_NONE; }
/* Delete MMS messages. */ gn_error deletemms(int argc, char *argv[], gn_data *data, struct gn_statemachine *state) { gn_mms message; char *memory_type_string; int start_message, end_message, count; gn_error error = GN_ERR_NONE; /* Handle command line args that set type, start and end locations. */ memory_type_string = optarg; message.memory_type = gn_str2memory_type(memory_type_string); if (message.memory_type == GN_MT_XX) { fprintf(stderr, _("Unknown memory type %s (use ME, SM, IN, OU, ...)!\n"), optarg); fprintf(stderr, _("Run gnokii --showsmsfolderstatus for a list of supported memory types.\n")); return GN_ERR_INVALIDMEMORYTYPE; } start_message = gnokii_atoi(argv[optind]); if (errno || start_message < 0) return deletemms_usage(stderr, -1); end_message = parse_end_value_option(argc, argv, optind + 1, start_message); if (errno || end_message < 0) return deletemms_usage(stderr, -1); /* Now delete the requested entries. */ for (count = start_message; count <= end_message; count++) { message.number = count; data->mms = &message; error = gn_mms_delete(data, state); if (error == GN_ERR_NONE) fprintf(stderr, _("Deleted MMS (location %d from memory %s)\n"), count, memory_type_string); else { if ((error == GN_ERR_INVALIDLOCATION) && (end_message == INT_MAX) && (count > start_message)) return GN_ERR_NONE; fprintf(stderr, _("Deleting MMS failed (location %d from memory %s)! (%s)\n"), count, memory_type_string, gn_error_print(error)); } } /* FIXME: We return the value of the last read. * What should we return? */ return error; }
/* ToDo notes receiving. */ gn_error gettodo(int argc, char *argv[], gn_data *data, struct gn_statemachine *state) { gn_todo_list todolist; gn_todo todo; gn_error error = GN_ERR_NONE; bool vcal = false; int i, first_location, last_location; struct option options[] = { { "vCal", optional_argument, NULL, 'v'}, { NULL, 0, NULL, 0} }; first_location = gnokii_atoi(optarg); if (errno || first_location < 0) return gettodo_usage(stderr, -1); last_location = parse_end_value_option(argc, argv, optind, first_location); if (errno || last_location < 0) return gettodo_usage(stderr, -1); while ((i = getopt_long(argc, argv, "v", options, NULL)) != -1) { switch (i) { case 'v': vcal = true; break; default: return gettodo_usage(stderr, -1); } } for (i = first_location; i <= last_location; i++) { todo.location = i; gn_data_clear(data); data->todo = &todo; data->todo_list = &todolist; error = gn_sm_functions(GN_OP_GetToDo, data, state); switch (error) { case GN_ERR_NONE: if (vcal) { gn_todo2ical(stdout, &todo); } else { fprintf(stdout, _("%s: %s\n"), _("Todo"), todo.text); fprintf(stdout, _("%s: %s\n"), _("Priority"), gn_todo_priority2str(todo.priority)); } break; default: /* stop processing if the last note was specified as "end" */ if (last_location == INT_MAX) { /* it's not an error if we read at least a note and the rest is empty */ if ((i > first_location) && ((error == GN_ERR_EMPTYLOCATION) || (error == GN_ERR_INVALIDLOCATION))) { error = GN_ERR_NONE; } last_location = 0; } if (error != GN_ERR_NONE) { fprintf(stderr, _("The ToDo note could not be read: %s\n"), gn_error_print(error)); } } } return error; }
/* ToDo notes writing */ gn_error writetodo(int argc, char *argv[], gn_data *data, struct gn_statemachine *state) { gn_todo todo; gn_error error = GN_ERR_NONE; int first_location, last_location, i; FILE *f; f = fopen(optarg, "r"); if (f == NULL) { fprintf(stderr, _("Can't open file %s for reading!\n"), optarg); return GN_ERR_FAILED; } first_location = gnokii_atoi(argv[optind]); if (errno || first_location < 0) { fclose(f); return writetodo_usage(stderr, -1); } last_location = parse_end_value_option(argc, argv, optind + 1, first_location); if (errno || last_location < 0) { fclose(f); return writetodo_usage(stderr, -1); } for (i = first_location; i <= last_location; i++) { memset(&todo, 0, sizeof(todo)); gn_data_clear(data); data->todo = &todo; /* TODO: gn_ical2todo expects the pointer to begin file to * iterate. Fix it to not rewind the file each time */ rewind(f); error = gn_ical2todo(f, &todo, i); #ifndef WIN32 if (error == GN_ERR_NOTIMPLEMENTED) { switch (gn_vcal_file_todo_read(optarg, &todo, i)) { case 0: error = GN_ERR_NONE; break; default: error = GN_ERR_FAILED; break; } } #endif if (error != GN_ERR_NONE) { /* when reading until 'end' it's not an error if it tried to read a non existant note */ if ((last_location == INT_MAX) && (error == GN_ERR_EMPTYLOCATION)) { error = GN_ERR_NONE; } else { fprintf(stderr, _("Failed to load vCalendar file: %s\n"), gn_error_print(error)); } fclose(f); return error; } error = gn_sm_functions(GN_OP_WriteToDo, data, state); if (error == GN_ERR_NONE) { fprintf(stderr, _("Successfully written!\n")); fprintf(stderr, _("Priority %d. %s\n"), data->todo->priority, data->todo->text); } else fprintf(stderr, _("Failed to write ToDo note: %s\n"), gn_error_print(error)); } fclose(f); return error; }
/* Get MMS messages. */ gn_error getmms(int argc, char *argv[], gn_data *data, struct gn_statemachine *state) { int i, del = 0; gn_sms_folder folder; gn_sms_folder_list folderlist; gn_mms *message; char *memory_type_string; int start_message, end_message, count; gnokii_app_mode mode = GNOKII_APP_MODE_Ask; char filename[64]; gn_error error = GN_ERR_NONE; gn_mms_format output_format_type = GN_MMS_FORMAT_TEXT; struct option options[] = { { "mime", required_argument, NULL, GN_MMS_FORMAT_MIME}, { "pdu", required_argument, NULL, GN_MMS_FORMAT_PDU}, { "raw", required_argument, NULL, GN_MMS_FORMAT_RAW}, { "delete", no_argument, NULL, 'd' }, { "overwrite", no_argument, NULL, 'o' }, { NULL, 0, NULL, 0 } }; /* Handle command line args that set type, start and end locations. */ memory_type_string = optarg; if (gn_str2memory_type(memory_type_string) == GN_MT_XX) { fprintf(stderr, _("Unknown memory type %s (use ME, SM, IN, OU, ...)!\n"), optarg); fprintf(stderr, _("Run gnokii --showsmsfolderstatus for a list of supported memory types.\n")); return GN_ERR_INVALIDMEMORYTYPE; } start_message = gnokii_atoi(argv[optind]); if (errno || start_message < 0) return getmms_usage(stderr, -1); end_message = parse_end_value_option(argc, argv, optind + 1, start_message); if (errno || end_message < 0) return getmms_usage(stderr, -1); *filename = '\0'; /* parse all options (beginning with '-') */ while ((i = getopt_long(argc, argv, "1:2:3:do", options, NULL)) != -1) { switch (i) { case 'd': del = 1; break; /* force mode -- don't ask to overwrite */ case 'o': mode = GNOKII_APP_MODE_Overwrite; break; case GN_MMS_FORMAT_MIME: /* FALL THROUGH */ case GN_MMS_FORMAT_PDU: /* FALL THROUGH */ case GN_MMS_FORMAT_RAW: /* output formats are mutually exclusive */ if (output_format_type != GN_MMS_FORMAT_TEXT) { return getmms_usage(stderr, -1); } output_format_type = i; if (!optarg) { return getsms_usage(stderr, -1); } snprintf(filename, sizeof(filename), "%s", optarg); fprintf(stderr, _("Saving into %s\n"), filename); break; default: return getmms_usage(stderr, -1); } } if (argc - optind > 3) { /* There are too many arguments that don't start with '-' */ return getmms_usage(stderr, -1); } folder.folder_id = 0; data->sms_folder = &folder; data->sms_folder_list = &folderlist; /* Now retrieve the requested entries. */ for (count = start_message; count <= end_message; count++) { error = gn_mms_alloc(&message); if (error != GN_ERR_NONE) break; message->memory_type = gn_str2memory_type(memory_type_string); message->number = count; message->buffer_format = output_format_type; data->mms = message; error = gn_mms_get(data, state); switch (error) { case GN_ERR_NONE: if (*filename) { /* writebuffer() will set mode to "append" */ mode = writebuffer(filename, data->mms->buffer, data->mms->buffer_length, mode); } else { error = fprint_mms(stdout, message); fprintf(stdout, "\n"); } if (del && mode != GNOKII_APP_MODE_Cancel) { if (GN_ERR_NONE != gn_mms_delete(data, state)) fprintf(stderr, _("(delete failed)\n")); else fprintf(stderr, _("(message deleted)\n")); } break; default: if ((error == GN_ERR_INVALIDLOCATION) && (end_message == INT_MAX) && (count > start_message)) { error = GN_ERR_NONE; /* Force exit */ mode = GNOKII_APP_MODE_Cancel; break; } fprintf(stderr, _("Getting MMS failed (location %d from memory %s)! (%s)\n"), count, memory_type_string, gn_error_print(error)); if (error == GN_ERR_INVALIDMEMORYTYPE) { fprintf(stderr, _("Unknown memory type %s (use ME, SM, IN, OU, ...)!\n"), optarg); fprintf(stderr, _("Run gnokii --showsmsfolderstatus for a list of supported memory types.\n")); } if (error == GN_ERR_EMPTYLOCATION) error = GN_ERR_NONE; break; } gn_mms_free(message); if (mode == GNOKII_APP_MODE_Cancel) break; } return error; }