00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <string.h>
00034
00035 #include "splt.h"
00036
00037 static void splt_c_put_message_to_client(splt_state *state, const char *message,
00038 splt_message_type mess_type);
00039 static int splt_c_append_to_m3u_file(splt_state *state, const char *filename);
00040 static void splt_c_set_filename_shorted_from_current_point_name(splt_state *state);
00041
00042 int splt_c_put_split_file(splt_state *state, const char *filename)
00043 {
00044 int error = SPLT_OK;
00045
00046 if (state->split.file_split != NULL)
00047 {
00048 state->split.file_split(filename, state->split.p_bar->user_data);
00049 error = splt_c_append_to_m3u_file(state, filename);
00050 }
00051 else
00052 {
00053
00054 }
00055
00056 return error;
00057 }
00058
00059 void splt_c_put_progress_text(splt_state *state, int type)
00060 {
00061 splt_progress *p_bar = state->split.p_bar;
00062 if (p_bar->progress == NULL) { return; }
00063
00064 splt_c_set_filename_shorted_from_current_point_name(state);
00065
00066 p_bar->current_split = splt_t_get_current_split_file_number(state);
00067 p_bar->max_splits = state->split.splitnumber - 1;
00068 p_bar->progress_type = type;
00069 }
00070
00071 void splt_c_put_info_message_to_client(splt_state *state, const char *message, ...)
00072 {
00073 va_list ap;
00074 char *mess = NULL;
00075
00076 va_start(ap, message);
00077 mess = splt_su_format_messagev(state, message, ap);
00078 va_end(ap);
00079
00080 if (mess)
00081 {
00082 splt_c_put_message_to_client(state, mess, SPLT_MESSAGE_INFO);
00083
00084 free(mess);
00085 mess = NULL;
00086 }
00087 }
00088
00089 void splt_c_put_debug_message_to_client(splt_state *state, const char *message, ...)
00090 {
00091 va_list ap;
00092 char *mess = NULL;
00093
00094 va_start(ap, message);
00095 mess = splt_su_format_messagev(state, message, ap);
00096 va_end(ap);
00097
00098 if (mess)
00099 {
00100 splt_c_put_message_to_client(state, mess, SPLT_MESSAGE_DEBUG);
00101
00102 free(mess);
00103 mess = NULL;
00104 }
00105 }
00106
00107 void splt_c_update_progress(splt_state *state, double current_point,
00108 double total_points, int progress_stage,
00109 float progress_start, int refresh_rate)
00110 {
00111 splt_progress *p_bar = state->split.p_bar;
00112 if (p_bar->progress == NULL) { return; }
00113
00114 if (splt_o_get_iopt(state, SPLT_INTERNAL_PROGRESS_RATE) > refresh_rate)
00115 {
00116 p_bar->percent_progress = (float) (current_point / total_points);
00117
00118 p_bar->percent_progress = p_bar->percent_progress / progress_stage + progress_start;
00119
00120 if (p_bar->percent_progress < 0)
00121 {
00122 p_bar->percent_progress = 0;
00123 }
00124 if (p_bar->percent_progress > 1)
00125 {
00126 p_bar->percent_progress = 1;
00127 }
00128
00129 p_bar->progress(p_bar);
00130 splt_o_set_iopt(state, SPLT_INTERNAL_PROGRESS_RATE, 0);
00131 }
00132 else
00133 {
00134 splt_o_set_iopt(state, SPLT_INTERNAL_PROGRESS_RATE,
00135 splt_o_get_iopt(state, SPLT_INTERNAL_PROGRESS_RATE) + 1);
00136 }
00137 }
00138
00139 static void splt_c_put_message_to_client(splt_state *state, const char *message,
00140 splt_message_type mess_type)
00141 {
00142 if (!splt_o_messages_locked(state))
00143 {
00144 if (state->split.put_message != NULL)
00145 {
00146 state->split.put_message(message, mess_type);
00147 }
00148 else
00149 {
00150
00151 }
00152 }
00153 }
00154
00155 static int splt_c_append_to_m3u_file(splt_state *state, const char *filename)
00156 {
00157 int err = SPLT_OK;
00158
00159 if (splt_o_get_int_option(state, SPLT_OPT_PRETEND_TO_SPLIT))
00160 {
00161 return err;
00162 }
00163
00164 char *new_m3u_file = splt_t_get_m3u_file_with_path(state, &err);
00165 if (err < 0 || !new_m3u_file) { return err; }
00166
00167 FILE *file_input = NULL;
00168 if ((file_input = splt_io_fopen(new_m3u_file, "a+")) != NULL)
00169 {
00170 fprintf(file_input, "%s\n", splt_su_get_fname_without_path(filename));
00171
00172 if (fclose(file_input) != 0)
00173 {
00174 splt_e_set_strerror_msg_with_data(state, new_m3u_file);
00175 err = SPLT_ERROR_CANNOT_CLOSE_FILE;
00176 }
00177 }
00178 else
00179 {
00180 splt_e_set_strerror_msg_with_data(state, new_m3u_file);
00181 err = SPLT_ERROR_CANNOT_OPEN_FILE;
00182 }
00183
00184 free(new_m3u_file);
00185 new_m3u_file = NULL;
00186
00187 return err;
00188 }
00189
00190 static void splt_c_set_filename_shorted_from_current_point_name(splt_state *state)
00191 {
00192 int err = SPLT_OK;
00193 splt_progress *p_bar = state->split.p_bar;
00194
00195 char filename_shorted[512] = { '\0' };
00196
00197 int curr_split = splt_t_get_current_split(state);
00198 const char *point_name = splt_sp_get_splitpoint_name(state, curr_split, &err);
00199 if (point_name != NULL)
00200 {
00201 const char *extension = splt_p_get_extension(state, &err);
00202 if (err >= 0)
00203 {
00204 size_t max_size = p_bar->progress_text_max_char;
00205 if (max_size >= 512) { max_size = 511; }
00206
00207 snprintf(filename_shorted, max_size, "%s%s", point_name, extension);
00208
00209 if (strlen(point_name) > max_size)
00210 {
00211 size_t size = strlen(filename_shorted);
00212 filename_shorted[size-1] = '.';
00213 filename_shorted[size-2] = '.';
00214 filename_shorted[size-3] = '.';
00215 }
00216 }
00217 }
00218
00219 snprintf(p_bar->filename_shorted, 512, "%s", filename_shorted);
00220 }
00221