Very nice idea but anyone working on it?
In the context of GSoC 2010: TaskView
Here's some draft description of uses case for Mathusalem. Note that it is assumed that clicking on the tray icon shows a list of the current tasks, and that the icon is set to disappear when there are no active tasks and no notifcations baloons.
- Eddie is browsing the web with Epiphany and wants to download a file. Once he or the browser, set the download directory and the file name and the download starts, an icon appears on the systray. Once the download has been completed, another notification tip appears, informing that the download has been terminated, and asking if he wants to open the file with the default handler application for that type.
- Luke has Epiphany set to automatically download and open files for known mime types. As he clicks on a PDF in his browser, an icon appears on the tray, with no notification baloon. Once the download has completed, Evince is automatically launched to open the PDF file.
- Bob wants to copy files from his university server using a Nautilus SSH share. As he pastes his files locally, a tray icon appears. Bob can control the percentage of the copy by clicking on the tray icon, which lists all the files set to copy from the SSH share. Once the copy has finished, a notification baloon informs him of the success (or the failure) of the operation.
- Liz wants to copy a large movie file from his home directory to his boyfriend's external USB disk to watch the movie at his place. Liz likes to keep track of the progress of the operation without clicking around over tray icons, and manages to do so by keeping an eye on a Nautilus window opened on the USB drive, where a indicator emblem over the icon of the copied file, shows graphically the percentage of the copy. A notification baloon is anyway shown on completion.
- George likes to use Empathy with Nautilus integration, to send and receive files from his Jabber buddies. Once he set up a transfer, a tray icon appears, and by clicking on it, he can see the state of the transfer, remaining time, and he can pause, resume and stop it. After the transfer is completed, if he was receiving a file, a notification appears asking him if he wants to open it with the default handler application. Ignoring the notification results in disappearing of the tray icon and not opening the file.
- July often updates her distribution using PackageKit. When she starts the process, the update tool window hides and a tray icon appears. When the update is finished, a notification balloon informs her of the success of the operation and, in case she has installed kernel or Xorg major updates, asks her if she wants to restart her system (or her window server) in order to use the newly installed packages.
- Jeff wants to rip his band's brand new EP to send files to MySpace. He uses Sound Juicer to do that. Once he starts to rip, Sound Juicer hides and a tray icon appears. By clicking on it, Jeff can stop the process, list all the tracks set to rip and delete some track ripping job he mistaked to set. Once the rip has finished, a notification informs him of the result of the process, from which he may choose to get back to Serpentine to rip other tracks or to close the program. Ignoring the notification turns back to Serpentine window, unfocused.
- Sarah wants to print a long PDF file from Evince, containing slides from his university teacher. After he set the file to print, a tray icon appears and by clicking on it, she can see the percentage of the printer's job, pause, resume and stop it. After the print has terminated, a notification informs her.
After a talk with Steve Frécinaux on IRC, he said Mathusalem API should be as simple as possible, and should be about Tasks and Resources.
In my implementation thoughts, a Resource is something the Task publisher (e.g. Epiphany) defines as in need of assigning to Mathusalem. It could be a download, a burning process, a printing process and so on, and should only have few properties, like name, uri and owner.
A Task instead is a process that uses the Resource and has some basic properties: progress (percentage of completion), status (new, started, paused, aborted, completed), owner and title.
The Task publisher, as Steve Frécinaux proposed, and opposed to what happens now in Mathusalem, defines completely the behaviour of the task, excluding the aforementioned basic properites, and some common behaviour, like firing up a notification when the task has completed or having the progress of the task updated.
Mathusalem should then offer the publisher a way to set the widget shown by the notification on task completed (e.g. a notification with custom action buttons and a custom description, this can be done with SexyTooltip from LibSexy), a way to set a callback method to be executed by the publisher on task completed (e.g. open automatically a PDF file) and before the task starts (e.g. hide the program main window). Those actions should be optional and implemented on the publisher side, so that for Mathusalem they are totally unknown.
Each Resource is associated to a Task in a transparent way to Mathusalem, which should treat each Resource the same.
The task list should be unique among the system, so that any application can query for simple informations or connect to signals (e.g. Nautilus may obtain a list of active tasks and, for those with an URI, set an emblem over the icon showing the progress of the operation.
(Work in progress).