You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.5 KiB
65 lines
2.5 KiB
// ao-cli includes an AO client that makes calls to a locla or remote AO server. |
|
// The ao-cli client has no store so it makes frequent (hopefully very quick) calls to get exactly the information it needs. |
|
// This requires us to make sure the AO API server's REST API is concise and efficient. |
|
// The only places ao-cli should call out to an AO server (i.e., use the API in api.js) are in this Use AO menu and in the Tests menu. |
|
import { aoEnv } from '../ao-lib/settings.js' |
|
import { isLoggedIn, loginPrompt, logout } from './session.js' |
|
import { getTopPriorityText } from './priority.js' |
|
import { AO_DEFAULT_HOSTNAME } from '../ao-lib/api.js' |
|
import { headerStyle } from './styles.js' |
|
import { cardMenu } from './cards.js' |
|
import { connectMenu } from './connect.js' |
|
import chatMenu from './chat.js' |
|
import { promptMenu } from './welcome.js' |
|
import { checkAoServerInteractive } from './wizard.js' |
|
|
|
// Prints the Use AO Menu and executes the user's choice. Using the AO as a client occurs only under this menu item (except Tests menu). |
|
export default async function useAoMenu() { |
|
const aoServerIsRunning = await checkAoServerInteractive() |
|
if(!aoServerIsRunning) { |
|
console.log('Please start an AO server to use AO client features.') |
|
return false |
|
} |
|
const loggedIn = isLoggedIn() |
|
if(loggedIn) { |
|
console.log('Logged in as:', aoEnv('AO_CLI_SESSION_USERNAME')) |
|
const topPriority = await getTopPriorityText() |
|
console.log('Top priority:', topPriority || 'None') |
|
} |
|
let aoMenuChoices = [] |
|
if(loggedIn) { |
|
aoMenuChoices.push( |
|
'Deck', |
|
'Chat', |
|
'P2P', |
|
) |
|
} |
|
aoMenuChoices.push( |
|
loggedIn ? 'Log Out' : 'Log In', |
|
'Back to Main Menu' |
|
) |
|
const answer = await promptMenu(aoMenuChoices, 'AO', 'connect to an AO server to use AO features') |
|
switch(answer) { |
|
case 'Deck': |
|
//await todoList('My Todo List', ['Add full AO install process to ao-cli in convenient format', 'Add AO server unit tests to ao-cli', 'Get groceries', 'Play music every day']) |
|
while(await cardMenu()) {} |
|
break |
|
case 'P2P': |
|
while(await connectMenu()) {} |
|
break |
|
case 'Chat': |
|
while(await chatMenu()) {} |
|
break |
|
case 'Log In': |
|
console.log('\nao-cli will use the AO API to log into the AO server at', (aoEnv('AO_CLI_TARGET_HOSTNAME') || AO_DEFAULT_HOSTNAME) + '.') |
|
await loginPrompt() |
|
break |
|
case 'Log Out': |
|
await logout() |
|
//await spinnerWait('Logging out...') |
|
break |
|
default: |
|
return false |
|
} |
|
return true |
|
}
|
|
|