This is a big update.
Several long-standing problems & mysteries finally tackled.
- Slick new desktop notifications with action buttons thanks to https://github.com/vlevit/notify-send.sh
o Trivial change to the notification bg loop so it runs once immediately instead of sleeping for the entire check interval before sending the first notification. So you get a notification right on login, if a kernel is available. The check interval setting is still 50% bogus though. If you specify, say, 2 weeks, but you reboot every day, the old way you would never get a notification ever. The new way, you get at least one at every desktop session log-in which is probably a lot more frequent than every 2 weeks.
o "Show" and "Install" buttons right in the notification. The Install button installs the latest with a single button press right from the notifications without even opening up the app. The Show button opens the app. This is just the begining. It should be no problem now to make an "Install && purge old" button, where the actual purge process happens on next reboot after you're running the new installed kernel. May also add a config option so purge retains N latest versions instead of just the currently running.
o If a new notification comes in while a previous notification is still pending (say you have check every hour in settings, and leave your machine idle for 10 hours), it just updates the existing notification instead of adding a new notification. Even if the new notifcation has a new higher kernel version than the last one, it still just updates the existing pending notification.
o Removed the notification dialog from the app itself. - Fix many bugs wrt temp directories & file permissions.
o Removed all the kludgy CURRENT_USER and chown() stuff that was trying to do things as root that it didn't need to, in a users home dir, and then try to paper it over by chown-ing files back to the detected user... Now it just doesn't become root except to do "dpkg -i" and that's it. No downloads, no temp dir or file creation.
o Dirs and files in /tmp are being deleted as soon as they're used, and the actual kernel deb packages are being deleted from cache as soon as they're used. The index.html's, CHANGES, and other metadata are kept in the cache, these are smaller.
o --clean-cache actually works, but, now you don't need it! - Un-hardcode "/usr" in various paths to installed files. Un-hardcode things in general.
- Added some quasi-hidden extra functionality to --debug
o mainline-gtk --debug enables you to specify the update check time in seconds, and propogates the --debug option through to all other mainline commands run in the background or from the notification loop or from the notification action button. - Several fixes to the version string parsing and the resulting show/hide behavior.
o Detect correct update available for notifications when -rc kernels are enabled in Settings.
o Don't hide any installed kernel, even if it's an -rc kernel and -rc kernels are hidden in Settings.
o Don't hide any installed kernel, even if it's older than the "show previous N majors" setting in Settings.
o Don't notify for an installed kernel, regardless if it's running (you get a notification, install the kernel, then don't reboot, don't get any more notifications for that kernel).
o When testing if a kernel is "available" (ie, is an update), compare against highest installed kernel, not the currently running kernel.
o Don't show the same kernel in two different places in the list, by slightly different names and with different icons. This used to happen to any installed -rc kernel, the installed copy was treated like an ubuntu kernel and also like a mainline -rc kernel. - Refactor much of Utils/*.vala right out of existence.
o This ended up clearing up a bunch of build warnings as the janky code is just gone. - Added localization to a few odd strings here & there like in the notification text & buttons and the comments in the shell script written to do notifications.
This fixes up a lot of long-broken things, but it's not quite ready to call 1.1.0 yet.
Still TODO:
- The notification process does not exit after sending the notification, so with every notification, a new idle process gets stuck in the background. They are only cleared on reboot. (you could clear them manually with kill, they just don't go away on their own) I think it has something to do with the stdin/stdout/stderr of the Process.spawn_* commands. For most people they don't hurt anything but it still needs to be figured out.
- The new notification action buttons need a little refining. When you click any button, the listener for the notification perfroms the action and goes away (as it should), but the notification itself stays up and still has click-able buttons, but now the buttons don't do anything. Ideally either the notification should go away once you touch any button just like the close button, or there should be a permanent listener that never goes away and can respond to any button presses forever. That latter idea sounds bad, but there already is a permanent looping shell script in the background anyway just to provide the periodic check¬ify in the first place, so it could maybe be added to that.
- Save & restore the window size and column layout on app close.
- Button to show/hide only installed kernels, to quickly see all the installed ones even if they are many versions old and way down on the list.
Further away TODO:
- Other kernel flavors besides "-generic"