boinc/doc/ui_impl.txt

159 lines
3.1 KiB
Plaintext

Implementation notes
------------------------------------------
project-specific installers
These produce a file "start_project.xml" containing the URL
(and possibly the name) of the starting project in the BOINC directory.
This file tells the BOINC manager to attach to this project.
The file could be produced either of two ways:
1) The file is part of the install bundle.
This would require projects to edit the installers
released by BOINC, using ORCA or whatever tools are needed
2) The project URL is encoded in the installer filename,
and the installer runs a script that finds this name
and creates the file.
(Not sure how easy this is to do)
------------------------------------------
Database
Allow nulls in the email_addr table.
Make it non-unique.
------------------------------------------
Web interfaces
- "get account key" page can now return
multiple accounts with same email address
(show creation time, credit in email message)
- can possibly provide interface for merging accounts
(but this is tricky and can wait)
welcome.php?auth=xxx
shows welcome page (see doc)
and returns cookie with account key
create_account.php
in:
name
out:
status
account key
verify_account.php
in:
acct key
out:
yes/no
if yes:
name
------------------------------------------
Scheduler
------------------------------------------
GUI RPCs
create_account();
in: URL
Implementation:
fetches URL/create_account.php
poll_create_account();
returns status:
in_progress,
success,
returns account key in this case
project_down,
no_reply
verify_account()
in: URL, key
poll_verify_account()
returns status:
in_progress,
success,
returns yes/no, name in this case
project_down,
no_reply
------------------------------------------
Manager
On startup:
If start_project.xml exists
attach_to_project(url, false)
attach_to_project(url/name, user_supplied_url) {
restart:
switch(show_dialog(query_key)) {
yes:
if (invalid_key) {
show_dialog(invalid_key)
goto restart
}
verify_account(URL, key)
while (1)
ret = poll_verify_account()
if (!in_progress) break
sleep(1);
}
switch(ret) {
success/yes:
show_dialog(valid_key);
return;
success/no:
show_dialog(unrecognized_key);
goto restart;
error:
show_dialog(project_unavailable)
no_reply:
retry = network_failure()
if (retry) goto restart;
}
no:
name = get local account name on host
retry:
gui_rpc.create_account()
while (1)
ret = poll_create_account()
if !in_progress break;
sleep(1);
}
switch(ret) {
success:
show_web_page(welcome.php?auth=acct_key)
show_dialog(welcome)
set tab to projects
project_down:
show_dialog(project_unavailable")
set tab to projects
no_reply:
retry = network_failure();
if (goto retry)
set tab to projects
}
cancel:
}
}
bool network_failure(bool user_supplied_url) {
show_web_page(url/proxy_problems.php)
ret = show_dialog(unable_to_contact)
switch (ret) {
change:
show_dialog(proxy_settings)
retry:
return true;
cancel:
return false;
}
}
Miscellaneous:
- Add a "account key" button in the Projects tab.
When clicked, it shows the account key
in a way that can be cut/pasted.