diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java b/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java index 3ace80c17..e25769f3e 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java +++ b/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java @@ -54,6 +54,13 @@ public abstract class Accounts { public static final String FETCHES_MESSAGES = "fetches_messages"; public static final String SUPPORTS_SMS = "supports_sms"; + + private static final String NUMBER_DATA_QUERY = "SELECT number, COUNT(" + + "CASE WHEN (" + GCM_ID + " IS NOT NULL OR " + APN_ID + " IS NOT NULL OR " + FETCHES_MESSAGES + " = 1) " + + "THEN 1 ELSE 0 END) AS active, COUNT(" + + "CASE WHEN " + SUPPORTS_SMS + " = 1 THEN 1 ELSE 0 END) AS " + SUPPORTS_SMS + " " + + "FROM accounts"; + @SqlUpdate("INSERT INTO accounts (" + NUMBER + ", " + DEVICE_ID + ", " + AUTH_TOKEN + ", " + SALT + ", " + SIGNALING_KEY + ", " + FETCHES_MESSAGES + ", " + GCM_ID + ", " + APN_ID + ", " + SUPPORTS_SMS + ") " + @@ -86,12 +93,6 @@ public abstract class Accounts { @SqlQuery("SELECT COUNT(DISTINCT " + NUMBER + ") from accounts") abstract long getNumberCount(); - private static final String NUMBER_DATA_QUERY = "SELECT number, COUNT(" + - "CASE WHEN (" + GCM_ID + " IS NOT NULL OR " + APN_ID + " IS NOT NULL OR " + FETCHES_MESSAGES + " = 1) " + - "THEN 1 ELSE 0 END) AS active, COUNT(" + - "CASE WHEN " + SUPPORTS_SMS + " = 1 THEN 1 ELSE 0 END) AS " + SUPPORTS_SMS + " " + - "FROM accounts"; - @Mapper(NumberDataMapper.class) @SqlQuery(NUMBER_DATA_QUERY + " GROUP BY " + NUMBER + " OFFSET :offset LIMIT :limit") abstract List getAllNumbers(@Bind("offset") int offset, @Bind("limit") int length); diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index 19ec7d78b..c21e9f180 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -62,7 +62,7 @@ public class AccountsManager { memcachedClient.set(getKey(account.getNumber(), account.getDeviceId()), 0, account); } - updateDirectory(account); + updateDirectory(account, false); } /** Creates a new Account for an existing NumberData (setting the deviceId) */ @@ -74,7 +74,7 @@ public class AccountsManager { memcachedClient.set(getKey(account.getNumber(), account.getDeviceId()), 0, account); } - updateDirectory(account); + updateDirectory(account, true); } public void update(Account account) { @@ -83,7 +83,7 @@ public class AccountsManager { } accounts.update(account); - updateDirectory(account); + updateDirectory(account, true); } public Optional get(String number, long deviceId) { @@ -109,12 +109,12 @@ public class AccountsManager { return accounts.getAllByNumber(number); } - private void updateDirectory(Account account) { + private void updateDirectory(Account account, boolean possiblyOtherAccounts) { boolean active = account.getFetchesMessages() || !Util.isEmpty(account.getApnRegistrationId()) || !Util.isEmpty(account.getGcmRegistrationId()); boolean supportsSms = account.getSupportsSms(); - if (!active || !supportsSms) { + if (possiblyOtherAccounts && (!active || !supportsSms)) { NumberData numberData = accounts.getNumberData(account.getNumber()); active = numberData.isActive(); supportsSms = numberData.isSupportsSms();