void CheckExistanceOfDirectoriesAndFiles(void) { if(!DirectoryExists(getMediaDirectory())) { LogWarn(VB_SETTING, "FPP directory does not exist, creating it.\n"); if ( mkdir(getMediaDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create media directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getMusicDirectory())) { LogWarn(VB_SETTING, "Music directory does not exist, creating it.\n"); if ( mkdir(getMusicDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create music directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getSequenceDirectory())) { LogWarn(VB_SETTING, "Sequence directory does not exist, creating it.\n"); if ( mkdir(getSequenceDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create sequence directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getEventDirectory())) { LogWarn(VB_SETTING, "Event directory does not exist, creating it.\n"); if ( mkdir(getEventDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create event directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getVideoDirectory())) { LogWarn(VB_SETTING, "Video directory does not exist, creating it.\n"); if ( mkdir(getVideoDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create video directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getEffectDirectory())) { LogWarn(VB_SETTING, "Effect directory does not exist, creating it.\n"); if ( mkdir(getEffectDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create effect directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getScriptDirectory())) { LogWarn(VB_SETTING, "Script directory does not exist, creating it.\n"); if ( mkdir(getScriptDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create script directory.\n"); exit(EXIT_FAILURE); } } if(!DirectoryExists(getPlaylistDirectory())) { LogWarn(VB_SETTING, "Playlist directory does not exist, creating it.\n"); if ( mkdir(getPlaylistDirectory(), 0777) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create playlist directory.\n"); exit(EXIT_FAILURE); } } if(!FileExists(getUniverseFile())) { LogWarn(VB_SETTING, "Universe file does not exist, creating it.\n"); char *cmd, *file = getUniverseFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create universe file.\n"); exit(EXIT_FAILURE); } free(cmd); } if(!FileExists(getScheduleFile())) { LogWarn(VB_SETTING, "Schedule file does not exist, creating it.\n"); char *cmd, *file = getScheduleFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create schedule file.\n"); exit(EXIT_FAILURE); } free(cmd); } if(!FileExists(getBytesFile())) { LogWarn(VB_SETTING, "Bytes file does not exist, creating it.\n"); char *cmd, *file = getBytesFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create bytes file.\n"); exit(EXIT_FAILURE); } free(cmd); } if(!FileExists(getSettingsFile())) { LogWarn(VB_SETTING, "Settings file does not exist, creating it.\n"); char *cmd, *file = getSettingsFile(); cmd = (char *)malloc(strlen(file)+7); snprintf(cmd, strlen(file)+7, "touch %s", file); if ( system(cmd) != 0 ) { LogErr(VB_SETTING, "Error: Unable to create settings file.\n"); exit(EXIT_FAILURE); } free(cmd); } }
/* * Load an event file into a FPPevent */ FPPevent* LoadEvent(char *id) { FPPevent *event = NULL; FILE *file; char filename[1024]; if (snprintf(filename, 1024, "%s/%s.fevt", getEventDirectory(), id) >= 1024) { LogErr(VB_EVENT, "Unable to open Event file: %s, filename too long\n", filename); return NULL; } file = fopen(filename, "r"); if (!file) { LogErr(VB_EVENT, "Unable to open Event file %s\n", filename); return NULL; } event = (FPPevent*)malloc(sizeof(FPPevent)); if (!event) { LogErr(VB_EVENT, "Unable to allocate memory for new Event %s\n", filename); return NULL; } bzero(event, sizeof(FPPevent)); char *line = NULL; size_t len = 0; ssize_t read; while ((read = getline(&line, &len, file)) != -1) { if (( ! line ) || ( ! read ) || ( read == 1 )) continue; char *token = strtok(line, "="); if ( ! token ) continue; token = trimwhitespace(token); if (!strlen(token)) { free(token); continue; } char *key = token; token = trimwhitespace(strtok(NULL, "=")); if (token && strlen(token)) { if (!strcmp(key, "majorID")) { int id = atoi(token); if (id < 1) { FreeEvent(event); free(token); free(key); return NULL; } event->majorID = id; } else if (!strcmp(key, "minorID")) { int id = atoi(token); if (id < 1) { FreeEvent(event); free(token); free(key); return NULL; } event->minorID = id; } else if (!strcmp(key, "name")) { if (strlen(token)) { if (token[0] == '\'') { event->name = strdup(token + 1); if (event->name[strlen(event->name) - 1] == '\'') event->name[strlen(event->name) - 1] = '\0'; } else event->name = strdup(token); } } else if (!strcmp(key, "effect")) { if (strlen(token) && strcmp(token, "''")) { char *c = strstr(token, ".eseq"); if (c) { if ((c == (token + strlen(token) - 5)) || (c == (token + strlen(token) - 6))) *c = '\0'; if (token[0] == '\'') event->effect = strdup(token + 1); else event->effect = strdup(token); } } } else if (!strcmp(key, "startChannel")) { int ch = atoi(token); if (ch < 1) { FreeEvent(event); free(token); free(key); return NULL; } event->startChannel = ch; } else if (!strcmp(key, "script")) { if (strlen(token) && strcmp(token, "''")) { if (token[0] == '\'') { event->script = strdup(token + 1); if (event->script[strlen(event->script) - 1] == '\'') event->script[strlen(event->script) - 1] = '\0'; } else event->script = strdup(token); } } } if (token) free(token); free(key); } if (!event->effect && !event->script) { FreeEvent(event); return NULL; } LogDebug(VB_EVENT, "Event Loaded:\n"); if (event->name) LogDebug(VB_EVENT, "Event Name : %s\n", event->name); else LogDebug(VB_EVENT, "Event Name : ERROR, no name defined in event file\n"); LogDebug(VB_EVENT, "Event ID : %d/%d\n", event->majorID, event->minorID); if (event->script) LogDebug(VB_EVENT, "Event Script: %s\n", event->script); if (event->effect) { LogDebug(VB_EVENT, "Event Effect: %s\n", event->effect); LogDebug(VB_EVENT, "Event St.Ch.: %d\n", event->startChannel); } return event; }