-static vlm_schedule_t *vlm_ScheduleNew( vlm_t *vlm, char *psz_name )
-{
- vlm_schedule_t *sched = malloc( sizeof( vlm_schedule_t ) );
-
- sched->psz_name = strdup( psz_name );
- sched->b_enabled = VLC_FALSE;
- sched->i_command = 0;
- sched->command = NULL;
- sched->i_date = 0;
- sched->i_period = 0;
- sched->i_repeat = -1;
-
- TAB_APPEND( vlm->i_schedule, vlm->schedule, sched );
-
- return sched;
-}
-
-/* for now, simple delete. After, del with options (last arg) */
-static int vlm_ScheduleDelete( vlm_t *vlm, vlm_schedule_t *sched,
- char *psz_name )
-{
- int i;
-
- if( sched == NULL )
- {
- return 1;
- }
-
- TAB_REMOVE( vlm->i_schedule, vlm->schedule, sched );
-
- if( vlm->i_schedule == 0 && vlm->schedule ) free( vlm->schedule );
-
- free( sched->psz_name );
-
- for( i = 0; i < sched->i_command; i++ )
- {
- free( sched->command[i] );
- }
-
- free( sched );
-
- return 0;
-}
-
-static vlm_schedule_t *vlm_ScheduleSearch( vlm_t *vlm, char *psz_name )
-{
- int i;
-
- for( i = 0; i < vlm->i_schedule; i++ )
- {
- if( strcmp( psz_name, vlm->schedule[i]->psz_name ) == 0 )
- {
- return vlm->schedule[i];
- }
- }
-
- return NULL;
-}
-
-/* Ok, setup schedule command will be able to support only one (argument value) at a time */
-static int vlm_ScheduleSetup( vlm_schedule_t *schedule, char *psz_cmd,
- char *psz_value )
-{
- if( strcmp( psz_cmd, "enabled" ) == 0 )
- {
- schedule->b_enabled = VLC_TRUE;
- }
- else if( strcmp( psz_cmd, "disabled" ) == 0 )
- {
- schedule->b_enabled = VLC_FALSE;
- }
- else if( strcmp( psz_cmd, "date" ) == 0 )
- {
- struct tm time;
- char *p;
- time_t date;
-
- time.tm_sec = 0; /* seconds */
- time.tm_min = 0; /* minutes */
- time.tm_hour = 0; /* hours */
- time.tm_mday = 0; /* day of the month */
- time.tm_mon = 0; /* month */
- time.tm_year = 0; /* year */
- time.tm_wday = 0; /* day of the week */
- time.tm_yday = 0; /* day in the year */
- time.tm_isdst = 0; /* daylight saving time */
-
- /* date should be year/month/day-hour:minutes:seconds */
- p = strchr( psz_value, '-' );
-
- if( strcmp( psz_value, "now" ) == 0 )
- {
- schedule->i_date = 0;
- }
- else if( p == NULL && sscanf( psz_value, "%d:%d:%d", &time.tm_hour, &time.tm_min, &time.tm_sec ) != 3 ) /* it must be a hour:minutes:seconds */
- {
- return 1;
- }
- else
- {
- int i,j,k;
-
- switch( sscanf( p + 1, "%d:%d:%d", &i, &j, &k ) )
- {
- case 1:
- time.tm_sec = i;
- break;
- case 2:
- time.tm_min = i;
- time.tm_sec = j;
- break;
- case 3:
- time.tm_hour = i;
- time.tm_min = j;
- time.tm_sec = k;
- break;
- default:
- return 1;
- }
-
- *p = '\0';
-
- switch( sscanf( psz_value, "%d/%d/%d", &i, &j, &k ) )
- {
- case 1:
- time.tm_mday = i;
- break;
- case 2:
- time.tm_mon = i - 1;
- time.tm_mday = j;
- break;
- case 3:
- time.tm_year = i - 1900;
- time.tm_mon = j - 1;
- time.tm_mday = k;
- break;
- default:
- return 1;
- }
-
- date = mktime( &time );
- schedule->i_date = ((mtime_t) date) * 1000000;
- }
- }
- else if( strcmp( psz_cmd, "period" ) == 0 )
- {
- struct tm time;
- char *p;
- char *psz_time = NULL, *psz_date = NULL;
- time_t date;
- int i,j,k;
-
- /* First, if date or period are modified, repeat should be equal to -1 */
- schedule->i_repeat = -1;
-
- time.tm_sec = 0; /* seconds */
- time.tm_min = 0; /* minutes */
- time.tm_hour = 0; /* hours */
- time.tm_mday = 0; /* day of the month */
- time.tm_mon = 0; /* month */
- time.tm_year = 0; /* year */
- time.tm_wday = 0; /* day of the week */
- time.tm_yday = 0; /* day in the year */
- time.tm_isdst = 0; /* daylight saving time */
-
- /* date should be year/month/day-hour:minutes:seconds */
- p = strchr( psz_value, '-' );
- if( p )
- {
- psz_date = psz_value;
- psz_time = p + 1;
-
- *p = '\0';
- }
- else
- {
- psz_time = psz_value;
- }
-
-
- switch( sscanf( psz_time, "%d:%d:%d", &i, &j, &k ) )
- {
- case 1:
- time.tm_sec = i;
- break;
- case 2:
- time.tm_min = i;
- time.tm_sec = j;
- break;
- case 3:
- time.tm_hour = i;
- time.tm_min = j;
- time.tm_sec = k;
- break;
- default:
- return 1;
- }
- if( psz_date )
- {
- switch( sscanf( psz_date, "%d/%d/%d", &i, &j, &k ) )
- {
- case 1:
- time.tm_mday = i;
- break;
- case 2:
- time.tm_mon = i;
- time.tm_mday = j;
- break;
- case 3:
- time.tm_year = i;
- time.tm_mon = j;
- time.tm_mday = k;
- break;
- default:
- return 1;
- }
- }
-
- /* ok, that's stupid... who is going to schedule streams every 42 years ? */
- date = (((( time.tm_year * 12 + time.tm_mon ) * 30 + time.tm_mday ) * 24 + time.tm_hour ) * 60 + time.tm_min ) * 60 + time.tm_sec ;
- schedule->i_period = ((mtime_t) date) * 1000000;
- }
- else if( strcmp( psz_cmd, "repeat" ) == 0 )
- {
- int i;
-
- if( sscanf( psz_value, "%d", &i ) == 1 )
- {
- schedule->i_repeat = i;
- }
- else
- {
- return 1;
- }
- }
- else if( strcmp( psz_cmd, "append" ) == 0 )
- {
- char *command = strdup( psz_value );
-
- TAB_APPEND( schedule->i_command, schedule->command, command );
- }
- else
- {
- return 1;
- }
- return 0;
-}
-