From: Mario Date: Wed, 18 Dec 2013 06:43:48 +0000 (+1100) Subject: Add support for subdirectories in demo list X-Git-Tag: xonotic-v0.8.0~139^2~1^2~87 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=1d11599e63441426a61318f794affc265930cf3b;p=xonotic%2Fxonotic-data.pk3dir.git Add support for subdirectories in demo list --- diff --git a/qcsrc/menu/xonotic/demolist.c b/qcsrc/menu/xonotic/demolist.c index ee8cf6a4f..23d21b18a 100644 --- a/qcsrc/menu/xonotic/demolist.c +++ b/qcsrc/menu/xonotic/demolist.c @@ -50,37 +50,58 @@ void XonoticDemoList_configureXonoticDemoList(entity me) string XonoticDemoList_demoName(entity me, float i ) { string s; - s = search_getfilename(me.listDemo, i); + s = bufstr_get(me.listDemo, i); s = substring(s, 6, strlen(s) - 6 - 4); // demos/, .dem return s; } - -void XonoticDemoList_getDemos(entity me) +// if subdir is TRUE look in subdirectories too (1 level) +void getDemos_for_ext(entity me, string ext, float subdir) { string s; - + if (subdir) + s="demos/*/"; + else + s="demos/"; if(me.filterString) - //subdirectory in filterString allowed - s=strcat("demos/*", me.filterString, "*.dem"); + s=strcat(s, me.filterString, ext); else - s="demos/*.dem"; - - //dprint("Search demos with the pattern ", s, "\n"); - if(me.listDemo >= 0) - search_end(me.listDemo); + s=strcat(s, "*", ext); + + float list, i, n; + list = search_begin(s, FALSE, TRUE); + if(list >= 0) + { + n = search_getsize(list); + for(i = 0; i < n; ++i) + bufstr_add(me.listDemo, search_getfilename(list, i), TRUE); + search_end(list); + } - me.listDemo = search_begin(s, FALSE, TRUE); + if (subdir) + getDemos_for_ext(me, ext, FALSE); +} - if(me.listDemo < 0) - me.nItems=0; - else - me.nItems=search_getsize(me.listDemo); +void XonoticDemoList_getDemos(entity me) +{ + if (me.listDemo >= 0) + buf_del(me.listDemo); + me.listDemo = buf_create(); + if (me.listDemo < 0) + { + me.nItems = 0; + return; + } + getDemos_for_ext(me, ".dem", TRUE); + me.nItems = buf_getsize(me.listDemo); + if(me.nItems > 0) + buf_sort(me.listDemo, 128, FALSE); } void XonoticDemoList_destroy(entity me) { - search_end(me.listDemo); + if(me.nItems > 0) + buf_del(me.listDemo); } void XonoticDemoList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) @@ -118,7 +139,12 @@ void DemoList_Filter_Change(entity box, entity me) strunzone(me.filterString); if(box.text != "") - me.filterString = strzone(box.text); + { + if (strstrofs(box.text, "*", 0) >= 0 || strstrofs(box.text, "?", 0) >= 0) + me.filterString = strzone(box.text); + else + me.filterString = strzone(strcat("*", box.text, "*")); + } else me.filterString = string_null;