mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
switch to state dir and dock fixes
This commit is contained in:
@@ -12,9 +12,6 @@ Singleton {
|
|||||||
|
|
||||||
property var appUsageRanking: {}
|
property var appUsageRanking: {}
|
||||||
|
|
||||||
readonly property string _configUrl: StandardPaths.writableLocation(StandardPaths.ConfigLocation)
|
|
||||||
readonly property string _configDir: _configUrl.startsWith("file://") ? _configUrl.substring(7) : _configUrl
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
loadSettings();
|
loadSettings();
|
||||||
}
|
}
|
||||||
@@ -115,7 +112,7 @@ Singleton {
|
|||||||
FileView {
|
FileView {
|
||||||
id: settingsFile
|
id: settingsFile
|
||||||
|
|
||||||
path: StandardPaths.writableLocation(StandardPaths.ConfigLocation) + "/DankMaterialShell/appusage.json"
|
path: StandardPaths.writableLocation(StandardPaths.GenericStateLocation) + "/DankMaterialShell/appusage.json"
|
||||||
blockLoading: true
|
blockLoading: true
|
||||||
blockWrites: true
|
blockWrites: true
|
||||||
watchChanges: true
|
watchChanges: true
|
||||||
|
|||||||
@@ -17,9 +17,6 @@ Singleton {
|
|||||||
property bool doNotDisturb: false
|
property bool doNotDisturb: false
|
||||||
property var pinnedApps: []
|
property var pinnedApps: []
|
||||||
|
|
||||||
readonly property string _configUrl: StandardPaths.writableLocation(StandardPaths.ConfigLocation)
|
|
||||||
readonly property string _configDir: _configUrl.startsWith("file://") ? _configUrl.substring(7) : _configUrl
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
loadSettings();
|
loadSettings();
|
||||||
}
|
}
|
||||||
@@ -115,7 +112,7 @@ Singleton {
|
|||||||
FileView {
|
FileView {
|
||||||
id: settingsFile
|
id: settingsFile
|
||||||
|
|
||||||
path: StandardPaths.writableLocation(StandardPaths.ConfigLocation) + "/DankMaterialShell/session.json"
|
path: StandardPaths.writableLocation(StandardPaths.GenericStateLocation) + "/DankMaterialShell/session.json"
|
||||||
blockLoading: true
|
blockLoading: true
|
||||||
blockWrites: true
|
blockWrites: true
|
||||||
watchChanges: true
|
watchChanges: true
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ Item {
|
|||||||
property var categoryIcons: categories.map((category) => {
|
property var categoryIcons: categories.map((category) => {
|
||||||
return AppSearchService.getCategoryIcon(category);
|
return AppSearchService.getCategoryIcon(category);
|
||||||
})
|
})
|
||||||
property var appUsageRanking: AppUsageHistoryData.appUsageRanking
|
property var appUsageRanking: AppUsageHistoryData.appUsageRanking || {}
|
||||||
property alias model: filteredModel
|
property alias model: filteredModel
|
||||||
property var _watchApplications: AppSearchService.applications
|
property var _watchApplications: AppSearchService.applications
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Item {
|
|||||||
function movePinnedApp(fromIndex, toIndex) {
|
function movePinnedApp(fromIndex, toIndex) {
|
||||||
if (fromIndex === toIndex) return
|
if (fromIndex === toIndex) return
|
||||||
|
|
||||||
var currentPinned = [...SessionData.pinnedApps]
|
var currentPinned = [...(SessionData.pinnedApps || [])]
|
||||||
if (fromIndex < 0 || fromIndex >= currentPinned.length || toIndex < 0 || toIndex >= currentPinned.length) return
|
if (fromIndex < 0 || fromIndex >= currentPinned.length || toIndex < 0 || toIndex >= currentPinned.length) return
|
||||||
|
|
||||||
var movedApp = currentPinned.splice(fromIndex, 1)[0]
|
var movedApp = currentPinned.splice(fromIndex, 1)[0]
|
||||||
@@ -46,9 +46,10 @@ Item {
|
|||||||
|
|
||||||
var items = []
|
var items = []
|
||||||
var runningApps = NiriService.getRunningAppIds()
|
var runningApps = NiriService.getRunningAppIds()
|
||||||
var pinnedApps = [...SessionData.pinnedApps]
|
var pinnedApps = [...(SessionData.pinnedApps || [])]
|
||||||
var addedApps = new Set()
|
var addedApps = new Set()
|
||||||
|
|
||||||
|
|
||||||
pinnedApps.forEach(appId => {
|
pinnedApps.forEach(appId => {
|
||||||
var lowerAppId = appId.toLowerCase()
|
var lowerAppId = appId.toLowerCase()
|
||||||
if (!addedApps.has(lowerAppId)) {
|
if (!addedApps.has(lowerAppId)) {
|
||||||
@@ -64,28 +65,39 @@ Item {
|
|||||||
})
|
})
|
||||||
root.pinnedAppCount = pinnedApps.length
|
root.pinnedAppCount = pinnedApps.length
|
||||||
var appUsageRanking = AppUsageHistoryData.appUsageRanking || {}
|
var appUsageRanking = AppUsageHistoryData.appUsageRanking || {}
|
||||||
var allUnpinnedApps = []
|
|
||||||
|
|
||||||
for (var appId in appUsageRanking) {
|
|
||||||
var lowerAppId = appId.toLowerCase()
|
|
||||||
if (!addedApps.has(lowerAppId)) {
|
|
||||||
allUnpinnedApps.push({
|
|
||||||
appId: appId,
|
|
||||||
lastUsed: appUsageRanking[appId].lastUsed || 0,
|
|
||||||
usageCount: appUsageRanking[appId].usageCount || 0
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allUnpinnedApps.sort((a, b) => b.lastUsed - a.lastUsed)
|
|
||||||
|
|
||||||
var unpinnedApps = []
|
var unpinnedApps = []
|
||||||
var recentToAdd = Math.min(3, allUnpinnedApps.length)
|
var unpinnedAppsSet = new Set()
|
||||||
for (var i = 0; i < recentToAdd; i++) {
|
|
||||||
var appId = allUnpinnedApps[i].appId
|
// First: Add ALL currently running apps that aren't pinned
|
||||||
|
runningApps.forEach(appId => {
|
||||||
var lowerAppId = appId.toLowerCase()
|
var lowerAppId = appId.toLowerCase()
|
||||||
unpinnedApps.push(appId)
|
if (!addedApps.has(lowerAppId)) {
|
||||||
addedApps.add(lowerAppId)
|
unpinnedApps.push(appId)
|
||||||
|
unpinnedAppsSet.add(lowerAppId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Then: Fill remaining slots up to 3 with recently used apps
|
||||||
|
var remainingSlots = Math.max(0, 3 - unpinnedApps.length)
|
||||||
|
if (remainingSlots > 0) {
|
||||||
|
// Sort recent apps by usage
|
||||||
|
var recentApps = []
|
||||||
|
for (var appId in appUsageRanking) {
|
||||||
|
var lowerAppId = appId.toLowerCase()
|
||||||
|
if (!addedApps.has(lowerAppId) && !unpinnedAppsSet.has(lowerAppId)) {
|
||||||
|
recentApps.push({
|
||||||
|
appId: appId,
|
||||||
|
lastUsed: appUsageRanking[appId].lastUsed || 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
recentApps.sort((a, b) => b.lastUsed - a.lastUsed)
|
||||||
|
|
||||||
|
var recentToAdd = Math.min(remainingSlots, recentApps.length)
|
||||||
|
for (var i = 0; i < recentToAdd; i++) {
|
||||||
|
unpinnedApps.push(recentApps[i].appId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (pinnedApps.length > 0 && unpinnedApps.length > 0) {
|
if (pinnedApps.length > 0 && unpinnedApps.length > 0) {
|
||||||
items.push({
|
items.push({
|
||||||
|
|||||||
@@ -262,8 +262,8 @@ ScrollView {
|
|||||||
|
|
||||||
property var rankedAppsModel: {
|
property var rankedAppsModel: {
|
||||||
var apps = [];
|
var apps = [];
|
||||||
for (var appId in AppUsageHistoryData.appUsageRanking) {
|
for (var appId in (AppUsageHistoryData.appUsageRanking || {})) {
|
||||||
var appData = AppUsageHistoryData.appUsageRanking[appId];
|
var appData = (AppUsageHistoryData.appUsageRanking || {})[appId];
|
||||||
apps.push({
|
apps.push({
|
||||||
"id": appId,
|
"id": appId,
|
||||||
"name": appData.name,
|
"name": appData.name,
|
||||||
@@ -320,8 +320,7 @@ ScrollView {
|
|||||||
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12)
|
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12)
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
onClicked: {
|
onClicked: {
|
||||||
AppUsageHistoryData.appUsageRanking = {
|
AppUsageHistoryData.appUsageRanking = {};
|
||||||
};
|
|
||||||
SettingsData.saveSettings();
|
SettingsData.saveSettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -438,7 +437,7 @@ ScrollView {
|
|||||||
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12)
|
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12)
|
||||||
onClicked: {
|
onClicked: {
|
||||||
var currentRanking = Object.assign({
|
var currentRanking = Object.assign({
|
||||||
}, AppUsageHistoryData.appUsageRanking);
|
}, AppUsageHistoryData.appUsageRanking || {});
|
||||||
delete currentRanking[modelData.id];
|
delete currentRanking[modelData.id];
|
||||||
AppUsageHistoryData.appUsageRanking = currentRanking;
|
AppUsageHistoryData.appUsageRanking = currentRanking;
|
||||||
SettingsData.saveSettings();
|
SettingsData.saveSettings();
|
||||||
|
|||||||
Reference in New Issue
Block a user