132 lines
3.8 KiB
Java
132 lines
3.8 KiB
Java
package org.mercury_im.messenger.cli;
|
|
|
|
import org.jivesoftware.smack.util.StringUtils;
|
|
import org.jxmpp.jid.DomainBareJid;
|
|
import org.jxmpp.jid.EntityBareJid;
|
|
import org.jxmpp.jid.impl.JidCreate;
|
|
import org.jxmpp.jid.parts.Localpart;
|
|
import org.jxmpp.stringprep.XmppStringprepException;
|
|
import org.mercury_im.messenger.cli.di.component.CliComponent;
|
|
import org.mercury_im.messenger.cli.di.component.DaggerCliComponent;
|
|
import org.mercury_im.messenger.core.Messenger;
|
|
import org.mercury_im.messenger.core.viewmodel.accounts.LoginViewModel;
|
|
import org.mercury_im.messenger.core.xmpp.MercuryConnection;
|
|
|
|
import java.util.List;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
import io.reactivex.disposables.Disposable;
|
|
|
|
public class MercuryCli {
|
|
|
|
private final UserInterface userInterface;
|
|
Disposable connectionStateDisposable;
|
|
|
|
@Inject
|
|
Messenger messenger;
|
|
|
|
@Inject
|
|
LoginViewModel loginViewModel;
|
|
|
|
public static void main(String[] args) {
|
|
MercuryCli cli = new MercuryCli();
|
|
cli.loginDialog();
|
|
System.out.println("Login successful.");
|
|
cli.loop();
|
|
}
|
|
|
|
/**
|
|
* Create the Dependency Injection graph.
|
|
*/
|
|
public CliComponent createCliComponent() {
|
|
CliComponent cliComponent = DaggerCliComponent.builder()
|
|
.build();
|
|
|
|
cliComponent.inject(this);
|
|
|
|
return cliComponent;
|
|
}
|
|
|
|
public MercuryCli() {
|
|
createCliComponent();
|
|
userInterface = ConsoleUserInterface.isSupported() ? new ConsoleUserInterface() : new ScannerUserInterface();
|
|
}
|
|
|
|
private void loginDialog() {
|
|
System.out.println("Format is 'Username'@'Service'.");
|
|
|
|
String username = promptForUsername();
|
|
DomainBareJid service = promptForServiceDomain();
|
|
String password = promptForPassword();
|
|
|
|
EntityBareJid jid = JidCreate.entityBareFrom(Localpart.formUnescapedOrNull(username), service);
|
|
|
|
loginViewModel.onLoginUsernameChanged(jid.toString());
|
|
loginViewModel.onLoginPasswordChanged(password);
|
|
|
|
loginViewModel.login();
|
|
}
|
|
|
|
private String promptForPassword() {
|
|
System.out.println("Enter password:");
|
|
String password = userInterface.readPassword();
|
|
if (StringUtils.isNullOrEmpty(password)) {
|
|
System.out.println("Password too short.");
|
|
return promptForPassword();
|
|
}
|
|
return password;
|
|
}
|
|
|
|
private DomainBareJid promptForServiceDomain() {
|
|
System.out.println("Enter service:");
|
|
String service = userInterface.readText();
|
|
try {
|
|
return JidCreate.domainBareFrom(service);
|
|
} catch (XmppStringprepException e) {
|
|
System.out.println("Invalid service domain.");
|
|
return promptForServiceDomain();
|
|
}
|
|
}
|
|
|
|
private String promptForUsername() {
|
|
System.out.println("Please enter username:");
|
|
String username = userInterface.readText();
|
|
try {
|
|
Localpart.from(username);
|
|
} catch (XmppStringprepException e) {
|
|
System.out.println("Invalid username.");
|
|
return promptForUsername();
|
|
}
|
|
return username;
|
|
}
|
|
|
|
private void loop() {
|
|
String input = userInterface.readText();
|
|
if (StringUtils.isNullOrEmpty(input)) {
|
|
loop();
|
|
return;
|
|
}
|
|
|
|
String[] command = input.split(" ");
|
|
switch (command[0]) {
|
|
case "/exit":
|
|
System.out.println("Shutting down.");
|
|
messenger.getConnectionManager().doShutdownAllConnections();
|
|
connectionStateDisposable.dispose();
|
|
return;
|
|
|
|
case "/contacts":
|
|
List<MercuryConnection> connectionList = messenger.getConnectionManager().getConnections();
|
|
|
|
|
|
break;
|
|
|
|
case "/msg":
|
|
break;
|
|
}
|
|
loop();
|
|
}
|
|
|
|
}
|