source: titan/titan/filelist.h @ 16991

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

[titan] add random funktion

File size: 19.4 KB
Line 
1#ifndef FILELIST_H
2#define FILELIST_H
3
4int filelistflt(char* filter, char* name)
5{
6        int ret = 1, count = 0;
7
8        char* tmpmatch = filter;
9        char* tmpmatch1 = filter;
10        char* tmpchar = NULL;
11
12        if(filter != NULL && name != NULL)
13        {
14                tmpmatch--;
15                do
16                {
17                        tmpmatch++;
18                        if(*tmpmatch == ' ' || *tmpmatch == '\0')
19                        {
20                                tmpchar = strndup(tmpmatch1, count);
21                                if(tmpchar != NULL)
22                                {
23                                        if(tmpchar[0] == '.') //filter without glob check
24                                        {
25                                                if(ostrrstrcase(name, tmpchar, -1, 1) != NULL)
26                                                        ret = 0;
27                                        }
28                                        else
29                                                ret = fnmatch(tmpchar, name, FNM_CASEFOLD);
30                                        free(tmpchar); tmpchar = NULL;
31                                        if(ret == 0) return 0;
32                                }
33                                tmpmatch1 = tmpmatch + 1;
34                                count = -1;
35                        }
36                        count++;
37                }
38                while(*tmpmatch != '\0');
39        }
40
41        return 1;
42}
43
44int filelistfilter(struct skin* node, char* name)
45{
46        if(node == NULL) return 1;
47
48        return filelistflt(node->mask, name);
49}
50
51//int sizesort64(const void* v1, const void* v2)
52int sizesort64(const struct dirent64** v1, const struct dirent64** v2)
53{
54        char* tmpstr = NULL, *rpath = NULL;
55        off64_t s1, s2;
56
57        tmpstr = createpath(status.tmp, (char*) (*v1)->d_name);
58        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v1)->d_name);
59        rpath = realpath(tmpstr, NULL);
60        s1 = getfilesize(rpath);
61        free(tmpstr); tmpstr = NULL;
62        free(rpath); rpath = NULL;
63
64        tmpstr = createpath(status.tmp, (char*) (*v2)->d_name);
65        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v2)->d_name);
66        rpath = realpath(tmpstr, NULL);
67        s2 = getfilesize(rpath);
68        free(tmpstr); tmpstr = NULL;
69        free(rpath); rpath = NULL;
70
71        if(s1 > s2) return 1;
72        if(s1 < s2) return -1;
73        return 0;
74}
75
76
77//int rsizesort64(const void* v1, const void* v2)
78int rsizesort64(const struct dirent64** v1, const struct dirent64** v2)
79{
80        char* tmpstr = NULL, *rpath = NULL;
81        off64_t s1, s2;
82
83        tmpstr = createpath(status.tmp, (char*) (*v1)->d_name);
84        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v1)->d_name);
85        rpath = realpath(tmpstr, NULL);
86        s1 = getfilesize(rpath);
87        free(tmpstr); tmpstr = NULL;
88        free(rpath); rpath = NULL;
89
90        tmpstr = createpath(status.tmp, (char*) (*v2)->d_name);
91        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v2)->d_name);
92        rpath = realpath(tmpstr, NULL);
93        s2 = getfilesize(rpath);
94        free(tmpstr); tmpstr = NULL;
95        free(rpath); rpath = NULL;
96
97        if(s1 > s2) return -1;
98        if(s1 < s2) return 1;
99        return 0;
100}
101
102//int datesort64(const void* v1, const void* v2)
103int datesort64(const struct dirent64** v1, const struct dirent64** v2)
104{
105        char* tmpstr = NULL, *rpath = NULL;
106        time_t t1, t2;
107
108        tmpstr = createpath(status.tmp, (char*) (*v1)->d_name);
109        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v1)->d_name);
110        rpath = realpath(tmpstr, NULL);
111        t1 = getfiletime(rpath, 0);
112        free(tmpstr); tmpstr = NULL;
113        free(rpath); rpath = NULL;
114
115        tmpstr = createpath(status.tmp, (char*) (*v2)->d_name);
116        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v2)->d_name);
117        rpath = realpath(tmpstr, NULL);
118        t2 = getfiletime(rpath, 0);
119        free(tmpstr); tmpstr = NULL;
120        free(rpath); rpath = NULL;
121
122        if(t1 > t2) return -1;
123        if(t1 < t2) return 1;
124        return 0;
125}
126
127//int rdatesort64(const void* v1, const void* v2)
128int rdatesort64(const struct dirent64** v1, const struct dirent64** v2)
129{
130        char* tmpstr = NULL, *rpath = NULL;
131        time_t t1, t2;
132
133        tmpstr = createpath(status.tmp, (char*) (*v1)->d_name);
134        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v1)->d_name);
135        rpath = realpath(tmpstr, NULL);
136        t1 = getfiletime(rpath, 0);
137        free(tmpstr); tmpstr = NULL;
138        free(rpath); rpath = NULL;
139
140        tmpstr = createpath(status.tmp, (char*) (*v2)->d_name);
141        //tmpstr = createpath(status.tmp, (char*) (*(const struct dirent64**)v2)->d_name);
142        rpath = realpath(tmpstr, NULL);
143        t2 = getfiletime(rpath, 0);
144        free(tmpstr); tmpstr = NULL;
145        free(rpath); rpath = NULL;
146
147        if(t1 > t2) return 1;
148        if(t1 < t2) return -1;
149        return 0;
150}
151
152//int ralphasort64(const void* v1, const void* v2)
153int ralphasort64(const struct dirent64** v1, const struct dirent64** v2)
154{
155        int ret = 0;
156
157        ret = strcoll((*v1)->d_name, (*v2)->d_name);
158        //ret = strcoll((*(const struct dirent64**)v1)->d_name, (*(const struct dirent64**)v2)->d_name);
159
160        if(ret > 0) return -1;
161        if(ret < 0) return 1;
162        return 0;
163}
164
165//view 0: deaktiv (normal filelist)
166//view 1: big (list)
167//view 2: cover (grid)
168//view 3: fullcover (list)
169//view 4: default (liste + size)
170//view 5: details (liste + date)
171//view 1000: not used here see inputhelp.h
172int createfilelist(struct skin* screen, struct skin* node, int view)
173{
174        debug(1000, "in");
175        struct dirent64 **filelist;
176
177        int count, tmpcount, i = 0, gridbr = 0, posx = 0, pagecount = 0, sumcount = 0;
178        struct skin *child = node, *oldchild = NULL, *parentdir = NULL;
179        char *tmpstr = NULL;
180        char *rpath = NULL;
181
182        int (*cmpfunc)(const struct dirent64**, const struct dirent64**);
183        //int (*cmpfunc)(const void*, const void*);
184
185        if(node->input == NULL)
186        {
187                debug(1000, "out -> NULL detect");
188                return 1;
189        }
190
191        if(view == 2)
192                node->type |= GRID;
193        else
194                node->type &= ~(GRID);
195       
196
197        status.tmp = node->input;
198        switch(getconfigint("dirsort", NULL))
199        {
200                case 1: cmpfunc = ralphasort64; break;
201                case 2: cmpfunc = sizesort64; break;
202                case 3: cmpfunc = rsizesort64; break;
203                case 4: cmpfunc = datesort64; break;
204                case 5: cmpfunc = rdatesort64; break;
205                default: cmpfunc = alphasort64; break;
206        }
207
208        count = scandir64(node->input , &filelist, 0, cmpfunc);
209        if(count < 0)
210        {
211                if(getconfig("failbackpath", NULL) != NULL)
212                {
213                        perr("scandir");
214                        count = scandir64(getconfig("failbackpath", NULL) , &filelist, 0, cmpfunc);
215                        changeinput(node, getconfig("failbackpath", NULL));
216                }
217                if(count < 0)
218                {
219                        perr("scandir");
220                        count = scandir64("/" , &filelist, 0, cmpfunc);
221                        changeinput(node, "/");
222                }
223                if(count < 0)
224                        return 1;
225        }
226
227        status.tmp = NULL;
228        parentdir = addscreennode(screen, NULL, child);
229
230        if(view == 2 && parentdir != NULL)
231        {
232                sumcount++;
233                pagecount++;
234                debug(913, "pdir: pagecount: %d", pagecount);
235                debug(913, "pdir: sumcount: %d", sumcount);
236
237                parentdir->picheight = 180;
238                parentdir->picwidth = 180;                             
239                parentdir->height = 230;
240                parentdir->width = 370;
241                parentdir->prozwidth = 0;
242                //parentdir->bgcol = 0xffffff;
243                parentdir->bgspace = 1;
244                parentdir->vspace = 10;
245                parentdir->hspace = 10;
246                parentdir->posx = posx;
247                //parentdir->fontcol = 0x0000ff;
248                parentdir->halign = CENTER;
249                parentdir->valign = TEXTBOTTOM;
250                posx += parentdir->width;
251               
252                tmpstr = ostrcat(tmpstr, "skin/ext_grid_changedir.png", 1, 0);
253                debug(913, "picpath: %s", tmpstr);
254                changepic(parentdir, tmpstr);
255                free(tmpstr); tmpstr = NULL;
256
257                parentdir->type = GRIDBR;
258                gridbr++;
259        }
260
261//      if(view == 2 || view == 3)
262//              m_lock(&status.mediadbmutex, 17);
263       
264        child = parentdir;
265        tmpcount = count;
266        while(tmpcount--)
267        {
268                //check if link is a dir or wenn unknown (rarfs ...)
269                if(filelist[i]->d_type == DT_LNK || filelist[i]->d_type == DT_UNKNOWN)
270                {
271                        tmpstr = createpath(node->input, filelist[i]->d_name);
272                        if(isdir(tmpstr) == 1)
273                                filelist[i]->d_type = DT_DIR;
274       
275                        free(tmpstr); tmpstr = NULL;
276                }
277
278                if(filelist[i]->d_type == DT_DIR && ostrcmp(filelist[i]->d_name, ".") != 0)
279                {
280                        if(ostrcmp(filelist[i]->d_name, "..") == 0)
281                        {
282                                oldchild = child;
283                                child = parentdir;
284                        }
285                        else
286                                child = addscreennode(screen, NULL, child);
287                        if(child != NULL)
288                        {
289                                if(view == 2)
290                                {
291                                        if(gridbr == 0) child->type = GRIDBR;
292
293                                        if(child != parentdir)
294                                        {
295                                                sumcount++;
296                                                pagecount++;
297                                                debug(913, "dir: pagecount: %d", pagecount);
298                                                debug(913, "dir: sumcount: %d", sumcount);
299                                               
300                                                debug(913, "filename: %s", filelist[i]->d_name);
301                                                child->picheight = 180;
302                                                child->picwidth = 180;
303                                                               
304                                                child->height = 230;
305                                                child->width = 370;
306                                                child->prozwidth = 0;
307                                                //child->bgcol = 0xffffff;
308                                                child->bgspace = 1;
309                                                child->vspace = 10;
310                                                child->hspace = 10;
311                                                //child->fontcol = 0x0000ff;
312                                                child->halign = CENTER;
313                                                child->valign = TEXTBOTTOM;
314       
315                                                child->posx = posx;
316                                                posx += child->width;
317
318                                                char* currentdir = getcurrentdir(node->input);
319
320                                                if(ostrcmp(filelist[i]->d_name, "autofs") == 0)
321                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_autofs.png", 1, 0);
322                                                else if(ostrcmp(filelist[i]->d_name, "hdd") == 0)
323                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_harddisk.png", 1, 0);
324                                                else if((ostrcmp(filelist[i]->d_name, "usb") == 0) || (ostrcmp(currentdir, "usb") == 0))
325                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_usb.png", 1, 0);
326                                                else if((ostrcmp(filelist[i]->d_name, "net") == 0) || (ostrcmp(currentdir, "net") == 0))
327                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_network.png", 1, 0);
328                                                else
329                                                {
330                                                        char* shortname = ostrcat(filelist[i]->d_name, NULL, 0, 0);
331                                                        string_tolower(shortname);
332                                                        string_removechar(shortname);
333                                                        strstrip(shortname);
334
335                                                        tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
336                                                        tmpstr = ostrcat(tmpstr, "/imdbfolder/", 1, 0);                                                                                                                                                 
337                                                        tmpstr = ostrcat(tmpstr, shortname, 1, 0);
338                                                        tmpstr = ostrcat(tmpstr, ".png", 1, 0);
339                                                        free(shortname); shortname = NULL;
340                                                                                                       
341                                                        if(!file_exist(tmpstr))
342                                                        {
343                                                                free(tmpstr); tmpstr = NULL;
344                                                                tmpstr = ostrcat(tmpstr, "skin/ext_grid_directory.png", 1, 0);
345                                                        }
346                                                }
347
348                                                free(currentdir); currentdir = NULL;
349
350                                                if(tmpstr != NULL)
351                                                {
352                                                        debug(913, "picpath: %s", tmpstr);
353                                                        debug(913, "dir: change pic");
354                                                        changepic(child, tmpstr);
355                                                        free(tmpstr); tmpstr = NULL;
356                                                }                                       
357                                                gridbr++;
358                                        }
359                                        if(gridbr >= 3)
360                                        {
361                                                gridbr = 0;
362                                                posx = 0;
363                                        }
364                                }                       
365                                else                           
366                                {
367                                        debug(913, "picpath: %s", node->pic);
368                                        if(node->pic != NULL)
369                                                changepic(child, node->pic);
370                                }
371                                changetext(child, filelist[i]->d_name);
372                                changename(child, filelist[i]->d_name);
373                                child->parentpointer = node;
374                                child->bordercol = node->bordercol;
375
376                                if(view != 2)
377                                {
378                                        child->valign = MIDDLE;
379                                        child->width = 100;                                                                                                                                     
380                                        child->prozwidth = 1;
381                                        child->height = node->fontsize + 2 + (node->bordersize * 2);
382                                        child->textposx = node->textposx;                               
383                                }
384                                else
385                                        child->textposx = 1;
386
387                                child->del = FILELISTDELMARK;
388                                tmpstr = createpath(node->input, child->text);
389                                changeinput(child, tmpstr);
390                                free(tmpstr); tmpstr = NULL;
391
392                                if(view > 3)
393                                {
394                                        child->filelist = (struct filelist*)calloc(1, sizeof(struct filelist));
395                                        if(child->filelist == NULL)
396                                        {
397                                                err("no mem");
398                                                continue;
399                                        }
400                                        child->filelist->type = filelist[i]->d_type;
401                                        child->filelist->view = view;
402
403                                        tmpstr = createpath(node->input, filelist[i]->d_name);
404                                        rpath = realpath(tmpstr, NULL);
405                                        if(view == 4) child->filelist->size = getfilesize(rpath);
406                                        else if(view == 5) child->filelist->date = getfiletime(rpath, 0);
407                                        free(tmpstr); tmpstr = NULL;
408                                        free(rpath); rpath = NULL;
409                                }
410                        }
411                        if(parentdir == child)
412                                child = oldchild;
413
414                }
415                i++;
416        }
417
418        tmpcount = count;
419        i=0;
420        while(tmpcount--)
421        {
422                if(filelist[i]->d_type != DT_DIR)
423                {
424                        if(filelistfilter(node, filelist[i]->d_name) == 0)
425                        {
426                                child = addscreennode(screen, NULL, child);
427                                if(child != NULL)
428                                {
429                                        debug(913, "filename: %s", filelist[i]->d_name);
430                                        if(view == 2)
431                                        {
432                                                sumcount++;
433                                                pagecount++;
434                                                debug(913, "files: pagecount: %d", pagecount);
435                                                debug(913, "files: sumcount: %d", sumcount);
436
437                                                if(gridbr == 0) child->type = GRIDBR;
438       
439                                                child->picheight = 170;
440                                                child->picwidth = 140;
441                                                child->height = 230;
442                                                child->width = 370;
443                                                child->prozwidth = 0;
444                                                //child->bgcol = 0xffffff;
445                                                child->bgspace = 1;
446                                                child->vspace = 10;
447                                                child->hspace = 10;
448                                                //child->fontcol = 0x0000ff;
449                                                child->halign = CENTER;
450                                                child->valign = TEXTBOTTOM;
451       
452                                                child->posx = posx;
453                                                posx += child->width;
454
455                                                if(cmpfilenameext(filelist[i]->d_name, ".png") == 0)
456                                                {
457                                                        tmpstr = ostrcat(createpath(node->input, "/"), filelist[i]->d_name, 1, 0);
458//                                                      child->picheight = 210;
459//                                                      child->picwidth = 350;
460                                                        child->picwidth = 1;
461                                                        child->picheight = 1;
462                                                }
463                                                else if(cmpfilenameext(filelist[i]->d_name, ".jpg") == 0)
464                                                {
465                                                        if(status.thumbthread != NULL)
466                                                        {
467                                                                //check if thumb exists
468                                                                tmpstr = checkthumb(node->input, filelist[i]->d_name);
469                                                                if(tmpstr == NULL)
470                                                                {
471                                                                        addqueue(101, (void*)node->input, strlen(node->input) + 1, (void*)filelist[i]->d_name, strlen(filelist[i]->d_name) + 1, 0, NULL);
472                                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_dummy.png", 1, 0);
473                                                                        child->picheight = 180;
474                                                                        child->picwidth = 180;
475                                                                }
476                                                                else
477                                                                {
478                                                                        child->picwidth = 1;
479                                                                        child->picheight = 1;
480                                                                }
481                                                        }
482                                                }
483                                                else if(cmpfilenameext(filelist[i]->d_name, ".iso") == 0)
484                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_iso.png", 1, 0);
485                                                else if(cmpfilenameext(filelist[i]->d_name, ".img") == 0)
486                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_img.png", 1, 0);
487                                                else if(cmpfilenameext(filelist[i]->d_name, ".rar") == 0)
488                                                        tmpstr = ostrcat(tmpstr, "skin/ext_grid_rar.png", 1, 0);
489                                                else
490                                                {
491                                                        int fast = 0;
492                                                        if(fast == 1)
493                                                                tmpstr = ostrcat(tmpstr, changefilenameext(filelist[i]->d_name, ".jpg"), 1, 1);
494                                                        else
495                                                        {                                               
496//                                                              free(tmpstr), tmpstr = NULL;
497//                                                              tmpstr = ostrcat(node->input, "/", 0, 0);
498//                                                              tmpstr = ostrcat(tmpstr, filelist[i]->d_name, 1, 0);                                                           
499//                                                              struct mediadb* mnode = getmediadb(tmpstr, 0);
500                                                               
501                                                                struct mediadb* mnode = getmediadb(node->input, filelist[i]->d_name, 0);
502                                                                free(tmpstr), tmpstr = NULL;
503                                                                if(mnode != NULL)
504                                                                {                                                                       
505                                                                        if(mnode->title != NULL)
506                                                                        {
507                                                                                tmpstr = ostrcat(tmpstr, mnode->title, 1, 0);
508                                                                                tmpstr = ostrcat(tmpstr, " (", 1, 0);                                                                   
509                                                                                       
510                                                                                char* tmpstr1 = NULL;
511                                                                                tmpstr1 = oregex(".*(cd[0-9]{1,3}).*", filelist[i]->d_name);
512                                                                               
513                                                                                if(tmpstr1 != NULL)
514                                                                                {
515                                                                                        tmpstr = ostrcat(tmpstr, tmpstr1, 1, 0);
516                                                                                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
517                                                                                }
518               
519                                                                                tmpstr = ostrcat(tmpstr, getfilenameext(filelist[i]->d_name), 1, 1);
520                                                                                tmpstr = ostrcat(tmpstr, ")", 1, 0);
521                                                                                       
522                                                                                changetext(child, tmpstr);
523                                                                                free(tmpstr), tmpstr = NULL;
524                                                                                free(tmpstr1), tmpstr1 = NULL;
525                                                                        }
526                                                                        else
527                                                                                changetext(child, filelist[i]->d_name);
528
529                                                                        if(mnode->id != NULL)
530                                                                        {
531                                                                                tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
532                                                                                tmpstr = ostrcat(tmpstr, "/", 1, 0);                                                                                                                                                   
533                                                                                tmpstr = ostrcat(tmpstr, mnode->id, 1, 0);
534                                                                                tmpstr = ostrcat(tmpstr, "_thumb.jpg", 1, 0);
535                                                                        }
536
537                                                                }
538                                                                else
539                                                                        changetext(child, filelist[i]->d_name);                                                                                                                         
540                                                        }
541                                                       
542                                                        if(!file_exist(tmpstr))
543                                                        {
544                                                                free(tmpstr); tmpstr = NULL;
545                                                                child->picheight = 180;
546                                                                child->picwidth = 180;
547                                                                tmpstr = ostrcat(tmpstr, "skin/ext_grid_dummy.png", 1, 0);
548                                                        }
549                                                }
550                                                debug(913, "picpath: %s", tmpstr);
551                                                if(tmpstr != NULL)
552                                                {
553                                                        debug(913, "files: change pic");
554                                                        changepic(child, tmpstr);
555                                                        free(tmpstr); tmpstr = NULL;
556                                                }
557                                       
558                                                gridbr++;
559                                                if(gridbr >= 3)
560                                                {
561                                                        gridbr = 0;
562                                                        posx = 0;
563                                                }
564                                        }
565                                        else
566                                        {
567                                                tmpstr = ostrcat(tmpstr, "skin/ext_", 1, 0);
568                                                tmpstr = ostrcat(tmpstr, string_tolower(getfilenameext(filelist[i]->d_name)), 1, 1);
569                                                tmpstr = ostrcat(tmpstr, ".png", 1, 0);
570                                                debug(913, "picpath: %s", tmpstr);
571                                                if(tmpstr != NULL)
572                                                        changepic(child, tmpstr);
573                                                free(tmpstr); tmpstr = NULL;
574                                        }
575
576                                        child->bordercol = node->bordercol;
577                                        if(view != 2)
578                                        {
579                                                child->valign = MIDDLE;
580                                                child->width = 100;
581                                                child->prozwidth = 1;
582                                                child->height = node->fontsize + 2 + (node->bordersize * 2);
583                                                child->textposx = node->textposx;                       
584                                        }
585                                        else
586                                                child->textposx = 1;
587
588                                        if(view != 2)
589                                                changetext(child, filelist[i]->d_name);
590                                        changename(child, filelist[i]->d_name);
591                                       
592                                        child->parentpointer = node;
593
594                                        child->del = FILELISTDELMARK;
595                                        changeinput(child, NULL);
596
597                                        if(view > 3)
598                                        {
599                                                child->filelist = (struct filelist*)calloc(1, sizeof(struct filelist));
600                                                if(child->filelist == NULL)
601                                                {
602                                                        err("no mem");
603                                                        continue;
604                                                }
605                                                child->filelist->type = filelist[i]->d_type;
606                                                child->filelist->view = view;
607
608                                                tmpstr = createpath(node->input, filelist[i]->d_name);
609                                                rpath = realpath(tmpstr, NULL);
610                                                if(view == 4) child->filelist->size = getfilesize(rpath);
611                                                else if(view == 5) child->filelist->date = getfiletime(rpath, 0);
612                                                free(rpath); rpath = NULL;
613                                                free(tmpstr); tmpstr = NULL;
614                                        }
615                                        if(view == 3)
616                                        {
617//                                              tmpstr = ostrcat(node->input, "/", 0, 0);
618//                                              tmpstr = ostrcat(tmpstr, filelist[i]->d_name, 1, 0);                                                           
619
620//                                              struct mediadb* mnode = getmediadb(tmpstr, 0);
621                                                struct mediadb* mnode = getmediadb(node->input, filelist[i]->d_name, 0);
622
623//                                              free(tmpstr), tmpstr = NULL;
624                                                if(mnode != NULL)
625                                                {
626                                                        if(mnode->title != NULL)
627                                                        {
628                                                                tmpstr = ostrcat(tmpstr, mnode->title, 1, 0);
629                                                                tmpstr = ostrcat(tmpstr, " (", 1, 0);                                                                   
630                                                                       
631                                                                char* tmpstr1 = NULL;
632                                                                tmpstr1 = oregex(".*(cd[0-9]{1,3}).*", filelist[i]->d_name);
633                                                               
634                                                                if(tmpstr1 != NULL)
635                                                                {
636                                                                        tmpstr = ostrcat(tmpstr, tmpstr1, 1, 0);
637                                                                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
638                                                                }
639
640                                                                tmpstr = ostrcat(tmpstr, getfilenameext(filelist[i]->d_name), 1, 1);
641                                                                tmpstr = ostrcat(tmpstr, ")", 1, 0);
642                                                                       
643                                                                changetext(child, tmpstr);
644                                                                free(tmpstr), tmpstr = NULL;
645                                                                free(tmpstr1), tmpstr1 = NULL;
646                                                        }
647                                                        else
648                                                                changetext(child, filelist[i]->d_name);
649                                                }
650                                        }
651                                }
652                        }
653                }
654                free(filelist[i]);
655                i++;
656        }
657
658//      if(view == 2 || view == 3)
659//              m_unlock(&status.mediadbmutex, 17);     
660/*
661        for (i = 0; i <= pagecount; i++)
662        {
663                printf("delmarkedpic=%d\n", i + 1000);
664                delmarkedpic(i + 1000);
665        }
666*/
667        free(filelist);
668        debug(1000, "out");
669        return 0;
670}
671
672void getfilelist(struct skin* input, struct skin* filelistpath, struct skin* filelist, char* path, char* filemask, int tmpview, char* selection)
673{
674        debug(1000, "in");
675        char* tmpstr = NULL;
676
677        if(path == NULL || strlen(path) == 0 || !isdir(path))
678                tmpstr = strdup("/");
679        else
680                tmpstr = strdup(path);
681
682        filelist->aktline = 0;
683        filelist->aktpage = 0;
684
685        if(filemask == NULL)
686                changemask(filelist, "*");
687        else
688                changemask(filelist, filemask);
689
690        changeinput(filelist, tmpstr);
691        changetext(filelistpath, filelist->input);
692        free(tmpstr); tmpstr = NULL;
693
694        tmpstr = ostrcat(selection, NULL, 0, 0);
695
696        delmarkedscreennodes(input, FILELISTDELMARK);
697
698        if (tmpview == -1)
699                createfilelist(input, filelist, 0);
700        else
701                createfilelist(input, filelist, tmpview);
702
703        if(tmpstr != NULL)
704                setlistboxselection(filelist, tmpstr);
705        free(tmpstr); tmpstr = NULL;
706
707        drawscreen(input, 0, 0);
708        debug(1000, "out");
709}
710
711void getfilelistmax(struct skin* filelist, int* maxdirs, int* maxfiles)
712{
713        struct skin* node = filelist;
714
715        while(node != NULL)
716        {
717                if(node->del == FILELISTDELMARK)
718                {
719                        if(node->input != NULL)
720                                (*maxdirs)++;
721                        else
722                                (*maxfiles)++;
723                }
724                node = node->next;
725        }
726}
727
728struct skin* getfilelistrandom(struct skin* filelist, int maxdirs, int maxfiles)
729{
730        int count = 0;
731        struct skin* node = filelist;
732       
733        if(maxfiles < 1) return NULL;
734
735        int r = getrandom(maxfiles);
736        r++;
737
738        while(node != NULL)
739        {
740                if(node->del == FILELISTDELMARK && node->input == NULL)
741                {
742                        count++;
743                        if(count == r) break;
744                }
745
746                node = node->next;
747        }
748
749        return node;
750}
751
752#endif
Note: See TracBrowser for help on using the repository browser.