From f7c0f3efe31600e96ee0a435ae13cf17d15f602b Mon Sep 17 00:00:00 2001 From: Justin Krehel <39449589+krehel@users.noreply.github.com> Date: Sat, 4 Nov 2023 19:17:03 -0400 Subject: [PATCH] xscreensaver: add uninstall_postflight and zap * Add uninstall_postflight to remove installed screensavers * Add zap --- Casks/x/xscreensaver.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Casks/x/xscreensaver.rb b/Casks/x/xscreensaver.rb index 61310a954d..e60a98d64e 100644 --- a/Casks/x/xscreensaver.rb +++ b/Casks/x/xscreensaver.rb @@ -14,9 +14,30 @@ cask "xscreensaver" do pkg "Install Everything.pkg" + # There is no uninstall script for this Cask, so a manual uninstall is performed + # Loop through all screensaver plist files, looking for "org,jwz" in the bundle identifier + # Then remove the screensaver if the bundle identifier matches + uninstall_postflight do + Pathname.glob("/Library/Screen Savers/*.saver/Contents/Info.plist").each do |plist| + bundle_id = `/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "#{plist}"` + next unless bundle_id.start_with?("org.jwz") + + screensaver_name = `/usr/libexec/PlistBuddy -c 'Print :CFBundleExecutable' "#{plist}"`.delete(" ").strip + screensaver = Pathname.new("/Library/Screen Savers/#{screensaver_name}.saver") + Utils.gain_permissions_remove(screensaver) if screensaver.directory? + end + end + uninstall pkgutil: "org.jwz.xscreensaver", delete: [ "/Applications/Apple2.app", "/Applications/Phosphor.app", + "/Library/Screen Savers/XScreenSaverUpdater.app", ] + + zap trash: [ + "~/Library/HTTPStorages/org.jwz.xscreensaver.XScreenSaverUpdater", + "~/Library/Preferences/org.jwz.xscreensaver.*.plist", + "~/Library/Saved Application State/org.jwz.xscreensaver.*.savedState", + ] end