From 47f22e3dfd002e22e7f359b49e2980fbc9efa467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Thu, 25 Sep 2008 16:41:14 +0000 Subject: [PATCH] Remove autorec.? - It's reimplemented in the dvr/ -subdir. --- autorec.c | 332 ----------------------------------------------------- autorec.h | 60 ---------- channels.c | 1 - 3 files changed, 393 deletions(-) delete mode 100644 autorec.c delete mode 100644 autorec.h diff --git a/autorec.c b/autorec.c deleted file mode 100644 index 43a8bbf7..00000000 --- a/autorec.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Automatic recording - * Copyright (C) 2008 Andreas Öman - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#define _GNU_SOURCE -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "tvhead.h" -#include "dispatch.h" -#include "autorec.h" -#include "pvr.h" -#include "epg.h" -#include "channels.h" - -struct autorec_queue autorecs; -static int ar_id_ceil; - -static void autorec_save_entry(autorec_t *ar); -static void autorec_load(void); - -void -autorec_init(void) -{ - TAILQ_INIT(&autorecs); - autorec_load(); -} - - -/** - * return 1 if the event 'e' is matched by the autorec rule 'ar' - */ -static int -autorec_cmp(autorec_t *ar, event_t *e) -{ - if(ar->ar_channel != NULL && - ar->ar_channel != e->e_channel) - return 0; - - if(ar->ar_ecg != NULL) { - if(e->e_content_type == NULL || - ar->ar_ecg != e->e_content_type->ect_group) - return 0; - } - - if(ar->ar_title != NULL && - regexec(&ar->ar_title_preg, e->e_title, 0, NULL, 0)) - return 0; - - return 1; -} - -/** - * - */ -static void -autorec_tag(autorec_t *ar, event_t *e) -{ - char creator[200]; - - snprintf(creator, sizeof(creator), "autorec: %s", ar->ar_name); - pvr_schedule_by_event(e, creator); -} - - -/** - * Check the current event and the next after that on all channels - */ -static void -autorec_check_new_ar(autorec_t *ar) -{ - event_t *e; - channel_t *ch; - - RB_FOREACH(ch, &channel_name_tree, ch_name_link) { - e = ch->ch_epg_cur_event; - if(e == NULL) - continue; - - if(autorec_cmp(ar, e)) - autorec_tag(ar, e); - - e = TAILQ_NEXT(e, e_channel_link); - if(e == NULL) - continue; - - if(autorec_cmp(ar, e)) - autorec_tag(ar, e); - } -} - - -/** - * For the given event, check if any of the autorec matches - * - * Assumes epg_lock() is held - */ -void -autorec_check_new_event(event_t *e) -{ - autorec_t *ar; - - TAILQ_FOREACH(ar, &autorecs, ar_link) { - if(autorec_cmp(ar, e)) - autorec_tag(ar, e); - } -} - - - - - -/** - * Create a new autorec rule, return -1 on failure, internal func - */ -static autorec_t * -autorec_create0(const char *name, int prio, const char *title, - epg_content_group_t *ecg, - channel_t *ch, int id, const char *creator) -{ - autorec_t *ar = calloc(1, sizeof(autorec_t)); - - if(title != NULL) { - ar->ar_title = strdup(title); - if(regcomp(&ar->ar_title_preg, title, - REG_ICASE | REG_EXTENDED | REG_NOSUB)) - return NULL; - } - - ar->ar_name = strdup(name); - ar->ar_rec_prio = prio; - ar->ar_ecg = ecg; - - ar->ar_channel = ch; - LIST_INSERT_HEAD(&ch->ch_autorecs, ar, ar_channel_link); - - ar->ar_creator = strdup(creator); - - ar->ar_id = id; - TAILQ_INSERT_TAIL(&autorecs, ar, ar_link); - autorec_check_new_ar(ar); - return ar; -} - -/** - * Destroy and remove the given autorec - */ -static void -autorec_destroy(autorec_t *ar) -{ - char buf[400]; - - snprintf(buf, sizeof(buf), "%s/autorec/%d", settings_dir, ar->ar_id); - unlink(buf); - - if(ar->ar_title != NULL) { - regfree(&ar->ar_title_preg); - free((void *)ar->ar_title); - } - free((void *)ar->ar_creator); - free((void *)ar->ar_name); - - LIST_REMOVE(ar, ar_channel_link); - - TAILQ_REMOVE(&autorecs, ar, ar_link); - free(ar); -} - - -/** - * Create a new autorec rule, return -1 on failure - */ -int -autorec_create(const char *name, int prio, const char *title, - epg_content_group_t *ecg, - channel_t *ch, const char *creator) -{ - autorec_t *ar; - - ar_id_ceil++; - ar = autorec_create0(name, prio, title, ecg, ch, ar_id_ceil, creator); - if(ar == NULL) - return -1; - - autorec_save_entry(ar); - return 0; -} - -/** - * Based on the given id, delete the autorec entry - */ -void -autorec_delete_by_id(int id) -{ - autorec_t *ar; - - TAILQ_FOREACH(ar, &autorecs, ar_link) - if(ar->ar_id == id) - break; - - if(ar == NULL) - return; - - autorec_destroy(ar); -} - - -/** - * Store an autorec entry on disk - */ -static void -autorec_save_entry(autorec_t *ar) -{ - char buf[400]; - FILE *fp; - - snprintf(buf, sizeof(buf), "%s/autorec/%d", settings_dir, ar->ar_id); - - if((fp = settings_open_for_write(buf)) == NULL) - return; - - fprintf(fp, "name = %s\n", ar->ar_name); - fprintf(fp, "rec_prio = %d\n", ar->ar_rec_prio); - fprintf(fp, "creator = %s\n", ar->ar_creator); - if(ar->ar_title != NULL) - fprintf(fp, "event_title = %s\n", ar->ar_title); - - if(ar->ar_ecg != NULL) - fprintf(fp, "event_content_group = %s\n", ar->ar_ecg->ecg_name); - - if(ar->ar_channel != NULL) - fprintf(fp, "channel = %s\n", ar->ar_channel->ch_name); - fclose(fp); -} - -/** - * Load all entries from disk - */ -static void -autorec_load(void) -{ - struct config_head cl; - char buf[400]; - struct dirent *d; - const char *name, *title, *contentgroup, *chgroup, *channel, *creator; - DIR *dir; - int prio, id; - - snprintf(buf, sizeof(buf), "%s/autorec", settings_dir); - - if((dir = opendir(buf)) == NULL) - return; - - while((d = readdir(dir)) != NULL) { - - if(d->d_name[0] == '.') - continue; - - snprintf(buf, sizeof(buf), "%s/autorec/%s", settings_dir, d->d_name); - - TAILQ_INIT(&cl); - config_read_file0(buf, &cl); - - /* Required */ - name = config_get_str_sub(&cl, "name", NULL); - creator = config_get_str_sub(&cl, "creator", NULL); - prio = atoi(config_get_str_sub(&cl, "rec_prio", "250")); - /* Optional */ - title = config_get_str_sub(&cl, "event_title", NULL); - contentgroup = config_get_str_sub(&cl, "event_content_group", NULL); - chgroup = config_get_str_sub(&cl, "channel_group", NULL); - channel = config_get_str_sub(&cl, "channel", NULL); - - if(name != NULL && prio > 0 && creator != NULL) { - id = atoi(d->d_name); - - autorec_create0(name, prio, title, - - contentgroup ? - epg_content_group_find_by_name(contentgroup) : NULL, - - channel ? channel_find_by_name(channel, 1) : NULL, - id, creator); - - if(id > ar_id_ceil) - ar_id_ceil = id; - - } - config_free0(&cl); - } - closedir(dir); -} - -/** - * - */ -void -autorec_destroy_by_channel(channel_t *ch) -{ - autorec_t *ar; - - while((ar = LIST_FIRST(&ch->ch_autorecs)) != NULL) - autorec_destroy(ar); -} - diff --git a/autorec.h b/autorec.h deleted file mode 100644 index 19f399e6..00000000 --- a/autorec.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Automatic recording - * Copyright (C) 2008 Andreas Öman - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef AUTOREC_H -#define AUTOREC_H - -#include - -TAILQ_HEAD(autorec_queue, autorec); - -extern struct autorec_queue autorecs; - -typedef struct autorec { - TAILQ_ENTRY(autorec) ar_link; - - int ar_id; - - const char *ar_creator; - const char *ar_name; - int ar_rec_prio; - - const char *ar_title; - regex_t ar_title_preg; - - epg_content_group_t *ar_ecg; - - channel_t *ar_channel; - LIST_ENTRY(autorec) ar_channel_link; - -} autorec_t; - - -void autorec_init(void); - -int autorec_create(const char *name, int prio, const char *title, - epg_content_group_t *ecg, - channel_t *ch, const char *creator); - -void autorec_check_new_event(event_t *e); - -void autorec_delete_by_id(int id); - -void autorec_destroy_by_channel(channel_t *ch); - -#endif /* AUTOREC_H */ diff --git a/channels.c b/channels.c index 84bfd01c..ea2b1c4b 100644 --- a/channels.c +++ b/channels.c @@ -36,7 +36,6 @@ #include "channels.h" #include "transports.h" #include "epg.h" -#include "autorec.h" #include "xmltv.h" #include "dtable.h" #include "notify.h"