source: titan/plugins/tmdb/tmdb.h @ 16512

Last change on this file since 16512 was 16512, checked in by nit, 8 years ago

[titan] update all plugins

File size: 12.4 KB
Line 
1#ifndef TMDB_H
2#define TMDB_H
3
4#define TMPTMDBPIC1 "/tmp/tmptmdb1.jpg"
5#define TMPTMDBPIC2 "/tmp/tmptmdb2.jpg"
6#define TMPTMDBPIC3 "/tmp/tmptmdb3.jpg"
7#define TMPTMDBPIC4 "/tmp/tmptmdb4.jpg"
8#define TMPTMDBPIC5 "/tmp/tmptmdb5.mvi"
9
10struct tmdb* addtmdb(struct tmdb** first, int count, struct tmdb* last)
11{
12        //debug(1000, "in");
13        struct tmdb *newnode = NULL, *prev = NULL, *node = *first;
14
15        newnode = (struct tmdb*)calloc(1, sizeof(struct tmdb));
16        if(newnode == NULL)
17        {
18                err("no memory");
19                return NULL;
20        }
21
22        if(last == NULL)
23        {
24                while(node != NULL)
25                {
26                        prev = node;
27                        node = node->next;
28                }
29        }
30        else
31        {
32                prev = last;
33                node = last->next;
34        }
35
36        if(prev == NULL)
37                *first = newnode;
38        else
39        {
40                prev->next = newnode;
41                newnode->prev = prev;
42        }
43        newnode->next = node;
44        if(node != NULL) node->prev = newnode;
45
46        //debug(1000, "out");
47        return newnode;
48}
49
50int deltmdb(struct tmdb** first, struct tmdb* tnode, int flag)
51{
52        debug(1000, "in");
53        int ret = 1;
54
55        struct tmdb *node = *first, *prev = *first;
56
57        while(node != NULL)
58        {
59                if(node == tnode)
60                {
61                        ret = 0;
62                        if(node == *first)
63                        {
64                                *first = node->next;
65                                if(*first != NULL)
66                                        (*first)->prev = NULL;
67                        }
68                        else
69                        {
70                                prev->next = node->next;
71                                if(node->next != NULL)
72                                        node->next->prev = prev;
73                        }
74
75                        free(node->title); node->title = NULL;
76                        free(node->year); node->year = NULL;
77                        free(node->rated); node->rated = NULL;
78                        free(node->released); node->released = NULL;
79                        free(node->genre); node->genre = NULL;
80                        free(node->runtime); node->runtime = NULL;
81                        free(node->plot); node->plot = NULL;
82                        free(node->postermid); node->postermid = NULL;
83                        free(node->rating); node->rating = NULL;
84                        free(node->votes); node->votes = NULL;
85                        free(node->id); node->id = NULL;
86                        free(node->orgname); node->orgname = NULL;
87                        free(node->imdbid); node->imdbid = NULL;
88                        free(node->backdrop); node->backdrop = NULL;
89                        free(node->language); node->language = NULL;
90                        free(node->type); node->type = NULL;
91                        free(node->score); node->score = NULL;
92                        free(node->cover); node->cover = NULL;
93                        free(node->thumb); node->thumb = NULL;
94                        free(node->mvi); node->mvi = NULL;
95
96                        free(node);
97                        node = NULL;
98
99                        break;
100                }
101
102                prev = node;
103                node = node->next;
104        }
105
106        debug(1000, "out");
107        return ret;
108}
109
110void freetmdb(struct tmdb** first, int flag)
111{
112        debug(1000, "in");
113        struct tmdb *node = *first, *prev = *first;
114
115        while(node != NULL)
116        {
117                prev = node;
118                node = node->next;
119                if(prev != NULL)
120                        deltmdb(first, prev, flag);
121        }
122
123        unlink(TMPTMDBPIC1);
124        unlink(TMPTMDBPIC2);
125        unlink(TMPTMDBPIC3);
126        unlink(TMPTMDBPIC4);
127        unlink(TMPTMDBPIC5);
128
129        debug(1000, "out");
130}
131
132char* savetmdbpic(char* imdbid, char* url, char* tmppic, char* pic, int flag1)
133{
134        char* ip = NULL, *pos = NULL, *path = NULL, *ret = NULL;
135        char* savefile = NULL;
136
137        if(imdbid == NULL || url == NULL) return NULL;
138        ip = string_replace("http://", "", url, 0);
139
140        if(ip != NULL)
141                pos = strchr(ip, '/');
142        if(pos != NULL)
143        {
144                pos[0] = '\0';
145                path = pos + 1;
146        }
147
148        if(flag1 == 1)
149        {
150                savefile = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
151                savefile = ostrcat(savefile, imdbid, 1, 0);
152                savefile = ostrcat(savefile, pic, 1, 0);
153                if(!file_exist(savefile))
154                        gethttp(ip, path, 80, savefile, NULL, NULL, 0);
155                ret = savefile;
156        }
157        else
158        {
159                gethttp(ip, path, 80, tmppic, NULL, NULL, 0);
160                ret = ostrcat(tmppic, NULL, 0, 0);
161        }
162
163        free(ip); ip = NULL;
164        return ret;
165}
166
167//flag: 0 = title search
168//flag: 1 = imdbid search
169//flag1: 0 = save pic in tmp
170//flag1: 1 = save pic in mediadb path if pic not exist
171//flag2: 2 = save no pic
172struct tmdb* gettmdb(struct tmdb** first, char* title, int flag, int flag1)
173{
174        struct tmdb* tnode = NULL;
175        char* tmpstr = NULL, *tmpstr1 = NULL;
176        char* tmpsearch = NULL, *savefile = NULL;
177        int count = 0;
178       
179        tmpsearch = ostrcat("2.1/", NULL, 0, 0);
180        if(flag == 0)
181                tmpsearch = ostrcat(tmpsearch, "Movie.search", 1, 0);
182        else
183                tmpsearch = ostrcat(tmpsearch, "Movie.imdbLookup", 1, 0);
184               
185        tmpsearch = ostrcat(tmpsearch, "/", 1, 0);
186        tmpsearch = ostrcat(tmpsearch, "de", 1, 0);
187        tmpsearch = ostrcat(tmpsearch, "/xml/", 1, 0);
188        tmpsearch = ostrcat(tmpsearch, "7bcd34bb47bc65d20a49b6b446a32866", 1, 0);
189        tmpsearch = ostrcat(tmpsearch, "/", 1, 0);
190        tmpsearch = ostrcat(tmpsearch, title, 1, 0);
191        tmpsearch = stringreplacechar(tmpsearch, ' ', '+');
192
193        tmpstr = gethttp("api.themoviedb.org", tmpsearch, 80, NULL, NULL, NULL, 0);
194       
195        debug(133, "tmpsearch: %s", tmpsearch);
196//      debug(133, "tmpstr: %s", tmpstr);
197                               
198        free(tmpsearch); tmpsearch = NULL;
199
200        if(tmpstr != NULL)
201        {
202                if(ostrstr(tmpstr, "<movies>Nothing found.</movies>") != NULL)
203                {
204      debug(133, "<movies>Nothing found.</movies>");
205                        free(tmpstr); tmpstr = NULL;
206                        return NULL;
207                }
208
209                tmpstr1 = ostrstr(tmpstr, "<movie>");
210
211                while(tmpstr1 != NULL)
212                {
213                        tnode = addtmdb(first, 1, tnode);
214                        if(tnode == NULL)
215                        {
216                                err("no mem");
217                                free(tmpstr); tmpstr = NULL;
218                                return *first;
219                        }
220                        count++;
221
222                        if(ostrstr(tmpstr1, "<name>") != NULL)
223                                tnode->title = string_resub("<name>", "</name>", tmpstr1, 0);
224
225                        if(ostrstr(tmpstr1, "<language>") != NULL)
226                                tnode->language = string_resub("<language>", "</language>", tmpstr1, 0);
227
228                        if(ostrstr(tmpstr1, "<type>") != NULL)
229                                tnode->type = string_resub("<type>", "</type>", tmpstr1, 0);
230
231                        if(ostrstr(tmpstr1, "<original_name>") != NULL)
232                                tnode->orgname = string_resub("<original_name>", "</original_name>", tmpstr1, 0);
233
234                        if(ostrstr(tmpstr1, "<score>") != NULL)
235                                tnode->score = string_resub("<score>", "</score>", tmpstr1, 0);
236
237                        if(ostrstr(tmpstr1, "<rated>") != NULL)
238                                tnode->rated = string_resub("<rated>", "</rated>", tmpstr1, 0);
239
240                        if(ostrstr(tmpstr1, "<released>") != NULL)
241                                tnode->released = string_resub("<released>", "</released>", tmpstr1, 0);
242
243                        if(ostrstr(tmpstr1, "<categories>") != NULL)
244                        {
245                                char* tmpcat = string_resub("<categories>", "</categories>", tmpstr1, 0);
246                                char* ptmpcat = ostrstr(tmpcat, "<category ");
247                                while(ptmpcat != NULL)
248                                {
249                                        tnode->genre = ostrcat(tnode->genre, string_resub("<category type=\"genre\" name=\"", "\" url=", ptmpcat, 0), 1, 1);
250                                        ptmpcat += 5;
251                                        ptmpcat = ostrstr(ptmpcat, "<category ");
252
253                                        if(ptmpcat != NULL)
254                                                tnode->genre = ostrcat(tnode->genre, ", ", 1, 0);
255                                }
256                                free(tmpcat); tmpcat = NULL;
257                        }
258
259                        if(ostrstr(tmpstr1, "<runtime>") != NULL)
260                                tnode->runtime = string_resub("<runtime>", "</runtime>", tmpstr1, 0);
261
262                        if(ostrstr(tmpstr1, "<overview>") != NULL)
263                                tnode->plot = string_resub("<overview>", "</overview>", tmpstr1, 0);
264
265                        if(flag1 != 2 && ostrstr(tmpstr1, "size=\"thumb\"") != NULL)
266                                tnode->thumb = string_resub("<image type=\"poster\" url=\"", "\" size=\"thumb\"", tmpstr1, 1);
267
268                        if(flag1 != 2 && ostrstr(tmpstr1, "size=\"cover\"") != NULL)
269                                tnode->cover = string_resub("<image type=\"poster\" url=\"", "\" size=\"cover\"", tmpstr1, 1);
270
271                        if(flag1 != 2 && ostrstr(tmpstr1, "size=\"mid\"") != NULL)
272                                tnode->postermid = string_resub("<image type=\"poster\" url=\"", "\" size=\"mid\"", tmpstr1, 1);
273
274                        if(flag1 != 2 && ostrstr(tmpstr1, "size=\"original\"") != NULL)
275                                tnode->backdrop = string_resub("<image type=\"backdrop\" url=\"", "\" size=\"original\"", tmpstr1, 1);
276
277                        if(ostrstr(tmpstr1, "<rating>") != NULL)
278                                tnode->rating = string_resub("<rating>", "</rating>", tmpstr1, 0);
279
280                        if(ostrstr(tmpstr1, "<votes>") != NULL)
281                                tnode->votes = string_resub("<votes>", "</votes>", tmpstr1, 0);
282
283                        if(ostrstr(tmpstr1, "<id>") != NULL)
284                                tnode->id = string_resub("<id>", "</id>", tmpstr1, 0);
285
286                        if(ostrstr(tmpstr1, "<imdb_id>") != NULL)
287                                tnode->imdbid = string_resub("<imdb_id>", "</imdb_id>", tmpstr1, 0);
288
289                        if((flag1 == 0 && count == 1) || flag1 == 1)
290                        {
291                                savefile = savetmdbpic(tnode->imdbid, tnode->thumb, TMPTMDBPIC1, "_thumb.jpg", flag1);
292                                free(tnode->thumb);
293                                tnode->thumb = savefile;
294
295                                savefile = savetmdbpic(tnode->imdbid, tnode->cover, TMPTMDBPIC2, "_cover.jpg", flag1);
296                                free(tnode->cover);
297                                tnode->cover = savefile;
298
299                                savefile = savetmdbpic(tnode->imdbid, tnode->postermid, TMPTMDBPIC3, "_postermid.jpg", flag1);
300                                free(tnode->postermid);
301                                tnode->postermid = savefile;
302
303                                savefile = savetmdbpic(tnode->imdbid, tnode->backdrop, TMPTMDBPIC4, "_backdrop.jpg", flag1);
304                                free(tnode->backdrop);
305                                tnode->backdrop = savefile;
306                        }
307
308                        if(flag1 == 1 && tnode->backdrop != NULL && tnode->imdbid != NULL)
309                        {
310                                free(tnode->mvi);
311                                tnode->mvi = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
312                                tnode->mvi = ostrcat(tnode->mvi, tnode->imdbid, 1, 0);
313                                tnode->mvi = ostrcat(tnode->mvi, "_backdrop.mvi", 1, 0);
314                               
315                                if(!file_exist(tnode->mvi))
316                                {
317                                        char* cmd = NULL;
318                                        cmd = ostrcat(cmd, "jpegtran -outfile /tmp/backdrop.resize.jpg -copy none ", 1, 0);
319                                        cmd = ostrcat(cmd, tnode->backdrop, 1, 0);
320       
321                                        debug(133, "cmd %s", cmd);
322                                        system(cmd);
323                                        free(cmd); cmd = NULL;
324       
325                                        cmd = ostrcat(cmd, "ffmpeg -y -f image2 -i /tmp/backdrop.resize.jpg ", 1, 0);
326                                        cmd = ostrcat(cmd, tnode->mvi, 1, 0);
327                                        debug(133, "cmd %s", cmd);
328                                        system(cmd);
329                                        free(cmd); cmd = NULL;
330                                }
331                        }
332
333                        tmpstr1 += 5;
334                        tmpstr1 = ostrstr(tmpstr1, "<movie>");
335
336      debug(133, "----------------------tmdb start----------------------");
337                        debug(133, "title: %s", tnode->title);
338                        debug(133, "language: %s", tnode->language);
339                        debug(133, "type: %s", tnode->type);
340                        debug(133, "orgname: %s", tnode->orgname);
341                        debug(133, "score: %s", tnode->score);
342                        debug(133, "rating: %s", tnode->rating);
343                        debug(133, "released: %s", tnode->released);
344                        debug(133, "genre: %s", tnode->genre);
345                        debug(133, "runtime: %s", tnode->runtime);
346                        debug(133, "plot: %s", tnode->plot);
347                        debug(133, "thumb: %s", tnode->thumb);
348                        debug(133, "cover: %s", tnode->cover);
349                        debug(133, "postermid: %s", tnode->postermid);
350                        debug(133, "backdrop: %s", tnode->backdrop);
351                        debug(133, "mvi: %s", tnode->mvi);
352                        debug(133, "rating: %s", tnode->rating);
353                        debug(133, "votes: %s", tnode->votes);
354                        debug(133, "id: %s", tnode->id);       
355                        debug(133, "imdbid: %s", tnode->imdbid);
356      debug(133, "----------------------tmdb end----------------------");
357                }
358        }
359
360        free(tmpstr); tmpstr = NULL;
361        return *first;
362}
363
364void screentmdb(char* title)
365{
366        int rcret = 0;
367        struct skin* tmdbskin = getscreen("tmdb");
368        struct skin* skin_plot = getscreennode(tmdbskin, "plot");
369        struct skin* skin_title = getscreennode(tmdbskin, "title");
370        struct skin* skin_orgname = getscreennode(tmdbskin, "orgname");
371        struct skin* skin_rating = getscreennode(tmdbskin, "rating");
372        struct skin* skin_genre = getscreennode(tmdbskin, "genre");
373        struct skin* skin_released = getscreennode(tmdbskin, "released");
374        struct skin* skin_cover = getscreennode(tmdbskin, "cover");
375        struct skin* skin_votes = getscreennode(tmdbskin, "votes");
376        struct tmdb* node = NULL;
377        char* search = NULL;
378
379        setfbtransparent(255);
380        status.hangtime = 99999;
381
382        if(title == NULL) title = getepgakttitle(NULL);
383
384        node = gettmdb(&node, title, 0, 0);
385start:
386        if(node != NULL)
387        {
388                changetext(skin_plot, node->plot);
389                changetext(skin_title, node->title);
390                changetext(skin_orgname, node->orgname);
391                changetext(skin_rating, node->rating);
392                changetext(skin_genre, node->genre);
393                changetext(skin_released, node->released);
394                changetext(skin_votes, node->votes);
395                changepic(skin_cover, TMPTMDBPIC3);
396        }
397
398        drawscreen(tmdbskin, 0, 0);
399
400        while(1)
401        {
402                rcret = waitrc(tmdbskin, 0, 0);
403       
404                if(rcret == getrcconfigint("rcexit", NULL)) break;
405                if(rcret == getrcconfigint("rcok", NULL)) break;
406
407                if(rcret == getrcconfigint("rcred", NULL))
408                {
409                        search = textinput("Search", NULL);
410                        if(search != NULL)
411                        {
412                                freetmdb(&node, 0); node = NULL;
413                                node = gettmdb(&node, search, 0, 0);
414                                free(search); search = NULL;
415                                goto start;
416                        }
417                        drawscreen(tmdbskin, 0, 0);
418                        continue;
419                }
420                if(rcret == getrcconfigint("rcgreen", NULL))
421                {
422                        struct tmdb* tnode = node;
423                        struct menulist* mlist = NULL, *mbox = NULL;
424
425                        while(tnode != NULL)
426                        {
427                                addmenulist(&mlist, tnode->title, tnode->imdbid, NULL, 0, 0);
428                                tnode = tnode->next;
429                        }
430
431                        mbox = menulistbox(mlist, NULL, NULL, NULL, NULL, 0, 0);
432                        if(mbox != NULL)
433                        {
434                                search = ostrcat(mbox->text, NULL, 0, 0);
435                                if(search != NULL)
436                                {
437                                        freetmdb(&node, 0); node = NULL;
438                                        node = gettmdb(&node, search, 1, 0);
439                                        free(search); search = NULL;
440                                        freemenulist(mlist, 1); mlist = NULL, mbox = NULL;
441                                        goto start;
442                                }
443                        }
444                        freemenulist(mlist, 1); mlist = NULL, mbox = NULL;
445                        drawscreen(tmdbskin, 0, 0);
446                        continue;
447                }
448        }
449
450        freetmdb(&node, 0); node = NULL;
451        setosdtransparent(getskinconfigint("osdtransparent", NULL));
452        status.hangtime = getconfigint("hangtime", NULL);
453        clearscreen(tmdbskin);
454}
455
456#endif
Note: See TracBrowser for help on using the repository browser.