Skip to content
Snippets Groups Projects
Commit 939d7e6e authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Add options to sort directories by file size (ascending or descending)

Size is indexed, so might as well sort by it. This does have an issue with files >= 4GB in length however, so I'm looking at that next.
parent 8fe69227
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #2911 failed
...@@ -305,6 +305,22 @@ static int file_compare_date_d(const void* v1, const void* v2) ...@@ -305,6 +305,22 @@ static int file_compare_date_d(const void* v1, const void* v2)
return f2->hdr.when_imported.time - f1->hdr.when_imported.time; return f2->hdr.when_imported.time - f1->hdr.when_imported.time;
} }
static int file_compare_size_a(const void* v1, const void* v2)
{
file_t* f1 = (file_t*)v1;
file_t* f2 = (file_t*)v2;
return f1->idx.size - f2->idx.size;
}
static int file_compare_size_d(const void* v1, const void* v2)
{
file_t* f1 = (file_t*)v1;
file_t* f2 = (file_t*)v2;
return f2->idx.size - f1->idx.size;
}
void sortfiles(file_t* filelist, size_t count, enum file_sort order) void sortfiles(file_t* filelist, size_t count, enum file_sort order)
{ {
switch(order) { switch(order) {
...@@ -326,6 +342,12 @@ void sortfiles(file_t* filelist, size_t count, enum file_sort order) ...@@ -326,6 +342,12 @@ void sortfiles(file_t* filelist, size_t count, enum file_sort order)
case FILE_SORT_DATE_D: case FILE_SORT_DATE_D:
qsort(filelist, count, sizeof(*filelist), file_compare_date_d); qsort(filelist, count, sizeof(*filelist), file_compare_date_d);
break; break;
case FILE_SORT_SIZE_A:
qsort(filelist, count, sizeof(*filelist), file_compare_size_a);
break;
case FILE_SORT_SIZE_D:
qsort(filelist, count, sizeof(*filelist), file_compare_size_d);
break;
} }
} }
......
...@@ -1911,6 +1911,10 @@ JSObject* js_CreateFileBaseClass(JSContext* cx, JSObject* parent, scfg_t* cfg) ...@@ -1911,6 +1911,10 @@ JSObject* js_CreateFileBaseClass(JSContext* cx, JSObject* parent, scfg_t* cfg)
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY); , JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, sort, "DATE_D", INT_TO_JSVAL(FILE_SORT_DATE_D), NULL, NULL JS_DefineProperty(cx, sort, "DATE_D", INT_TO_JSVAL(FILE_SORT_DATE_D), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY); , JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, sort, "SIZE_A", INT_TO_JSVAL(FILE_SORT_SIZE_A), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
JS_DefineProperty(cx, sort, "SIZE_D", INT_TO_JSVAL(FILE_SORT_SIZE_D), NULL, NULL
, JSPROP_PERMANENT|JSPROP_ENUMERATE|JSPROP_READONLY);
#ifdef BUILD_JSDOCS #ifdef BUILD_JSDOCS
js_DescribeSyncObject(cx, sort, "Sort order numeric constants", 0); js_DescribeSyncObject(cx, sort, "Sort order numeric constants", 0);
js_CreateArrayOfStrings(cx, sort, "_property_desc_list", filebase_sort_prop_desc, JSPROP_READONLY); js_CreateArrayOfStrings(cx, sort, "_property_desc_list", filebase_sort_prop_desc, JSPROP_READONLY);
......
...@@ -296,6 +296,8 @@ enum file_sort { /* Values for dir[x].sort */ ...@@ -296,6 +296,8 @@ enum file_sort { /* Values for dir[x].sort */
,FILE_SORT_NAME_DC = 5 /* Sort by filename, descending (case-sensitive) */ ,FILE_SORT_NAME_DC = 5 /* Sort by filename, descending (case-sensitive) */
,FILE_SORT_DATE_A = 2 /* Sort by upload date, ascending */ ,FILE_SORT_DATE_A = 2 /* Sort by upload date, ascending */
,FILE_SORT_DATE_D = 3 /* Sort by upload date, descending */ ,FILE_SORT_DATE_D = 3 /* Sort by upload date, descending */
,FILE_SORT_SIZE_A = 6 /* Sort by file size, ascending */
,FILE_SORT_SIZE_D = 7 /* Sort by file size, descending */
,FILE_SORT_NATURAL = FILE_SORT_DATE_A ,FILE_SORT_NATURAL = FILE_SORT_DATE_A
}; };
......
...@@ -31,6 +31,8 @@ char* file_sort_desc[] = { ...@@ -31,6 +31,8 @@ char* file_sort_desc[] = {
"Date Descending", "Date Descending",
"Name Ascending (case-sensitive)", "Name Ascending (case-sensitive)",
"Name Descending (case-sensitive)", "Name Descending (case-sensitive)",
"Size Ascending",
"Size Descending",
NULL NULL
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment