mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Merge pull request #1665 from iynaix/wallpaper-sort-random
WallpaperPanel: add sort by random
This commit is contained in:
@@ -374,7 +374,7 @@ Singleton {
|
||||
property string wallhavenResolutionWidth: ""
|
||||
|
||||
property string wallhavenResolutionHeight: ""
|
||||
property string sortOrder: "name" // "name", "name_desc", "date", "date_desc"
|
||||
property string sortOrder: "name" // "name", "name_desc", "date", "date_desc", "random"
|
||||
}
|
||||
|
||||
// applauncher
|
||||
|
||||
@@ -761,6 +761,8 @@ SmartPanel {
|
||||
return "history";
|
||||
if (sortOrder === "name_desc")
|
||||
return "sort-descending";
|
||||
if (sortOrder === "random")
|
||||
return "arrows-shuffle";
|
||||
return "sort-ascending";
|
||||
}
|
||||
tooltipText: {
|
||||
@@ -770,6 +772,8 @@ SmartPanel {
|
||||
return "Sort: Oldest First";
|
||||
if (sortOrder === "name_desc")
|
||||
return "Sort: Name (Z-A)";
|
||||
if (sortOrder === "random")
|
||||
return "Sort: Random";
|
||||
return "Sort: Name (A-Z)";
|
||||
}
|
||||
baseSize: Style.baseWidgetSize * 0.8
|
||||
@@ -779,7 +783,7 @@ SmartPanel {
|
||||
next = "date_desc";
|
||||
else if (sortOrder === "date_desc")
|
||||
next = "name"; // Toggle simpler: Name -> Newest -> Name
|
||||
// Expanded cycle: Name -> Newest -> Oldest -> Z-A -> Name
|
||||
// Expanded cycle: Name -> Newest -> Oldest -> Z-A -> Random -> Name
|
||||
// User just asked for "newest first", so let's make it easy to reach.
|
||||
// Let's do: Name (A-Z) -> Newest -> Oldest -> Name (Z-A) -> ...
|
||||
|
||||
@@ -789,6 +793,8 @@ SmartPanel {
|
||||
next = "date_asc";
|
||||
else if (sortOrder === "date_asc")
|
||||
next = "name_desc";
|
||||
else if (sortOrder === "name_desc")
|
||||
next = "random";
|
||||
else
|
||||
next = "name";
|
||||
|
||||
|
||||
@@ -767,17 +767,27 @@ Singleton {
|
||||
// Sort files based on settings
|
||||
var sortOrder = Settings.data.wallpaper.sortOrder || "name";
|
||||
|
||||
parsedFiles.sort(function (a, b) {
|
||||
if (sortOrder === "date_desc") { // Newest first
|
||||
return b.time - a.time;
|
||||
} else if (sortOrder === "date_asc") { // Oldest first
|
||||
return a.time - b.time;
|
||||
} else if (sortOrder === "name_desc") {
|
||||
return b.name.localeCompare(a.name);
|
||||
} else { // name (asc)
|
||||
return a.name.localeCompare(b.name);
|
||||
}
|
||||
});
|
||||
// Fischer-Yates shuffle
|
||||
if (sortOrder === "random") {
|
||||
for (let i = parsedFiles.length - 1; i > 0; i--) {
|
||||
const j = Math.floor(Math.random() * (i + 1));
|
||||
const temp = parsedFiles[i];
|
||||
parsedFiles[i] = parsedFiles[j];
|
||||
parsedFiles[j] = temp;
|
||||
}
|
||||
} else {
|
||||
parsedFiles.sort(function (a, b) {
|
||||
if (sortOrder === "date_desc") { // Newest first
|
||||
return b.time - a.time;
|
||||
} else if (sortOrder === "date_asc") { // Oldest first
|
||||
return a.time - b.time;
|
||||
} else if (sortOrder === "name_desc") {
|
||||
return b.name.localeCompare(a.name);
|
||||
} else { // name (asc)
|
||||
return a.name.localeCompare(b.name);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Map back to string array
|
||||
files = parsedFiles.map(f => f.path);
|
||||
|
||||
Reference in New Issue
Block a user