retain messages from rpc errors when loading wallets with bwt
@@ -29,6 +29,8 @@ import java.io.*;
import java.util.*;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class ElectrumServer {
@@ -46,6 +48,8 @@ public class ElectrumServer {
private static String bwtElectrumServer;
+ private static final Pattern RPC_WALLET_LOADING_PATTERN = Pattern.compile(".*\"(Wallet loading failed:[^\"]*)\".*");
+
private static synchronized Transport getTransport() throws ServerException {
if(transport == null) {
try {
@@ -824,12 +828,17 @@ public class ElectrumServer {
bwtStartCondition.await();
if(!bwt.isReady()) {
- if(bwtStartException != null && bwtStartException.getMessage().contains("Wallet file not specified")) {
+ if(bwtStartException != null) {
+ Matcher walletLoadingMatcher = RPC_WALLET_LOADING_PATTERN.matcher(bwtStartException.getMessage());
+ if(bwtStartException.getMessage().contains("Wallet file not specified")) {
throw new ServerException("Bitcoin Core requires Multi-Wallet to be enabled in the Server Preferences");
- } else {
- throw new ServerException("Check if Bitcoin Core is running, and the authentication details are correct.");
+ } else if(walletLoadingMatcher.matches() && walletLoadingMatcher.group(1) != null) {
+ throw new ServerException(walletLoadingMatcher.group(1));
}
}
+
+ throw new ServerException("Check if Bitcoin Core is running, and the authentication details are correct.");
+ }
} catch(InterruptedException e) {
Thread.currentThread().interrupt();
return null;
