mirror of
				https://gitee.com/spark-store-project/spark-store
				synced 2025-11-04 16:22:19 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			125 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
echo "----------------Running Spark DStore Patch----------------"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
enumAppInfoList() {
 | 
						|
    appInfoList=()
 | 
						|
    apps="/opt/apps"
 | 
						|
    list=$(ls $apps)
 | 
						|
    for appID in $list; do
 | 
						|
        appInfoList+=("$appID")
 | 
						|
    done
 | 
						|
    echo "${appInfoList[@]}"
 | 
						|
}
 | 
						|
linkDir() {
 | 
						|
    ensureTargetDir() {
 | 
						|
        targetFile=$1
 | 
						|
        t=$(dirname "$targetFile")
 | 
						|
        mkdir -p "$t"
 | 
						|
    }
 | 
						|
 | 
						|
    source=$1
 | 
						|
    target=$2
 | 
						|
    sourceDir=$(dirname "$source")
 | 
						|
    targetDir=$(dirname "$target")
 | 
						|
    find "$source" -type f | while read sourceFile; do
 | 
						|
        targetFile="$targetDir/${sourceFile#$sourceDir/}"
 | 
						|
        if [ -L "$targetFile" ] && [ "$(readlink "$targetFile")" = "$sourceFile" ]; then
 | 
						|
            continue
 | 
						|
        else
 | 
						|
            rm -f "$targetFile"
 | 
						|
        fi
 | 
						|
 | 
						|
        ensureTargetDir "$targetFile"
 | 
						|
	sourceFile=$(realpath --relative-to="$(dirname $targetFile)" "$sourceFile" )
 | 
						|
        ln -s "$sourceFile" "$targetFile"
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
linkApp() {
 | 
						|
    appID=$1
 | 
						|
    appEntriesDir="/opt/apps/$appID/entries"
 | 
						|
    appLibsDir="/opt/apps/$appID/files/lib"
 | 
						|
    autoStartDir="$appEntriesDir/autostart"
 | 
						|
 | 
						|
    if [ -d "$autoStartDir" ]; then
 | 
						|
        linkDir "$autoStartDir" "/etc/xdg/autostart"
 | 
						|
    fi
 | 
						|
 | 
						|
    # link application
 | 
						|
    sysShareDir="/usr/share"
 | 
						|
    for folder in "$appEntriesDir/applications" "$appEntriesDir/icons" "$appEntriesDir/mime" "$appEntriesDir/glib-2.0" "$appEntriesDir/services" "$appEntriesDir/GConf" "$appEntriesDir/help" "$appEntriesDir/locale" "$appEntriesDir/fcitx"; do
 | 
						|
        if [ ! -d "$folder" ]; then
 | 
						|
            continue
 | 
						|
        fi
 | 
						|
        if [ "$folder" = "$appEntriesDir/polkit" ]; then
 | 
						|
            linkDir "$folder" "/usr/share/polkit-1"
 | 
						|
        elif [ "$folder" = "$appEntriesDir/fonts/conf" ]; then
 | 
						|
            linkDir "$folder" "/etc/fonts/conf.d"
 | 
						|
        else
 | 
						|
            linkDir "$folder" "$sysShareDir/${folder##*/}"
 | 
						|
        fi
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
# execute linkApp function for each app and print output
 | 
						|
for app in $(enumAppInfoList); do
 | 
						|
    linkApp "$app" &
 | 
						|
 | 
						|
    if [ "$1" = "--debug" ]; then
 | 
						|
        echo "Linking for $app"
 | 
						|
    fi
 | 
						|
# remove broken links in /usr/share
 | 
						|
done
 | 
						|
wait
 | 
						|
 | 
						|
if [ "$1" = "--debug" ]; then
 | 
						|
    echo "Cleaning links and updating databases and caches..."
 | 
						|
fi
 | 
						|
 | 
						|
 | 
						|
if [ "$1" = "--debug" ]; then
 | 
						|
    find /usr/share/applications -xtype l -delete &
 | 
						|
    find /usr/share/icons -xtype l -delete &
 | 
						|
    find /usr/share/mime/packages -xtype l -delete &
 | 
						|
    find /usr/share/glib-2.0 -xtype l -delete &
 | 
						|
    find /usr/share/dbus-1/services -xtype l -delete &
 | 
						|
    find /usr/share/fcitx -xtype l -delete &
 | 
						|
    find /usr/share/help -xtype l -delete &
 | 
						|
    find /usr/share/locale -xtype l -delete &
 | 
						|
    find /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/fcitx -xtype l -delete &
 | 
						|
    find /usr/lib/mozilla/plugins -xtype l -delete &
 | 
						|
    find /usr/share/polkit-1/actions -xtype l -delete &
 | 
						|
    find /usr/share/fonts -xtype l -delete &
 | 
						|
    find /etc/fonts/conf.d -xtype l -delete &
 | 
						|
    update-icon-caches /usr/share/icons/* &
 | 
						|
    update-desktop-database -q &
 | 
						|
    update-mime-database -V /usr/share/mime &
 | 
						|
    glib-compile-schemas /usr/share/glib-2.0/schemas/ &
 | 
						|
    wait
 | 
						|
else
 | 
						|
    find /usr/share/applications -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/icons -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/mime/packages -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/glib-2.0 -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/dbus-1/services -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/fcitx -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/help -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/locale -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/fcitx -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/lib/mozilla/plugins -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/polkit-1/actions -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /usr/share/fonts -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    find /etc/fonts/conf.d -xtype l -delete > /dev/null 2>&1 &
 | 
						|
    update-icon-caches /usr/share/icons/* > /dev/null 2>&1 &
 | 
						|
    update-desktop-database -q > /dev/null 2>&1 &
 | 
						|
    update-mime-database -V /usr/share/mime > /dev/null 2>&1 &
 | 
						|
    glib-compile-schemas /usr/share/glib-2.0/schemas/ > /dev/null 2>&1 &
 | 
						|
fi
 | 
						|
 | 
						|
 | 
						|
echo "----------------Finished----------------" |