summaryrefslogtreecommitdiff
path: root/vdrriprecordings.c
blob: fb626fbdb1362e5759345a8000ea2abebd418d8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//
// vdrriprecordings.c
//

#include <stdio.h>
#include <stdlib.h>
#include <vdr/videodir.h>
#include <vdr/tools.h>

#include "vdrriprecordings.h"
#include "a-tools.h"

#define FINDRECCMD "find %s -follow -type d -regex '.*rec$'"

// --- cVdrripRecordings -----------------------

cVdrripRecordings::cVdrripRecordings() {
  Name = Date = Path = NULL;
  NumRec = 0;
  ReadRec();
}

cVdrripRecordings::~cVdrripRecordings() {
  FREE(Name);
  FREE(Date);
  FREE(Path);
}

void cVdrripRecordings::ReadRec() {
  char *cmd = NULL, *buf = NULL;
  size_t i = 0;
#if APIVERSNUM > 20101
  int colv = strnumcol(cVideoDirectory::Name(), "/");

  asprintf(&cmd, FINDRECCMD, cVideoDirectory::Name());
#else
  int colv = strnumcol(VideoDirectory, "/");

  asprintf(&cmd, FINDRECCMD, VideoDirectory);
#endif
  FILE *p = popen(cmd, "r");
  if (p) {
    while (getline(&buf, &i, p) != -1) {
     int colg;

     // search the c from *.rec and terminate the string
     int l = strlen(buf);
     while (buf[l] != 'c') {l--;}
     buf[l+1] = '\0';

     // allocate memory for Name, Date & Path - arrays
     Name = (char **)realloc(Name, ((NumRec + 1) * sizeof(char *)));
     Date = (char **)realloc(Date, ((NumRec + 1) * sizeof(char *)));
     Path = (char **)realloc(Path, ((NumRec + 1) * sizeof(char *)));

     colg = strnumcol(buf, "/");
     if ( colg - colv >= 3) {
       // this is recording with a subdir
       asprintf(&Name[NumRec], "%s_-_%s", strcol(buf, "/", colg - 2), strcol(buf, "/", colg - 1));
     } else {
       Name[NumRec] = strcol(buf, "/", colg - 1);
     }

     Date[NumRec] = strcol(strcol(buf, "/", colg), ".", 1);
     Path[NumRec] = strdup(buf);
     FREE(buf);

     NumRec++;
    } 
  } else {
    dsyslog("[vdrrip] could not open pipe to %s !", cmd);
  }
  pclose(p);
  FREE(cmd);
}

int cVdrripRecordings::getNumRec() {return NumRec;}

char *cVdrripRecordings::getName(int i) {
  if (i >= 0 && i < NumRec) {return Name[i];
  } else {return NULL;}
}

char *cVdrripRecordings::getDate(int i) {
  if (i >= 0 && i < NumRec) {return Date[i];
  } else {return NULL;}
}

char *cVdrripRecordings::getPath(int i) {
  if (i >= 0 && i < NumRec) {return Path[i];
  } else {return NULL;}
}