Backup/restore: - berkas .lazy (format versi 2) kini menyimpan ISI berkas: binary/script dan ikon (maks 512 MB per berkas); format versi 1 tetap bisa diimpor - impor memakai shortcut.Restore: binary ditulis ke ~/.local/bin lokal, ikon dari cadangan (atau diunduh ulang dari icon_source), .desktop ditulis dengan path lokal, salinan Desktop dibuat sesuai target - path dari komputer lama tidak dipakai mentah -> tidak ada lagi 'banyak file missing'; entri yang tidak bisa dipulihkan ditandai dan bisa dibetulkan via edit - tes end-to-end: pasang 3 shortcut -> ekspor -> pulihkan di HOME lain -> semua berkas lokal, script hasil restore benar-benar jalan Script: - script dipasang sebagai wrapper + <slug>.real: wrapper menambahkan ~/.local/bin ke PATH dan cd ke folder asli script (desktop environment menjalankan dengan cwd = home, PATH sesi) - .desktop dapat Path= sesuai folder asli script - opsi 'Run in a terminal window (scripts)' di dialog install & edit - uninstall membuang wrapper + script aslinya
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package shortcut
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
|
|
"lazyrun/internal/store"
|
|
)
|
|
|
|
// RemoveOptions mengatur apa saja yang ikut dihapus saat uninstall.
|
|
type RemoveOptions struct {
|
|
// Binary true = binary hasil salinan di ~/.local/bin juga dihapus.
|
|
Binary bool
|
|
}
|
|
|
|
// Uninstall menghapus .desktop (menu + desktop), ikon, dan opsional binary.
|
|
func Uninstall(sc store.Shortcut, o RemoveOptions) error {
|
|
var errs []error
|
|
|
|
for _, path := range []string{sc.DesktopCopyPath, sc.DesktopPath} {
|
|
if path == "" {
|
|
continue
|
|
}
|
|
if err := os.Remove(path); err != nil && !os.IsNotExist(err) {
|
|
errs = append(errs, err)
|
|
}
|
|
}
|
|
if sc.IconPath != "" {
|
|
if err := os.Remove(sc.IconPath); err != nil && !os.IsNotExist(err) {
|
|
errs = append(errs, err)
|
|
}
|
|
}
|
|
if o.Binary && sc.Type == store.TypeExecutable && sc.BinaryPath != "" {
|
|
// script punya dua berkas: wrapper + script aslinya
|
|
for _, path := range []string{sc.BinaryPath, sc.BinaryPath + scriptSuffix} {
|
|
if err := os.Remove(path); err != nil && !os.IsNotExist(err) {
|
|
errs = append(errs, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
go RefreshCache()
|
|
return errors.Join(errs...)
|
|
}
|