Version 69 (modified by 14 years ago) (diff) | ,
---|
GUI notices
Goals
The goal is to create a way to notify users of events that require their attention or are likely to interest them. Examples include:
- Conditions in the core client requiring user attention (messages with mode MSG_USER_ERROR)
- New client version available
- High-priority messages from the scheduler (e.g., no jobs because too little disk allocated, wrong driver version, etc.)
- Web notifications such as friend request or confirm, private message, posting to subscribed thread, etc.
- Project news (scientific, credit milestones, etc.)
- An RSS feed specified by the project or the user.
User interface
The Messages tab will be renamed the "Event Log". It will be available via a menu item rather than a tab.
Notices will be shown in a new Notices tab. They will be displayed in HTML. The 10 most recent notices will be displayed, with a button to show all notices in the last month. Most recent notices are on top. Like messages, each will have a timestamp and a project. Buttons will let users filter by project and select notices.
When there is a new notice, a balloon appears over the system tray icon for 10 seconds. It will show the type of the notice. Clicking on the balloon will open the Manager in the Notices tab.
The default BOINC screensaver will display new notices. Notices are classified as "private" and "public"; e.g., private messages and friend requests are private. The screensaver will show only public messages.
Notice architecture
The client collects notices and delivers them via GUI RPC. There are three general sources of notices :
- RSS feeds
- Server notices (<message> elements in scheduler replies)
- Client notices (from calls to msg_printf with priority MSG_USER_ERROR)
Whatever the source, notices have the following attributes:
struct NOTICE { int seqno; bool private; // requires authentication char category[256]; std::string description; double create_time; // when notice was created double arrival_time; // when notice arrived at client char url[256]; };
The following GUI RPCs return notices :
get_notices( // requires authentication int seqno, // return only notices with this seqno > this vector<NOTICE>& } get_notices_public() // returns only non-private notices, doesn't require authentication // screensavers use this
The client stores the set of all notices in a deque, ordered by seqno.
Server and client notices
Client notices include:
- error msg from account manager
- new version available
- can't write state file
- HTTP_PROXY env var exists but doesn't specify proxy
- syntax error in app_info.xml
- can't resolve hostname in remote_hosts.cfg
- syntax error in cc_config.xml
- need network connection
Server notices include:
- invalid or missing account key
- outdated code signing key
- need newer client version
- unsupported OS or CPU type
- unsupported install type (Vista)
- too little disk
These notices are not saved across BOINC restarts, because in many cases the transient problem may have been fixed, and if not the notice will eventually be regenerated. Server and client notices are added to the deque. If 60 secs have elapsed since last write, the server and client notices are written to a disk file.
Notice feeds
Scheduler replies include a list of RSS feeds to be used as notice sources:
<scheduler_reply> ... <notice_feeds> <notice_feed> <name>...</name> <url>...</url> <poll_interval>x</poll_interval> <append_last_guid>0|1</append_last_guid> </notice_feed> ... </notice_feeds> </scheduler_reply>
- url: where to poll
- poll_interval: how often to poll
- append_last_guid: if true, append "&last_guid=x" to url (server will return only newer items)
If <notice_feeds> is present in a scheduler reply, the client adds and/or removes feeds from the project.
The client periodically polls each URL. If append_last_guid is set, it scans the deque for the most recent notice and passes its GUID. For each item returned, it checks whether the GUID exists in the deque, and if not appends it. If any items were added, it writes this feed's notices to a disk file.
Some of the URLs may contain an authenticator. In response to a scheduler RPC with a weak authenticator, the scheduler supplies only URLs for public notices, and passes the weak authenticator.
Client startup
On startup, the client reads the client/server notice file and all the feed files into the deque. It then sorts the deque by decreasing arrival_time and assigns sequence numbers.
Localization
Strings of the form _(...) in notice title and content are localizable.
Default project feed
This feed generates
- Project Messages
- Project News
- Private Messages
- Friend Requests
- Friend Confirmations
- Forums
- Forum Threads
Other useful messages might be milestones and anniversaries. Either could contain a link to a certificate generated on demand that the volunteer could print out.
The URL is:
http://<project_url>/notify_rss.php
Categories
- Project news
- Private message
- Friend request
- Friend confirmation
- Forum update
- Thread update
- Scheduler notice
- Client notice
BOINC Project Website
A new entry in the Preferences section of the Your Account area will be created to manage all the feeds a volunteer is currently subscribed to.
This new section should allow the volunteer to change the refresh rate for any feed they want to be notified about.
It should also allow them to disable any feed.
BOINC Manager
Options Dialog
Taskbar Notifications
Advanced View
Simple View
TBD
BOINC Screensaver
Attachments (2)
-
taskbarnotification.jpg (15.7 KB) - added by 15 years ago.
Taskbar example
-
optionsdialog.jpg (39.3 KB) - added by 15 years ago.
BOINC Manager Options Dialog
Download all attachments as: .zip