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

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

[titan] update all plugins

File size: 31.0 KB
Line 
1#ifndef TMC_H
2#define TMC_H
3
4extern struct mediadbfilter* mediadbfilter;
5extern struct mediadbcategory* mediadbcategory;
6extern struct skin* skin;
7struct mediadbfilter* mediadbfilterpos = NULL;
8
9//Mainmenu
10int menu0pos = 0;
11char* menu0[] = {"skin/tmcsettings.png", "skin/tmcpicture.png", "skin/tmcvideo.png", "skin/tmcaudio.png", "skin/tmcexit.png"};
12char* menu0txt[] = {"Settings", "Picture", "Video", "Audio", "Exit"};
13
14//Settings
15int menu1pos = 0;
16char* menu1[] = {"skin/tmcscan.png", "skin/tmcdb.png", "skin/tmcsettings.png", "skin/tmcback.png", "skin/tmcbtn.png"};
17char* menu1txt[] = {"Scan", "Database Info", "Main", "Back", ""};
18
19//Picture
20int menu2pos = 0;
21char* menu2[] = {"skin/tmccategory.png", "skin/tmcrandom.png", "skin/tmcall.png", "skin/tmcone.png", "skin/tmcaz.png", "skin/tmcback.png"};
22char* menu2txt[] = {"Category", "Random", "All", "Single", "A-Z", "Back"};
23
24//Video
25int menu3pos = 0;
26char* menu3[] = {"skin/tmcgenre.png", "skin/tmccategory.png", "skin/tmcall.png", "skin/tmcyear.png", "skin/tmcdirector.png", "skin/tmcactors.png", "skin/tmcrating.png", "skin/tmcaz.png", "skin/tmcback.png"};
27char* menu3txt[] = {"Genre", "Category", "All", "Year", "Director", "Actors", "Rating", "A-Z", "Back"};
28
29//Audio
30int menu4pos = 0;
31char* menu4[] = {"skin/tmccategory.png", "skin/tmcrandom.png", "skin/tmcall.png", "skin/tmcone.png", "skin/tmcaz.png", "skin/tmcback.png"};
32char* menu4txt[] = {"Category", "Random", "All", "Single", "A-Z", "Back"};
33
34//flag 0: don't draw
35//flag 1: draw
36void tmcpicdel(struct skin* tmcpictitle, struct skin* tmcpicstar, struct skin* tmcpic1, struct skin* tmcpic2, struct skin* tmcpic3, struct skin* tmcpic4, struct skin* tmcpic5, char* tmcpictitlebg, char* tmcpicstarbg, int flag)
37{
38        changepic(tmcpic1, NULL);
39        changepic(tmcpic2, NULL);
40        changepic(tmcpic3, NULL);
41        changepic(tmcpic4, NULL);
42        changepic(tmcpic5, NULL);
43        changeret(tmcpic3, NULL);
44        changetext(tmcpictitle, NULL);
45        changepic(tmcpicstar, NULL);
46        restorescreennofree(tmcpictitlebg, tmcpictitle);
47        restorescreennofree(tmcpicstarbg, tmcpicstar);
48
49        if(flag == 1)
50        {
51                drawscreen(tmcpic1, 0, 1);
52                drawscreen(tmcpic2, 0, 1);
53                drawscreen(tmcpic3, 0, 1);
54                drawscreen(tmcpic4, 0, 1);
55                drawscreen(tmcpic5, 0, 0);
56        }
57}
58
59//flag 0: draw only
60//flag 1: left
61//flag 2: right
62void tmcpicscroll(int menuid, struct skin* tmcpictitle, struct skin* tmcpicstar, struct skin* tmcpic1, struct skin* tmcpic2, struct skin* tmcpic3, struct skin* tmcpic4, struct skin* tmcpic5, char* tmcpictitlebg, char* tmcpicstarbg, int flag)
63{
64        int count = 0;
65        struct mediadbfilter* node = mediadbfilterpos;
66        char* tmpstr = NULL;
67
68        tmcpicdel(tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
69
70        while(1)
71        {
72                if(flag == 0 && count == 0)
73                {
74                        if(node == NULL) node = mediadbfilter;
75                        mediadbfilterpos = node;
76                }
77                if(flag == 1 && count == 0)
78                {
79                        if(node == NULL) node = mediadbfilter;
80                        if(node != NULL) node = node->next;
81                        if(node == NULL) node = mediadbfilter;
82                        mediadbfilterpos = node;
83                }
84                if(flag == 2 && count == 0)
85                {
86                        if(node == NULL) node = getlastmediadbfilter(mediadbfilter, 0);
87                        if(node != NULL) node = node->prev;
88                        if(node == NULL) node = getlastmediadbfilter(mediadbfilter, 0);
89                        mediadbfilterpos = node;
90                }
91                if(count != 0)
92                {
93                        if(node == NULL) node = mediadbfilter;
94                        if(node != NULL) node = node->next;
95                        if(node == NULL) node = mediadbfilter;
96                }
97
98                if(node != NULL && node->node != NULL)
99                {
100                        if(menuid == 2) //picture
101                                tmpstr = ostrcat(node->node->poster, NULL, 0, 0);
102                        else if(menuid == 3) //video
103                        {
104                                tmpstr = ostrcat(getconfig("mediadbpath", NULL), "/", 0, 0);
105                                tmpstr = ostrcat(tmpstr, node->node->poster, 1, 0);
106                                tmpstr = ostrcat(tmpstr, "_thumb.jpg", 1, 0);
107                        }
108                       
109                        if(!file_exist(tmpstr))
110                        {
111                                free(tmpstr);
112                                tmpstr = ostrcat("%pluginpath%/tmc/skin/tmcnopic.jpg", NULL, 0, 0);
113                        }
114                       
115                        if(count == 0) changepic(tmcpic1, tmpstr);
116                        if(count == 1) changepic(tmcpic2, tmpstr);
117                        if(count == 2)
118                        {
119                                changepic(tmcpic3, tmpstr);
120                                changeret(tmcpic3, node->node->file);
121                                changetext(tmcpictitle, node->node->title);
122                               
123                                int rating = node->node->rating;
124                               
125                                if(rating > 9)
126                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar5.png");
127                                else if(rating > 8)
128                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar4x.png");
129                                else if(rating > 7)
130                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar4.png");
131                                else if(rating > 6)
132                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar3x.png");
133                                else if(rating > 5)
134                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar3.png");
135                                else if(rating > 4)
136                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar2x.png");
137                                else if(rating > 3)
138                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar2.png");
139                                else if(rating > 2)
140                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar1x.png");
141                                else if(rating > 1)
142                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar1.png");
143                                else if(rating > 0)
144                                        changepic(tmcpicstar, "%pluginpath%/tmc/skin/tmcstar0x.png");
145                                else
146                                        changepic(tmcpicstar, NULL);
147                        }
148                        if(count == 3) changepic(tmcpic4, tmpstr);
149                        if(count == 4) changepic(tmcpic5, tmpstr);
150                        free(tmpstr); tmpstr = NULL;
151                }
152                count++; if(count > 4) break;
153        }
154
155        drawscreen(tmcpictitle, 0, 1);
156        drawscreen(tmcpicstar, 0, 1);
157        drawscreen(tmcpic1, 0, 1);
158        drawscreen(tmcpic2, 0, 1);
159        drawscreen(tmcpic3, 0, 1);
160        drawscreen(tmcpic4, 0, 1);
161        drawscreen(tmcpic5, 0, 0);
162}
163
164//flag 0: draw only
165//flag 1: left
166//flag 2: right
167void tmcmenuscroll(int menuid, int active, struct skin* tmcmenutxt, struct skin* tmcmenu1, struct skin* tmcmenu2, struct skin* tmcmenu3, struct skin* tmcmenu4, struct skin* tmcmenu5, int flag)
168{
169        int id = 0, max = 0;
170        char** menu = NULL, **menutxt = NULL;
171        int *menupos = 0;
172        char* tmpstr = NULL;
173
174        if(menuid == 0)
175        {
176                menu = menu0;
177                menutxt = menu0txt;
178                max = (sizeof(menu0) / sizeof(char*)) - 1;
179                menupos = &menu0pos;
180        }
181        else if(menuid == 1)
182        {
183                menu = menu1;
184                menutxt = menu1txt;
185                max = (sizeof(menu1) / sizeof(char*)) - 1;
186                menupos = &menu1pos;
187        }
188        else if(menuid == 2)
189        {
190                menu = menu2;
191                menutxt = menu2txt;
192                max = (sizeof(menu2) / sizeof(char*)) - 1;
193                menupos = &menu2pos;
194        }
195        else if(menuid == 3)
196        {
197                menu = menu3;
198                menutxt = menu3txt;
199                max = (sizeof(menu3) / sizeof(char*)) - 1;
200                menupos = &menu3pos;
201        }
202        else if(menuid == 4)
203        {
204                menu = menu4;
205                menutxt = menu4txt;
206                max = (sizeof(menu4) / sizeof(char*)) - 1;
207                menupos = &menu4pos;
208        }
209
210        if(flag == 1) (*menupos)++;
211        if(flag == 2) (*menupos)--;
212
213        if(*menupos < 0) *menupos = max;
214        if(*menupos > max) *menupos = 0;
215
216        id = *menupos;
217
218        if(id > max) id = 0;
219        tmpstr = ostrcat("%pluginpath%/tmc/", menu[id], 0, 0);
220        changepic(tmcmenu1, tmpstr);
221        free(tmpstr); tmpstr = NULL;
222        id++;
223
224        if(id > max) id = 0;
225        tmpstr = ostrcat("%pluginpath%/tmc/", menu[id], 0, 0);
226        changepic(tmcmenu2, tmpstr);
227        free(tmpstr); tmpstr = NULL;
228        id++;
229
230        if(id > max) id = 0;
231        tmpstr = ostrcat("%pluginpath%/tmc/", menu[id], 0, 0);
232        changepic(tmcmenu3, tmpstr);
233        free(tmpstr); tmpstr = NULL;
234        changetext(tmcmenutxt, _(menutxt[id]));
235        changeret(tmcmenutxt, menutxt[id]);
236        id++;
237
238        if(id > max) id = 0;
239        tmpstr = ostrcat("%pluginpath%/tmc/", menu[id], 0, 0);
240        changepic(tmcmenu4, tmpstr);
241        free(tmpstr); tmpstr = NULL;
242        id++;
243
244        if(id > max) id = 0;
245        tmpstr = ostrcat("%pluginpath%/tmc/", menu[id], 0, 0);
246        changepic(tmcmenu5, tmpstr);
247        free(tmpstr); tmpstr = NULL;
248
249        if(active == 1)
250        {
251                changetext(tmcmenu1, NULL);
252                changetext(tmcmenu2, NULL);
253                changetext(tmcmenu3, NULL);
254                changetext(tmcmenu4, NULL);
255                changetext(tmcmenu5, NULL);
256        }
257        else
258        {
259                changetext(tmcmenu1, "X");
260                changetext(tmcmenu2, "X");
261                changetext(tmcmenu3, "X");
262                changetext(tmcmenu4, "X");
263                changetext(tmcmenu5, "X");
264        }
265
266        drawscreen(tmcmenutxt, 0, 1);
267        drawscreen(tmcmenu1, 0, 1);
268        drawscreen(tmcmenu2, 0, 1);
269        drawscreen(tmcmenu3, 0, 1);
270        drawscreen(tmcmenu4, 0, 1);
271        drawscreen(tmcmenu5, 0, 0);
272}
273
274void screentmcdb()
275{
276        int rcret = 0, videocount = 0, audiocount = 0, picturecount = 0;
277        struct skin* tmcpic3 = getscreen("tmcpic3");
278        struct skin* listbox = getscreennode(tmcpic3, "listbox");
279        struct skin* tmp = NULL;
280        char* tmpstr = NULL, *tmppic = NULL;
281
282        tmppic = ostrcat(tmcpic3->pic, NULL, 0, 0);
283        changepic(tmcpic3, NULL);
284        tmcpic3->bgcol = 0;
285
286        addscreenrc(tmcpic3, listbox);
287
288        while(1)
289        {
290                tmp = NULL;
291                videocount = 0, audiocount = 0, picturecount = 0;
292                getmediadbcounts(&videocount, &audiocount, &picturecount);
293                delmarkedscreennodes(tmcpic3, 1);
294
295                tmp = addlistbox(tmcpic3, listbox, tmp, 1);
296                if(tmp != NULL)
297                {
298                        tmpstr = ostrcat(_("Status"), ": ", 0, 0);
299                        if(status.mediadbthread != NULL)
300                                tmpstr = ostrcat(tmpstr, _("scan"), 1, 0);
301                        else
302                                tmpstr = ostrcat(tmpstr, _("idle"), 1, 0);
303                        changetext(tmp, tmpstr);
304                        free(tmpstr); tmpstr = NULL;
305                }
306
307                tmp = addlistbox(tmcpic3, listbox, tmp, 1);
308                if(tmp != NULL)
309                {
310                        tmpstr = ostrcat(_("Video"), ": ", 0, 0);
311                        tmpstr = ostrcat(tmpstr, oitoa(videocount), 1, 1);
312                        changetext(tmp, tmpstr);
313                        free(tmpstr); tmpstr = NULL;
314                }
315
316                tmp = addlistbox(tmcpic3, listbox, tmp, 1);
317                if(tmp != NULL)
318                {
319                        tmpstr = ostrcat(_("Audio"), ": ", 0, 0);
320                        tmpstr = ostrcat(tmpstr, oitoa(audiocount), 1, 1);
321                        changetext(tmp, tmpstr);
322                        free(tmpstr); tmpstr = NULL;
323                }
324
325                tmp = addlistbox(tmcpic3, listbox, tmp, 1);
326                if(tmp != NULL)
327                {
328                        tmpstr = ostrcat(_("Picture"), ": ", 0, 0);
329                        tmpstr = ostrcat(tmpstr, oitoa(picturecount), 1, 1);
330                        changetext(tmp, tmpstr);
331                        free(tmpstr); tmpstr = NULL;
332                }
333               
334                drawscreen(tmcpic3, 0, 0);
335                rcret = waitrc(tmcpic3, 1000, 0);
336
337                if(rcret == getrcconfigint("rcexit", NULL)) break;
338                if(rcret == getrcconfigint("rcok", NULL)) break;
339        }
340
341        delownerrc(tmcpic3);
342        delmarkedscreennodes(tmcpic3, 1);
343
344        changepic(tmcpic3, tmppic);
345        tmcpic3->bgcol = -1;
346        free(tmppic); tmppic = NULL;
347        drawscreen(tmcpic3, 0, 0);
348}
349
350char* screentmccategory(int type, char* category)
351{
352        int rcret = 0;
353        struct skin* tmcpic3 = getscreen("tmcpic3");
354        struct skin* listbox = getscreennode(tmcpic3, "listbox");
355        struct skin* tmp = NULL;
356        struct mediadbcategory* node = NULL;
357        char* tmpstr = NULL, *tmppic = NULL, *ret = NULL;
358
359        tmppic = ostrcat(tmcpic3->pic, NULL, 0, 0);
360        changepic(tmcpic3, NULL);
361        tmcpic3->bgcol = 0;
362
363        tmpstr = ostrcat(getconfig("mediadbfile", NULL), category, 0, 0);
364
365        if(status.mediadbthreadstatus != 3)
366        {
367                freemediadbcategory(0);
368                readmediadb(tmpstr, type, 1);
369
370                node = mediadbcategory;
371                while(node != NULL)
372                {
373                        tmp = addlistbox(tmcpic3, listbox, tmp, 1);
374                        if(tmp != NULL)
375                        {
376                                changetext(tmp, node->name);
377                        }
378                        node = node->next;
379                }
380                freemediadbcategory(0);
381        }
382        free(tmpstr); tmpstr = NULL;
383
384        addscreenrc(tmcpic3, listbox);
385        drawscreen(tmcpic3, 0, 0);
386
387        while(1)
388        {
389                rcret = waitrc(tmcpic3, 0, 0);
390
391                if(rcret == getrcconfigint("rcexit", NULL)) break;
392
393                if(rcret == getrcconfigint("rcok", NULL) && listbox->select != NULL)
394                {
395                        ret = ostrcat(listbox->select->text, NULL, 0, 0);
396                        break;
397                }
398        }
399
400        delownerrc(tmcpic3);
401        delmarkedscreennodes(tmcpic3, 1);
402
403        changepic(tmcpic3, tmppic);
404        tmcpic3->bgcol = -1;
405        free(tmppic); tmppic = NULL;
406        drawscreen(tmcpic3, 0, 0);
407
408        return ret;
409}
410
411void screentmcsettings()
412{
413        int rcret = 0;
414        struct skin* tmcpic3 = getscreen("tmcpic3");
415        struct skin* listbox = getscreennode(tmcpic3, "listbox");
416        struct skin* pictimeout = getscreennode(tmcpic3, "pictimeout");
417        struct skin* picfull = getscreennode(tmcpic3, "picfull");
418        struct skin* picname = getscreennode(tmcpic3, "picname");
419        struct skin* scan = getscreennode(tmcpic3, "scan");
420        struct skin* tmp = NULL;
421        char* tmppic = NULL;
422
423        tmppic = ostrcat(tmcpic3->pic, NULL, 0, 0);
424        changepic(tmcpic3, NULL);
425        tmcpic3->bgcol = 0;
426
427        pictimeout->hidden = NO;
428        picfull->hidden = NO;
429        picname->hidden = NO;
430        scan->hidden = NO;
431
432        addchoicebox(pictimeout, "5", "5");
433        addchoicebox(pictimeout, "10", "10");
434        addchoicebox(pictimeout, "15", "15");
435        addchoicebox(pictimeout, "20", "20");
436        setchoiceboxselection(pictimeout, getconfig("tmcpictimeout", NULL));
437
438        addchoicebox(picfull, "0", _("no"));
439        addchoicebox(picfull, "1", _("yes"));
440        setchoiceboxselection(picfull, getconfig("tmcpicfull", NULL));
441
442        addchoicebox(picname, "0", _("no"));
443        addchoicebox(picname, "1", _("yes"));
444        setchoiceboxselection(picname, getconfig("tmcpicname", NULL));
445
446        addchoicebox(scan, "0", _("all"));
447        addchoicebox(scan, "1", _("video"));
448        addchoicebox(scan, "2", _("audio"));
449        addchoicebox(scan, "3", _("picture"));
450        addchoicebox(scan, "91", _("video / audio"));
451        addchoicebox(scan, "92", _("video / picture"));
452        addchoicebox(scan, "93", _("audio / picture"));
453        setchoiceboxselection(scan, getconfig("tmcscan", NULL));
454
455        addscreenrc(tmcpic3, listbox);
456        drawscreen(tmcpic3, 0, 0);
457
458        tmp = listbox->select;
459        while(1)
460        {
461                addscreenrc(tmcpic3, tmp);
462                rcret = waitrc(tmcpic3, 0, 0);
463                tmp = listbox->select;
464
465                if(rcret == getrcconfigint("rcexit", NULL)) break;
466
467                if(rcret == getrcconfigint("rcok", NULL) && listbox->select != NULL)
468                {
469                        addconfigscreencheck("tmcpictimeout", pictimeout, "5");
470                        addconfigscreencheck("tmcpicname", picname, "0");
471                        addconfigscreencheck("tmcpicfull", picfull, "0");
472                        addconfigscreencheck("tmcscan", scan, "0");
473                        break;
474                }
475        }
476
477        pictimeout->hidden = YES;
478        picfull->hidden = YES;
479        picname->hidden = YES;
480        scan->hidden = YES;
481
482        delownerrc(tmcpic3);
483
484        changepic(tmcpic3, tmppic);
485        tmcpic3->bgcol = -1;
486        free(tmppic); tmppic = NULL;
487        drawscreen(tmcpic3, 0, 0);
488}
489
490void screentmcedit(char* file)
491{
492        //TODO
493}
494
495void screentmcdelete(char* file)
496{
497        //TODO
498}
499
500void screentmcimdbsearch(char* file)
501{
502        //TODO
503}
504
505void screentmcinfo(char* file)
506{
507        //TODO
508}
509
510void screentmcdbmenu(char* file)
511{
512        int rcret = 0;
513        struct skin* tmcpic3 = getscreen("tmcpic3");
514        struct skin* listbox = getscreennode(tmcpic3, "listbox");
515        struct skin* edit = getscreennode(tmcpic3, "edit");
516        struct skin* delete = getscreennode(tmcpic3, "delete");
517        struct skin* imdbsearch = getscreennode(tmcpic3, "imdbsearch");
518        struct skin* info = getscreennode(tmcpic3, "imdbsearch");
519        char* tmppic = NULL;
520
521        tmppic = ostrcat(tmcpic3->pic, NULL, 0, 0);
522        changepic(tmcpic3, NULL);
523        tmcpic3->bgcol = 0;
524
525        edit->hidden = NO;
526        delete->hidden = NO;
527        imdbsearch->hidden = NO;
528        info->hidden = NO;
529
530        addscreenrc(tmcpic3, listbox);
531        drawscreen(tmcpic3, 0, 0);
532
533        while(1)
534        {
535                rcret = waitrc(tmcpic3, 0, 0);
536
537                if(rcret == getrcconfigint("rcexit", NULL)) break;
538
539                if(rcret == getrcconfigint("rcok", NULL) && listbox->select != NULL)
540                {
541                        if(ostrcmp(listbox->select->name, "edit") == 0)
542                                screentmcedit(file);
543                        if(ostrcmp(listbox->select->name, "delete") == 0)
544                                screentmcdelete(file);
545                        if(ostrcmp(listbox->select->name, "imdbsearch") == 0)
546                                screentmcimdbsearch(file);
547                        if(ostrcmp(listbox->select->name, "info") == 0)
548                                screentmcinfo(file);
549
550                        drawscreen(tmcpic3, 0, 0);
551                }
552        }
553
554        edit->hidden = YES;
555        delete->hidden = YES;
556        imdbsearch->hidden = YES;
557        info->hidden = YES;
558
559        delownerrc(tmcpic3);
560
561        changepic(tmcpic3, tmppic);
562        tmcpic3->bgcol = -1;
563        free(tmppic); tmppic = NULL;
564        drawscreen(tmcpic3, 0, 0);
565}
566
567int screentmcpicplay(char* picture)
568{
569        int rcret = 0, timeout = 0, ret = 0;
570        struct skin* picplay = getscreen("tmcpicplay");
571        struct skin* picname = getscreennode(picplay, "picname");
572        struct skin* pic = getscreennode(picplay, "pic");
573
574        timeout = getconfigint("tmcpictimeout", NULL) * 1000;
575        if(timeout == 0) timeout = 5000;
576
577        if(getconfigint("tmcpicname", NULL) == 1)
578                changetext(picname, picture);
579        else
580                changetext(picname, NULL);
581
582        if(getconfigint("tmcpicfull", NULL) == 1)
583        {
584                pic->picheight = 720;
585                pic->picwidth = 1280;
586        }
587        else
588        {
589                pic->picheight = 1;
590                pic->picwidth = 1;
591        }
592
593        changepic(pic, picture);
594
595        drawscreen(picplay, 0, 0);
596
597        while(1)
598        {
599                rcret = waitrc(picplay, timeout, 0);
600
601                if(rcret == getrcconfigint("rcexit", NULL))
602                {
603                        ret = 1;
604                        break;
605                }
606                if(rcret == getrcconfigint("rcok", NULL)) break;
607                if(rcret == RCTIMEOUT) break;
608        }
609
610        return ret;
611}
612
613void tmcsetbutton(int picplaytype, int audioplaytype)
614{
615        menu2[1] = "skin/tmcrandom.png";
616        menu2[3] = "skin/tmcone.png";
617        if(picplaytype == 1) menu2[3] = "skin/tmcone_act.png";
618        if(picplaytype == 2) menu2[1] = "skin/tmcrandom_act.png";
619       
620        menu4[1] = "skin/tmcrandom.png";
621        menu4[3] = "skin/tmcone.png";
622        if(audioplaytype == 1) menu4[3] = "skin/tmcone_act.png";
623        if(audioplaytype == 2) menu4[1] = "skin/tmcrandom_act.png";
624}
625
626void screentmcmenu()
627{
628        int rcret = 0, menuid = 0, active = 1;
629        int audioplaytype = 0, picplaytype = 0;
630        struct skin* tmcbg = getscreen("tmcbg");
631        struct skin* load = getscreen("loading");
632        struct skin* tmcmenutxt = getscreen("tmcmenutxt");
633        struct skin* tmcmenu1 = getscreen("tmcmenu1");
634        struct skin* tmcmenu2 = getscreen("tmcmenu2");
635        struct skin* tmcmenu3 = getscreen("tmcmenu3");
636        struct skin* tmcmenu4 = getscreen("tmcmenu4");
637        struct skin* tmcmenu5 = getscreen("tmcmenu5");
638        struct skin* tmcpictitle = getscreen("tmcpictitle");
639        struct skin* tmcpicstar = getscreen("tmcpicstar");
640        struct skin* tmcpic1 = getscreen("tmcpic1");
641        struct skin* tmcpic2 = getscreen("tmcpic2");
642        struct skin* tmcpic3 = getscreen("tmcpic3");
643        struct skin* tmcpic4 = getscreen("tmcpic4");
644        struct skin* tmcpic5 = getscreen("tmcpic5");
645        char* tmpstr = NULL;
646        char* tmcpictitlebg = NULL, *tmcpicstarbg = NULL;
647
648        setfbtransparent(255);
649
650        //checks
651        if(!file_exist(getconfig("mediadbpath", NULL)))
652        {
653                textbox(_("Message"), _("MediaDB Path not found!\nConfigure it in MediaDB Settings"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
654        }
655        else
656        {
657                if(!file_exist(getconfig("mediadbfile", NULL)))
658                        textbox(_("Message"), _("MediaDB not found!\nScan your HDD in TMC Settings"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
659        }
660
661        //TODO: TMDB and so on
662        if(getplugin("IMDb-API") == NULL && getplugin("IMDb") == NULL && getplugin("TMDb") == NULL)
663                textbox(_("Message"), _("IMDB Plugin not found!\nCan't get detail media infos\nPlease install it"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
664
665        drawscreen(load, 0, 0);
666        readmediadb(getconfig("mediadbfile", NULL), 0, 0);
667        mediadbfilterpos = NULL;
668
669        menu0pos = 0;
670        menu1pos = 0;
671        menu2pos = 0;
672        menu3pos = 0;
673        menu4pos = 0;
674
675        tmcsetbutton(picplaytype, audioplaytype);
676        tmcpicdel(tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
677
678        drawscreen(tmcbg, 0, 1);
679        drawscreen(tmcpic1, 0, 1);
680        drawscreen(tmcpic2, 0, 1);
681        drawscreen(tmcpic3, 0, 1);
682        drawscreen(tmcpic4, 0, 1);
683        drawscreen(tmcpic5, 0, 1);
684        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
685       
686        //save backgrounds
687        drawscreen(tmcpictitle, 2, 0);
688        drawscreen(tmcpicstar, 2, 0);
689        tmcpictitlebg = savescreen(tmcpictitle);
690        tmcpicstarbg = savescreen(tmcpicstar);
691
692        while(1)
693        {
694                rcret = waitrc(NULL, 0, 0);
695
696                if(menuid > 1 && (rcret == getrcconfigint("rcup", NULL) || rcret == getrcconfigint("rcdown", NULL)))
697                {
698                        if(active == 1)
699                                active = 0;
700                        else
701                                active = 1;
702
703                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
704                        continue;
705                }
706
707                if(rcret == getrcconfigint("rcexit", NULL))
708                {
709                        if(active == 1)
710                        {
711                                if(menuid == 0) break;
712                                menuid = 0;
713                                tmcpicdel(tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 1);
714
715                                tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
716                                continue;
717                        }
718                }
719
720                if(rcret == getrcconfigint("rcleft", NULL))
721                {
722                        if(active == 1)
723                                tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 1);
724                        else
725                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 1);
726                        continue;
727                }
728
729                if(rcret == getrcconfigint("rcright", NULL))
730                {
731                        if(active == 1)
732                                tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 2);
733                        else
734                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 2);
735                        continue;
736                }
737
738                if(rcret == getrcconfigint("rcmenu", NULL) && active == 1)
739                        screentmcdbmenu(tmcpic3->ret);
740
741                if(rcret == getrcconfigint("rcinfo", NULL) && active == 1)
742                        screentmcinfo(tmcpic3->ret);
743
744                if(rcret == getrcconfigint("rcok", NULL))
745                {
746                        if(active == 1)
747                        {
748                                if(ostrcmp("Exit", tmcmenutxt->ret) == 0)
749                                        break;
750                                else if(ostrcmp("Back", tmcmenutxt->ret) == 0)
751                                {
752                                        menuid = 0;
753                                        tmcpicdel(tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 1);
754                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
755                                }
756                                else if(ostrcmp("Settings", tmcmenutxt->ret) == 0) //mainmenu settings
757                                {
758                                        menuid = 1;
759                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
760                                }
761                                else if(menuid == 1 && ostrcmp("Scan", tmcmenutxt->ret) == 0)
762                                {
763                                        int scantype = getconfigint("tmcscan", NULL);
764
765                                        if(scantype == 0)
766                                                scantype = 100;
767                                        else
768                                                scantype--;
769
770                                        mediadbscan(NULL, scantype, 0);
771          screentmcdb();
772                                }
773                                else if(menuid == 1 && ostrcmp("Database Info", tmcmenutxt->ret) == 0)
774                                {
775                                        screentmcdb();
776                                }
777                                else if(menuid == 1 && ostrcmp("Main", tmcmenutxt->ret) == 0)
778                                {
779                                        screentmcsettings();
780                                }
781                                else if(ostrcmp("Picture", tmcmenutxt->ret) == 0) //mainmenu picture
782                                {
783                                        menuid = 2;
784                                        mediadbfilterpos = NULL;
785                                        createmediadbfilter(2, NULL, 0);
786                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
787                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
788                                }
789                                else if(menuid == 2 && ostrcmp("Category", tmcmenutxt->ret) == 0)
790                                {
791                                        tmpstr = screentmccategory(2, ".category");
792                                        if(tmpstr != NULL)
793                                        {
794                                                mediadbfilterpos = NULL;
795                                                createmediadbfilter(2, tmpstr, 4);
796                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
797                                        }
798                                        free(tmpstr); tmpstr = NULL;
799                                }
800                                else if(menuid == 2 && ostrcmp("A-Z", tmcmenutxt->ret) == 0)
801                                {
802                                        tmpstr = screentmccategory(2, ".az");
803                                        if(tmpstr != NULL)
804                                        {
805                                                mediadbfilterpos = NULL;
806                                                createmediadbfilter(2, tmpstr, 7);
807                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
808                                        }
809                                        free(tmpstr); tmpstr = NULL;
810                                }
811                                else if(menuid == 2 && ostrcmp("All", tmcmenutxt->ret) == 0)
812                                {
813                                        mediadbfilterpos = NULL;
814                                        createmediadbfilter(2, NULL, 0);
815                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
816                                }
817                                else if(menuid == 2 && ostrcmp("Random", tmcmenutxt->ret) == 0)
818                                {
819                                        if(picplaytype == 2)
820                                                picplaytype = 0;
821                                        else
822                                                picplaytype = 2;
823                                       
824                                        tmcsetbutton(picplaytype, audioplaytype);
825                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
826                                }
827                                else if(menuid == 2 && ostrcmp("Single", tmcmenutxt->ret) == 0)
828                                {
829                                        if(picplaytype == 1)
830                                                picplaytype = 0;
831                                        else
832                                                picplaytype = 1;
833                                               
834                                        tmcsetbutton(picplaytype, audioplaytype);
835                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
836                                }
837                                else if(ostrcmp("Video", tmcmenutxt->ret) == 0) //mainmenu video
838                                {
839                                        menuid = 3;
840                                        mediadbfilterpos = NULL;
841                                        createmediadbfilter(0, NULL, 0);
842                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
843                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
844                                }
845                                else if(menuid == 3 && ostrcmp("Genre", tmcmenutxt->ret) == 0)
846                                {
847                                        tmpstr = screentmccategory(0, ".genre");
848                                        if(tmpstr != NULL)
849                                        {
850                                                mediadbfilterpos = NULL;
851                                                createmediadbfilter(0, tmpstr, 6);
852                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
853                                        }
854                                        free(tmpstr); tmpstr = NULL;
855                                }
856                                else if(menuid == 3 && ostrcmp("Category", tmcmenutxt->ret) == 0)
857                                {
858                                        tmpstr = screentmccategory(0, ".category");
859                                        if(tmpstr != NULL)
860                                        {
861                                                mediadbfilterpos = NULL;
862                                                createmediadbfilter(0, tmpstr, 4);
863                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
864                                        }
865                                        free(tmpstr); tmpstr = NULL;
866                                }
867                                else if(menuid == 3 && ostrcmp("A-Z", tmcmenutxt->ret) == 0)
868                                {
869                                        tmpstr = screentmccategory(0, ".az");
870                                        if(tmpstr != NULL)
871                                        {
872                                                mediadbfilterpos = NULL;
873                                                createmediadbfilter(0, tmpstr, 7);
874                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
875                                        }
876                                        free(tmpstr); tmpstr = NULL;
877                                }
878                                else if(menuid == 3 && ostrcmp("All", tmcmenutxt->ret) == 0)
879                                {
880                                        mediadbfilterpos = NULL;
881                                        createmediadbfilter(0, NULL, 0);
882                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
883                                }
884                                else if(menuid == 3 && ostrcmp("Year", tmcmenutxt->ret) == 0)
885                                {
886                                        tmpstr = screentmccategory(0, ".year");
887                                        if(tmpstr != NULL)
888                                        {
889                                                mediadbfilterpos = NULL;
890                                                createmediadbfilter(0, tmpstr, 1);
891                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
892                                        }
893                                        free(tmpstr); tmpstr = NULL;
894                                }
895                                else if(menuid == 3 && ostrcmp("Director", tmcmenutxt->ret) == 0)
896                                {
897                                        tmpstr = screentmccategory(0, ".director");
898                                        if(tmpstr != NULL)
899                                        {
900                                                mediadbfilterpos = NULL;
901                                                createmediadbfilter(0, tmpstr, 2);
902                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
903                                        }
904                                        free(tmpstr); tmpstr = NULL;
905                                }
906                                else if(menuid == 3 && ostrcmp("Actors", tmcmenutxt->ret) == 0)
907                                {
908                                        tmpstr = screentmccategory(0, ".actors");
909                                        if(tmpstr != NULL)
910                                        {
911                                                mediadbfilterpos = NULL;
912                                                createmediadbfilter(0, tmpstr, 3);
913                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
914                                        }
915                                        free(tmpstr); tmpstr = NULL;
916                                }
917                                else if(menuid == 3 && ostrcmp("Rating", tmcmenutxt->ret) == 0)
918                                {
919                                        tmpstr = screentmccategory(0, ".rating");
920                                        if(tmpstr != NULL)
921                                        {
922                                                mediadbfilterpos = NULL;
923                                                createmediadbfilter(0, tmpstr, 5);
924                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
925                                        }
926                                        free(tmpstr); tmpstr = NULL;
927                                }
928                                else if(ostrcmp("Audio", tmcmenutxt->ret) == 0) //mainmenu audio
929                                {
930                                        menuid = 4;
931                                        mediadbfilterpos = NULL;
932                                        createmediadbfilter(1, NULL, 0);
933                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
934                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
935                                }
936                                else if(menuid == 4 && ostrcmp("Category", tmcmenutxt->ret) == 0)
937                                {
938                                        tmpstr = screentmccategory(1, ".category");
939                                        if(tmpstr != NULL)
940                                        {
941                                                mediadbfilterpos = NULL;
942                                                createmediadbfilter(1, tmpstr, 4);
943                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
944                                        }
945                                        free(tmpstr); tmpstr = NULL;
946                                }
947                                else if(menuid == 4 && ostrcmp("A-Z", tmcmenutxt->ret) == 0)
948                                {
949                                        tmpstr = screentmccategory(1, ".az");
950                                        if(tmpstr != NULL)
951                                        {
952                                                mediadbfilterpos = NULL;
953                                                createmediadbfilter(1, tmpstr, 7);
954                                                tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
955                                        }
956                                        free(tmpstr); tmpstr = NULL;
957                                }
958                                else if(menuid == 4 && ostrcmp("All", tmcmenutxt->ret) == 0)
959                                {
960                                        mediadbfilterpos = NULL;
961                                        createmediadbfilter(1, NULL, 0);
962                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
963                                }
964                                else if(menuid == 4 && ostrcmp("Random", tmcmenutxt->ret) == 0)
965                                {
966                                        if(audioplaytype == 2)
967                                                audioplaytype = 0;
968                                        else
969                                                audioplaytype = 2;
970                                               
971                                        tmcsetbutton(picplaytype, audioplaytype);
972                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
973                                }
974                                else if(menuid == 4 && ostrcmp("Single", tmcmenutxt->ret) == 0)
975                                {
976                                        if(audioplaytype == 1)
977                                                audioplaytype = 0;
978                                        else
979                                                audioplaytype = 1;
980                                               
981                                        tmcsetbutton(picplaytype, audioplaytype);
982                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
983                                }
984
985                                continue;
986                        }
987                       
988                        if(active == 0 && tmcpic3->ret != NULL)
989                        {
990                                if(menuid == 3)
991                                {
992                                        drawscreen(skin, 0, 0);
993
994                                        screenplay(tmcpic3->ret, 0, 0);
995
996                                        drawscreen(tmcbg, 0, 1);
997                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
998                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
999                                }
1000                                if(menuid == 4)
1001                                {
1002                                        int audioret = 0;
1003                                        struct mediadbfilter* mfilter = NULL;
1004
1005                                        drawscreen(skin, 0, 0);
1006                                        mfilter = mediadbfilterpos;
1007
1008                                        while(mfilter != NULL && mediadbfilter != NULL)
1009                                        {
1010                                                if(mfilter->node != NULL)
1011                                                {
1012                                                        audioret = screenplay(mfilter->node->file, 0, 0);
1013                                                        mediadbfilterpos = mfilter;
1014                                                }
1015                                                if(audioret == 1) break;
1016
1017                                                if(audioplaytype == 1) //single
1018                                                        break;
1019                                                else if(audioplaytype == 2) //random
1020                                                        mfilter = getmediadbfilterrandom(getmediadbfiltercount());
1021                                                else //next
1022                                                        mfilter = mfilter->next;
1023
1024                                                if(mfilter == NULL) mfilter = mediadbfilter;
1025                                        }
1026
1027                                        drawscreen(tmcbg, 0, 1);
1028                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
1029                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
1030                                }
1031                                else if(menuid == 2)
1032                                {
1033                                        int picret = 0;
1034                                        struct mediadbfilter* mfilter = NULL;
1035
1036                                        drawscreen(skin, 0, 0);
1037                                        mfilter = mediadbfilterpos;
1038                                       
1039                                        while(mfilter != NULL && mediadbfilter != NULL)
1040                                        {
1041                                                if(mfilter->node != NULL)
1042                                                {
1043                                                        picret = screentmcpicplay(mfilter->node->file);
1044                                                        mediadbfilterpos = mfilter;
1045                                                }
1046                                                if(picret == 1) break;
1047
1048                                                if(picplaytype == 1) //single
1049                                                        break;
1050                                                else if(picplaytype == 2) //random
1051                                                        mfilter = getmediadbfilterrandom(getmediadbfiltercount());
1052                                                else //next
1053                                                        mfilter = mfilter->next;
1054
1055                                                if(mfilter == NULL) mfilter = mediadbfilter;
1056                                        }
1057
1058                                        drawscreen(tmcbg, 0, 1);
1059                                        tmcpicscroll(menuid, tmcpictitle, tmcpicstar, tmcpic1, tmcpic2, tmcpic3, tmcpic4, tmcpic5, tmcpictitlebg, tmcpicstarbg, 0);
1060                                        tmcmenuscroll(menuid, active, tmcmenutxt, tmcmenu1, tmcmenu2, tmcmenu3, tmcmenu4, tmcmenu5, 0);
1061                                }
1062                        }
1063                }
1064        }
1065
1066        free(tmcpictitlebg); tmcpictitlebg = NULL;
1067        free(tmcpicstarbg); tmcpicstarbg = NULL;
1068        freemediadbfilter(0);
1069        if(status.mediadbthread == NULL)
1070                freemediadb(0);
1071        clearscreen(tmcbg);
1072        setosdtransparent(getskinconfigint("osdtransparent", NULL));
1073}
1074
1075#endif
Note: See TracBrowser for help on using the repository browser.