source: titan/plugins/imdb/imdb.h @ 16197

Last change on this file since 16197 was 16197, checked in by obi, 12 years ago

[titan] update tmdb

File size: 4.9 KB
Line 
1#ifndef IMDB_H
2#define IMDB_H
3
4#define TMPIMDBPIC "/tmp/tmpimdb.jpg"
5
6struct imdb
7{
8        char* title;
9        char* year;
10        char* rated;
11        char* released;
12        char* genre;
13        char* director;
14        char* writer;
15        char* actors;
16        char* plot;
17        char* poster;
18        char* runtime;
19        char* rating;
20        char* votes;
21        char* id;
22};
23
24void freeimdb(struct imdb* node)
25{
26        if(node == NULL) return;
27
28        free(node->title); node->title = NULL;
29        free(node->year); node->year = NULL;
30        free(node->rated); node->rated = NULL;
31        free(node->released); node->released = NULL;
32        free(node->genre); node->genre = NULL;
33        free(node->director); node->director = NULL;
34        free(node->writer); node->writer = NULL;
35        free(node->actors); node->actors = NULL;
36        free(node->plot); node->plot = NULL;
37        free(node->poster); node->poster = NULL;
38        free(node->runtime); node->runtime = NULL;
39        free(node->rating); node->rating = NULL;
40        free(node->votes); node->votes = NULL;
41        free(node->id); node->id = NULL;
42        unlink(TMPIMDBPIC);
43
44        free(node); node = NULL;
45}
46
47// flag 0 = title search
48// flag 1 = imdbid search
49// flag 2 = imdbid search and save
50
51struct imdb* getimdb(char* title, int flag)
52{
53        struct imdb* imdb = NULL;
54        char* tmpstr = NULL;
55        char* tmpsearch = NULL;
56
57        if(flag == 0)
58                tmpsearch = ostrcat("?i=&t=", title, 0, 0);
59        else
60                tmpsearch = ostrcat("?i=", title, 0, 0);
61
62        tmpsearch = stringreplacechar(tmpsearch, ' ', '+');
63
64        tmpstr = gethttp("www.imdbapi.com", tmpsearch, 80, NULL, NULL, NULL, 0);
65        free(tmpsearch); tmpsearch = NULL;
66
67        if(tmpstr != NULL)
68        {
69                imdb = (struct imdb*)malloc(sizeof(struct imdb));
70                if(imdb == NULL)
71                {
72                        err("no mem");
73                        free(tmpstr); tmpstr = NULL;
74                        return NULL;
75                }
76                memset(imdb, 0, sizeof(struct imdb));
77
78                imdb->title = getxmlentry(tmpstr, "\"Title\":");
79                imdb->year = getxmlentry(tmpstr, "\"Year\":");
80                imdb->rated = getxmlentry(tmpstr, "\"Rated\":");
81                imdb->released = getxmlentry(tmpstr, "\"Released\":");
82                imdb->genre = getxmlentry(tmpstr, "\"Genre\":");
83                imdb->director = getxmlentry(tmpstr, "\"Director\":");
84                imdb->writer = getxmlentry(tmpstr, "\"Writer\":");
85                imdb->actors = getxmlentry(tmpstr, "\"Actors\":");
86                imdb->plot = getxmlentry(tmpstr, "\"Plot\":");
87                imdb->poster = getxmlentry(tmpstr, "\"Poster\":");
88                imdb->runtime = getxmlentry(tmpstr, "\"Runtime\":");
89                imdb->rating = getxmlentry(tmpstr, "\"Rating\":");
90                imdb->votes = getxmlentry(tmpstr, "\"Votes\":");
91                imdb->id = getxmlentry(tmpstr, "\"ID\":");
92
93                if(imdb->poster != NULL)
94                {
95                        char* ip = NULL, *pos = NULL, *path = NULL;
96                        ip = string_replace("http://", "", imdb->poster, 0);
97
98                        if(ip != NULL)
99                                pos = strchr(ip, '/');
100                        if(pos != NULL)
101                        {
102                                pos[0] = '\0';
103                                path = pos + 1;
104                        }
105
106                        if(flag == 2)
107                        {
108                                char* savedir = NULL;
109                                savedir = ostrcat(savedir, getconfig("mediadb", NULL), 1, 0);
110                                savedir = ostrcat(savedir, "/", 1, 0);
111                                savedir = ostrcat(savedir, imdb->id, 1, 0);
112                                savedir = ostrcat(savedir, "_poster.jpg", 1, 0);
113                                if(!file_exist(savedir))
114                                        gethttp(ip, path, 80, savedir, NULL, NULL, 0);
115                                free(savedir), savedir = NULL;
116                        }
117                        else
118                                gethttp(ip, path, 80, TMPIMDBPIC, NULL, NULL, 0);
119
120                        free(ip); ip = NULL;
121
122                }
123                free(tmpstr); tmpstr = NULL;
124        }
125
126        return imdb;
127}
128
129void screenimdb(char* title)
130{
131        int rcret = 0;
132        struct skin* imdbskin = getscreen("imdb");
133        struct skin* skin_plot = getscreennode(imdbskin, "plot");
134        struct skin* skin_title = getscreennode(imdbskin, "title");
135        struct skin* skin_director = getscreennode(imdbskin, "director");
136        struct skin* skin_writers = getscreennode(imdbskin, "writers");
137        struct skin* skin_genre = getscreennode(imdbskin, "genre");
138        struct skin* skin_releasetime = getscreennode(imdbskin, "releasetime");
139        struct skin* skin_cover = getscreennode(imdbskin, "cover");
140        struct skin* skin_actors = getscreennode(imdbskin, "actors");
141        struct imdb* node = NULL;
142        char* search = NULL;
143
144        setfbtransparent(255);
145        status.hangtime = 99999;
146
147        if(title == NULL) title = getepgakttitle(NULL);
148
149        node = getimdb(title);
150start:
151        if(node != NULL)
152        {
153                changetext(skin_plot, node->plot);
154                changetext(skin_title, node->title);
155                changetext(skin_director, node->director);
156                changetext(skin_writers, node->writer);
157                changetext(skin_genre, node->genre);
158                changetext(skin_releasetime, node->released);
159                changetext(skin_actors, node->actors);
160                changepic(skin_cover, TMPIMDBPIC);
161        }
162
163        drawscreen(imdbskin, 0);
164
165        while(1)
166        {
167                rcret = waitrc(imdbskin, 0, 0);
168       
169                if(rcret == getrcconfigint("rcexit", NULL)) break;
170                if(rcret == getrcconfigint("rcok", NULL)) break;
171
172                if(rcret == getrcconfigint("rcred", NULL))
173    {
174      search = textinput("Search", NULL);
175      if(search != NULL)
176      {
177                                freeimdb(node); node = NULL;
178                                node = getimdb(search, 0);
179        free(search); search = NULL;
180                                goto start;
181      }
182      drawscreen(imdbskin, 0);
183      continue;
184    }
185        }
186
187        freeimdb(node); node = NULL;
188        setosdtransparent(getskinconfigint("osdtransparent", NULL));
189        status.hangtime = getconfigint("hangtime", NULL);
190        clearscreen(imdbskin);
191}
192
193#endif
Note: See TracBrowser for help on using the repository browser.