source: titan/titan/mediadbedit.h @ 44550

Last change on this file since 44550 was 21745, checked in by nit, 11 years ago

[titan] add message if mediadb entry not found

File size: 11.4 KB
Line 
1#ifndef MEDIADBEDIT_H
2#define MEDIADBEDIT_H
3
4//flag 0: don't save/restore background
5//flag 1: save/restore background
6void screenmediadbedit(char* file, int id, int flag)
7{
8        int rcret = 0, type = 0;
9        struct skin* mediadbedit = getscreen("mediadbedit");
10        struct skin* listbox = getscreennode(mediadbedit, "listbox");
11        struct skin* title = getscreennode(mediadbedit, "title");
12        struct skin* year = getscreennode(mediadbedit, "year");
13        struct skin* released = getscreennode(mediadbedit, "released");
14        struct skin* runtime = getscreennode(mediadbedit, "runtime");
15        struct skin* genre = getscreennode(mediadbedit, "genre");
16        struct skin* director = getscreennode(mediadbedit, "director");
17        struct skin* writer = getscreennode(mediadbedit, "writer");
18        struct skin* actors = getscreennode(mediadbedit, "actors");
19        struct skin* plot = getscreennode(mediadbedit, "plot");
20        struct skin* rating = getscreennode(mediadbedit, "rating");
21        struct skin* votes = getscreennode(mediadbedit, "votes");
22        struct skin* locked = getscreennode(mediadbedit, "locked");
23        struct skin* picture = getscreennode(mediadbedit, "picture");
24        struct skin* shortname = getscreennode(mediadbedit, "shortname");
25        struct skin* fileinfo = getscreennode(mediadbedit, "fileinfo");
26        struct skin* tmp = NULL;
27        struct skin* load = getscreen("loading");
28        char* tmpstr = NULL, *bg = NULL, *picret = NULL;
29        struct mediadb* node = NULL;
30       
31        if(file != NULL)
32        {
33                char* dname = ostrcat(file, NULL, 0, 0);
34                dname = dirname(dname);
35                node = getmediadb(dname, basename(file), 0);
36                free(dname); dname = NULL;
37        }
38
39        if(id == 3) type = 0; //video
40        if(id == 4) type = 1; //audio
41        if(id == 2) type = 2; //picture
42
43        if(node != NULL)
44        {
45                changeinput(picture, NULL);
46                changeinput(title, node->title);
47
48                changemask(year, "0000");
49                tmpstr = oitoa(node->year);
50                changeinput(year, tmpstr);
51                free(tmpstr); tmpstr = NULL;
52                year->input = mask(year->input, 4, "0");
53
54                changeinput(released, node->released);
55                changeinput(runtime, node->runtime);
56                changeinput(genre, node->genre);
57                changeinput(director, node->director);
58                changeinput(writer, node->writer);
59                changeinput(actors, node->actors);
60                changeinput(plot, node->plot);
61                changeinput(shortname, node->shortname);
62                changeinput(fileinfo, node->fileinfo);
63
64                tmpstr = oitoa(node->rating);
65                changeinput(rating, "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10");
66                setchoiceboxselection(rating, tmpstr);
67                free(tmpstr); tmpstr = NULL;
68
69                changemask(votes, "0000000");
70                tmpstr = oitoa(node->votes);
71                changeinput(votes, tmpstr);
72                free(tmpstr); tmpstr = NULL;
73                votes->input = mask(votes->input, 7, "0");
74
75                addchoicebox(locked, "0", _("unlock -> lock it"));
76                addchoicebox(locked, "1", _("unlock -> leaf unlock"));
77                addchoicebox(locked, "2", _("locked -> unlock it"));
78                addchoicebox(locked, "3", _("locked -> leaf locked"));
79
80                if(checkbit(node->flag, 31) == 1)
81                        setchoiceboxselection(locked, "3");
82                else
83                        setchoiceboxselection(locked, "0");
84
85                if(flag == 1)
86                {
87                        drawscreen(mediadbedit, 2, 0);
88                        bg = savescreen(mediadbedit);
89                }
90
91                addscreenrc(mediadbedit, listbox);
92                drawscreen(mediadbedit, 0, 0);
93
94                tmp = listbox->select;
95                while(1)
96                {
97                        addscreenrc(mediadbedit, tmp);
98                        rcret = waitrcext(mediadbedit, 0, 0, 1000);
99                        delownerrc(mediadbedit);
100                        addscreenrc(mediadbedit, listbox);
101                        tmp = listbox->select;
102
103                        if(rcret == getrcconfigint("rcexit", NULL)) break;
104                        if(rcret == getrcconfigint("rcok", NULL))
105                        {
106                                drawscreen(load, 0, 0);
107                                unsigned long hash = 0;
108
109                                if(node->id == NULL || strlen(node->id) == 0)
110                                {
111                                        hash = gethash(node->file);
112                                        tmpstr = olutoa(hash);
113                                }
114                                else
115                                        tmpstr = ostrcat(node->id, NULL, 0, 0);
116
117                                if(ostrcmp(locked->ret, "1") == 0 || ostrcmp(locked->ret, "2") == 0)
118                                        node->flag = clearbit(node->flag, 31);
119                                if(ostrcmp(locked->ret, "0") == 0 || ostrcmp(locked->ret, "3") == 0)
120                                        node->flag = setbit(node->flag, 31);
121
122                                if(picret != NULL)
123                                {
124                                        int channels = 0;
125                                        unsigned long width = 0, height = 0, rowbytes = 0;
126                                        char* thumb = NULL;
127                                        unsigned char* buf = NULL;
128                                       
129                                        buf = loadjpg(picret, &width, &height, &rowbytes, &channels, 16);
130                                        thumb = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
131                                        thumb = ostrcat(thumb, tmpstr, 1, 0);
132                                        thumb = ostrcat(thumb, "_thumb.jpg", 1, 0);
133                                        buf = savejpg(thumb, width, height, channels, 91, 140, 70, buf);
134                                        free(thumb); thumb = NULL;
135                                        free(buf); buf = NULL;
136         
137                                        buf = loadjpg(picret, &width, &height, &rowbytes, &channels, 16);
138                                        thumb = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
139                                        thumb = ostrcat(thumb, tmpstr, 1, 0);
140                                        thumb = ostrcat(thumb, "_cover.jpg", 1, 0);
141                                        buf = savejpg(thumb, width, height, channels, 185, 264, 70, buf);
142                                        free(thumb); thumb = NULL;
143                                        free(buf); buf = NULL;
144
145                                        buf = loadjpg(picret, &width, &height, &rowbytes, &channels, 16);
146                                        thumb = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
147                                        thumb = ostrcat(thumb, tmpstr, 1, 0);
148                                        thumb = ostrcat(thumb, "_poster.jpg", 1, 0);
149                                        buf = savejpg(thumb, width, height, channels, 400, 450, 70, buf);
150                                        free(thumb); thumb = NULL;
151                                        free(buf); buf = NULL;
152
153                                        buf = loadjpg(picret, &width, &height, &rowbytes, &channels, 16);
154                                        thumb = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
155                                        thumb = ostrcat(thumb, tmpstr, 1, 0);
156                                        thumb = ostrcat(thumb, "_postermid.jpg", 1, 0);
157                                        buf = savejpg(thumb, width, height, channels, 400, 450, 70, buf);
158                                        free(thumb); thumb = NULL;
159                                        free(buf); buf = NULL;
160
161                                        char* size = NULL, *logdir = NULL, *logfile = NULL, *cmd = NULL, *mvi = NULL, *tmpjpg = NULL, *tmpmpg = NULL, *tmpmeta = NULL, *timen = NULL;
162                                        mvi = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
163                                        mvi = ostrcat(mvi, node->id, 1, 0);
164                                        mvi = ostrcat(mvi, "_backdrop1.mvi", 1, 0);
165                                       
166                                        logdir = ostrcat(getconfig("mediadbpath", NULL), "/.mediadbdebug", 0, 0);
167                                        if(!file_exist(logdir))
168                                                mkdir(logdir, 0777);
169                                        logfile = ostrcat(logdir, "/imdb-scan.log", 0, 0);
170
171                                        timen = ostrcat(oitoa(time(NULL)), NULL, 1, 0);
172                                       
173                                        tmpjpg = ostrcat("/tmp/backdrop.resize.", timen, 0, 0);
174                                        tmpjpg = ostrcat(tmpjpg, ".jpg", 1, 0);
175                                       
176                                        tmpmpg = ostrcat("/tmp/backdrop.resize.", timen, 0, 0);
177                                        tmpmpg = ostrcat(tmpmpg, ".mpg", 1, 0);
178                                       
179                                        tmpmeta = ostrcat("/tmp/mediadb.", timen, 0, 0);
180                                        tmpmeta = ostrcat(tmpmeta, ".meta", 1, 0);
181                               
182                                        off64_t filesize = getfilesize(picret);
183                                        debug(133, "filesize %lld", filesize);
184                                                               
185                                        if(filesize < 1500000)
186                                        {
187                                                cmd = ostrcat(cmd, "ffmpeg -i ", 1, 0);
188                                                cmd = ostrcat(cmd, picret, 1, 0);
189                                                cmd = ostrcat(cmd, " > ", 1, 0);
190                                                cmd = ostrcat(cmd, tmpmeta, 1, 0);
191                                                cmd = ostrcat(cmd, " 2>&1", 1, 0);
192       
193                                                debug(133, "cmd %s", cmd);
194                                                system(cmd);
195                                                free(cmd); cmd = NULL;
196       
197                                                cmd = ostrcat(cmd, "cat ", 1, 0);
198                                                cmd = ostrcat(cmd, tmpmeta, 1, 0);
199                                                cmd = ostrcat(cmd, " | grep Stream | awk '{print $6}' | cut -d'x' -f1", 1, 0);
200                                                char* size = string_newline(command(cmd));
201                                                free(cmd); cmd = NULL;
202                                                debug(133, "size %s", size);
203                                                if(size != NULL)
204                                                {
205                                                        debug(133, "size %d", atoi(size));
206                                                        int picsize = atoi(size);
207               
208                                                        if(picsize < 2000)
209                                                        {
210                                                                debug(133, "size ok %d", picsize);
211                                                                                               
212                                                                cmd = ostrcat(cmd, "jpegtran -outfile ", 1, 0);
213                                                                cmd = ostrcat(cmd, tmpjpg, 1, 0);
214                                                                cmd = ostrcat(cmd, " -copy none ", 1, 0);
215                                                                cmd = ostrcat(cmd, picret, 1, 0);
216                               
217                                                                debug(133, "cmd %s", cmd);
218                                                                system(cmd);
219                                                                free(cmd); cmd = NULL;
220                       
221                                                                if(file_exist(tmpjpg))
222                                                                {
223                                                                        free(cmd), cmd = NULL;
224                                                                        cmd = ostrcat(cmd, "ffmpeg -y -f image2 -i ", 1, 0);
225                                                                        cmd = ostrcat(cmd, tmpjpg, 1, 0);
226                                                                        cmd = ostrcat(cmd, " ", 1, 0);
227                                                                        cmd = ostrcat(cmd, tmpmpg, 1, 0);
228
229                                                                        if(getconfigint("mediadbdebug", NULL) == 1)
230                                                                        {
231                                                                                filedebug(logfile, "#############\nEdit Localfile: %s size=(%s) filesize(%lld) (%s)\n#############", picret, size, filesize, node->id);
232                                                                                cmd = ostrcat(cmd, " >> ", 1, 0);
233                                                                                cmd = ostrcat(cmd, logfile, 1, 0);
234                                                                                cmd = ostrcat(cmd, " 2>&1", 1, 0);
235                                                                        }
236                                                                        else
237                                                                        {
238                                                                                cmd = ostrcat(cmd, " > /dev/null 2>&1", 1, 0);
239                                                                        }
240                                                                        debug(133, "cmd %s", cmd);
241                                                                        system(cmd);
242                                                                        free(cmd); cmd = NULL;
243       
244                                                                        if(file_exist(tmpmpg))
245                                                                        {                                       
246                                                                                cmd = ostrcat(cmd, "mv -f ", 1, 0);
247                                                                                cmd = ostrcat(cmd, tmpmpg, 1, 0);
248                                                                                cmd = ostrcat(cmd, " ", 1, 0);
249                                                                                cmd = ostrcat(cmd, mvi, 1, 0);
250                                                                                debug(133, "cmd %s", cmd);
251                                                                                system(cmd);
252                                                                                free(cmd); cmd = NULL;
253                                                                               
254                                                                                writesysint("/proc/sys/vm/drop_caches", 3, 0);
255                                                                                free(mvi), mvi = NULL;
256                                                                                node->backdropcount = 1;
257                                                                        }
258                                                                        else
259                                                                        {
260                                                                                free(mvi), mvi = NULL;
261                                                                                node->backdropcount = 0;
262                                                                        }
263                                                                }
264                                                        }
265                                                        else
266                                                        {
267                                                                debug(133, "ERROR Edit Localfile size to big skipped %d", picsize);
268               
269                                                                if(getconfigint("mediadbdebug", NULL) == 1)
270                                                                        filedebug(logfile, "#############\nERROR Localfile size to big skipped: %s size=(%s) filesize(%lld) (%s)\n#############", picret, size, filesize, node->id);
271                                                        }
272                                                }
273                                        }
274                                        else
275                                        {
276                                                debug(133, "ERROR Edit Localfile filesize to BIG skipped %lld", filesize);
277                       
278                                                if(getconfigint("mediadbdebug", NULL) == 1)
279                                                        filedebug(logfile, "#############\nERROR Edit Localfile filesize to BIG skipped: %s filesize(%lld) (%s)\n#############", picret, filesize, node->id);
280                                        }
281                                        free(timen), timen = NULL;
282                                        free(tmpjpg), tmpjpg = NULL;
283                                        free(tmpmpg), tmpmpg = NULL;
284                                        free(tmpmeta), tmpmeta = NULL;
285                                        free(size), size = NULL;
286                                        free(logdir), logdir = NULL;
287                                        free(logfile), logfile = NULL;
288                                        free(cmd), cmd = NULL;
289                                        free(mvi), mvi = NULL;
290
291                                        unlink(tmpmeta);
292                                        unlink(tmpjpg);
293                                        unlink(tmpmpg);
294/*
295                                        cmd = ostrcat(cmd, getconfig("mediadbpath", NULL), 1, 0);
296                                        cmd = ostrcat(cmd, "/", 1, 0); 
297                                        cmd = ostrcat(cmd, timestamp, 1, 0);
298                                        cmd = ostrcat(cmd, "_backdrop1.jpg", 1, 0);
299                                        unlink(cmd);
300                                        free(cmd); cmd = NULL;
301                                        free(timestamp); timestamp = NULL;
302*/
303                                        node = createmediadb(node, tmpstr, type, title->ret, year->ret, released->ret, runtime->ret, genre->ret, director->ret, writer->ret, actors->ret, plot->ret, node->poster, rating->ret, votes->ret, node->path, node->file, node->shortname, node->fileinfo, node->flag, node->backdropcount);
304                                }
305                                else
306                                        node = createmediadb(node, tmpstr, type, title->ret, year->ret, released->ret, runtime->ret, genre->ret, director->ret, writer->ret, actors->ret, plot->ret, node->poster, rating->ret, votes->ret, node->path, node->file, node->shortname, node->fileinfo, node->flag, node->backdropcount);
307
308                                free(tmpstr); tmpstr = NULL;
309                                clearscreen(load);
310                                break;
311                        }
312                        if(rcret == getrcconfigint("rcred", NULL))
313                        {
314                                free(picret); picret = NULL;
315                                picret = screendir(getconfig("mediadbpath", NULL), "*.jpg", NULL, NULL, NULL, NULL, 0, "SELECT", 0, NULL, 0, NULL, 0, mediadbedit->width, mediadbedit->prozwidth, mediadbedit->height, mediadbedit->prozheight, 0);
316                                if(picret != NULL)
317                                        changeinput(picture, basename(picret));
318                                drawscreen(mediadbedit, 0, 0);
319                        }
320                }
321
322                free(picret); picret = NULL;
323                delownerrc(mediadbedit);
324                clearscreen(mediadbedit);
325
326                if(flag == 1)
327                {
328                        restorescreen(bg, mediadbedit);
329                        blitfb(0);
330                }
331        }
332        else
333                textbox(_("Message"), _("MediaDB entry for this file not found."), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 0);
334}
335
336#endif
Note: See TracBrowser for help on using the repository browser.