mirror of https://github.com/NekoX-Dev/NekoX.git
Unlimited accounts
This commit is contained in:
parent
aadfcb7e96
commit
b30bc1ed80
|
@ -494,9 +494,13 @@ void init(JNIEnv *env, jclass c, jint instanceNum, jint version, jint layer, jin
|
|||
|
||||
void setJava(JNIEnv *env, jclass c, jboolean useJavaByteBuffers) {
|
||||
ConnectionsManager::useJavaVM(java, useJavaByteBuffers);
|
||||
for (int a = 0; a < MAX_ACCOUNT_COUNT; a++) {
|
||||
ConnectionsManager::getInstance(a).setDelegate(new Delegate());
|
||||
}
|
||||
|
||||
void setJava1(JNIEnv *env, jclass c, jint instanceNum) {
|
||||
if (instanceNum >= jniEnv.capacity()) {
|
||||
jniEnv.resize(instanceNum + 10, nullptr);
|
||||
}
|
||||
ConnectionsManager::getInstance(instanceNum).setDelegate(new Delegate());
|
||||
}
|
||||
|
||||
static const char *ConnectionsManagerClassPathName = "org/telegram/tgnet/ConnectionsManager";
|
||||
|
@ -528,6 +532,7 @@ static JNINativeMethod ConnectionsManagerMethods[] = {
|
|||
{"native_setNetworkAvailable", "(IZIZ)V", (void *) setNetworkAvailable},
|
||||
{"native_setPushConnectionEnabled", "(IZ)V", (void *) setPushConnectionEnabled},
|
||||
{"native_setJava", "(Z)V", (void *) setJava},
|
||||
{"native_setJava", "(I)V", (void *) setJava1},
|
||||
{"native_applyDnsConfig", "(IJLjava/lang/String;I)V", (void *) applyDnsConfig},
|
||||
{"native_checkProxy", "(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/telegram/tgnet/RequestTimeDelegate;)J", (void *) checkProxy},
|
||||
{"native_onHostNameResolved", "(Ljava/lang/String;JLjava/lang/String;Z)V", (void *) onHostNameResolved}
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include <jni.h>
|
||||
JavaVM *javaVm = nullptr;
|
||||
//JNIEnv *jniEnv[MAX_ACCOUNT_COUNT];
|
||||
std::vector<JNIEnv*> jniEnv(MAX_ACCOUNT_COUNT);
|
||||
std::vector<JNIEnv*> jniEnv(10);
|
||||
jclass jclass_ByteBuffer = nullptr;
|
||||
jmethodID jclass_ByteBuffer_allocateDirect = 0;
|
||||
#endif
|
||||
|
@ -133,11 +133,15 @@ ConnectionsManager::~ConnectionsManager() {
|
|||
pthread_mutex_destroy(&mutex);
|
||||
}
|
||||
|
||||
std::vector<ConnectionsManager*> ConnectionsManager::_instances = std::vector<ConnectionsManager*>(MAX_ACCOUNT_COUNT);
|
||||
std::vector<ConnectionsManager*> ConnectionsManager::_instances = std::vector<ConnectionsManager*>(10);
|
||||
|
||||
ConnectionsManager& ConnectionsManager::getInstance(int32_t instanceNum) {
|
||||
static std::mutex _new_mutex;
|
||||
|
||||
if (instanceNum >= _instances.capacity()) {
|
||||
_instances.resize(instanceNum + 10, nullptr);
|
||||
}
|
||||
|
||||
if(_instances[instanceNum] == nullptr) {
|
||||
_new_mutex.lock();
|
||||
if(_instances[instanceNum] == nullptr)
|
||||
|
|
|
@ -79,6 +79,10 @@ public class ApplicationLoader extends Application {
|
|||
Reflection.unseal(base);
|
||||
}
|
||||
super.attachBaseContext(base);
|
||||
try {
|
||||
applicationContext = getApplicationContext();
|
||||
} catch (Throwable ignore) {
|
||||
}
|
||||
if (SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
MultiDex.install(this);
|
||||
}
|
||||
|
@ -291,7 +295,14 @@ public class ApplicationLoader extends Application {
|
|||
|
||||
public static void loadAccount(int account) {
|
||||
if (!loadedAccounts.add(account)) return;
|
||||
UserConfig.getInstance(account).loadConfig();
|
||||
UserConfig inst = UserConfig.getInstance(account);
|
||||
inst.loadConfig();
|
||||
if (!inst.isClientActivated()) {
|
||||
if (SharedConfig.activeAccounts.remove(account)) {
|
||||
SharedConfig.saveAccounts();
|
||||
}
|
||||
}
|
||||
|
||||
MessagesController.getInstance(account);
|
||||
if (account == 0) {
|
||||
SharedConfig.pushStringStatus = "__FIREBASE_GENERATING_SINCE_" + ConnectionsManager.getInstance(account).getCurrentTime() + "__";
|
||||
|
|
|
@ -1042,7 +1042,7 @@ public class SharedConfig {
|
|||
showNotificationsForAllAccounts = preferences.getBoolean("AllAccounts", true);
|
||||
activeAccounts = Arrays.stream(preferences.getString("active_accounts", "").split(",")).filter(StrUtil::isNotBlank).map(Integer::parseInt).collect(Collectors.toCollection(HashSet::new));
|
||||
|
||||
if (!preferences.contains("account_list_loaded")) {
|
||||
if (!preferences.contains("accounts_loaded")) {
|
||||
int maxAccounts;
|
||||
|
||||
File sharedPrefs = new File(ApplicationLoader.applicationContext.getFilesDir().getParentFile(), "shared_prefs");
|
||||
|
@ -1070,7 +1070,7 @@ public class SharedConfig {
|
|||
preferences.edit().putString("active_accounts", StringUtils.join(activeAccounts, ",")).apply();
|
||||
}
|
||||
|
||||
preferences.edit().putBoolean("account_list_loaded", true).apply();
|
||||
preferences.edit().putBoolean("accounts_loaded", true).apply();
|
||||
}
|
||||
|
||||
configLoaded = true;
|
||||
|
|
|
@ -163,6 +163,7 @@ public class ConnectionsManager extends BaseController {
|
|||
|
||||
public ConnectionsManager(int instance) {
|
||||
super(instance);
|
||||
ConnectionsManager.native_setJava(instance);
|
||||
connectionState = native_getConnectionState(currentAccount);
|
||||
String deviceModel;
|
||||
String systemLangCode;
|
||||
|
@ -748,6 +749,8 @@ public class ConnectionsManager extends BaseController {
|
|||
|
||||
public static native void native_setJava(boolean useJavaByteBuffers);
|
||||
|
||||
public static native void native_setJava(int instanceNum);
|
||||
|
||||
public static native void native_setPushConnectionEnabled(int currentAccount, boolean value);
|
||||
|
||||
public static native void native_applyDnsConfig(int currentAccount, long address, String phone, int date);
|
||||
|
|
|
@ -513,8 +513,8 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
|
|||
switchToAccount(((DrawerUserCell) view).getAccountNumber(), true);
|
||||
drawerLayoutContainer.closeDrawer(false);
|
||||
} else if (view instanceof DrawerAddCell) {
|
||||
int freeAccount = -1;
|
||||
for (int account = 0;account < UserConfig.MAX_ACCOUNT_COUNT; account++) {
|
||||
int freeAccount;
|
||||
for (int account = 0;; account++) {
|
||||
if (!SharedConfig.activeAccounts.contains(account)) {
|
||||
freeAccount = account;
|
||||
break;
|
||||
|
|
|
@ -1534,6 +1534,8 @@ public class LoginActivity extends BaseFragment implements NotificationCenter.No
|
|||
|
||||
private void needFinishActivity(boolean afterSignup) {
|
||||
clearCurrentState();
|
||||
SharedConfig.activeAccounts.add(currentAccount);
|
||||
SharedConfig.saveAccounts();
|
||||
if (getParentActivity() instanceof LaunchActivity) {
|
||||
if (newAccount) {
|
||||
newAccount = false;
|
||||
|
@ -1555,8 +1557,6 @@ public class LoginActivity extends BaseFragment implements NotificationCenter.No
|
|||
}
|
||||
|
||||
private void onAuthSuccess(TLRPC.TL_auth_authorization res, boolean afterSignup) {
|
||||
SharedConfig.activeAccounts.add(currentAccount);
|
||||
SharedConfig.saveAccounts();
|
||||
ConnectionsManager.getInstance(currentAccount).setUserId(res.user.id);
|
||||
UserConfig.getInstance(currentAccount).clearConfig();
|
||||
MessagesController.getInstance(currentAccount).cleanup();
|
||||
|
|
|
@ -114,8 +114,8 @@ public class LogoutActivity extends BaseFragment {
|
|||
listView.setAdapter(listAdapter);
|
||||
listView.setOnItemClickListener((view, position, x, y) -> {
|
||||
if (position == addAccountRow) {
|
||||
int freeAccount = -1;
|
||||
for (int account = 0;account < UserConfig.MAX_ACCOUNT_COUNT; account++) {
|
||||
int freeAccount;
|
||||
for (int account = 0;; account++) {
|
||||
if (!SharedConfig.activeAccounts.contains(account)) {
|
||||
freeAccount = account;
|
||||
break;
|
||||
|
|
|
@ -7177,8 +7177,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
new SearchResult(500, LocaleController.getString("EditName", R.string.EditName), 0, () -> presentFragment(new ChangeNameActivity())),
|
||||
new SearchResult(501, LocaleController.getString("ChangePhoneNumber", R.string.ChangePhoneNumber), 0, () -> presentFragment(new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_CHANGE_PHONE_NUMBER))),
|
||||
new SearchResult(502, LocaleController.getString("AddAnotherAccount", R.string.AddAnotherAccount), 0, () -> {
|
||||
int freeAccount = -1;
|
||||
for (int account = 0;account < UserConfig.MAX_ACCOUNT_COUNT; account++) {
|
||||
int freeAccount;
|
||||
for (int account = 0;; account++) {
|
||||
if (!SharedConfig.activeAccounts.contains(account)) {
|
||||
freeAccount = account;
|
||||
break;
|
||||
|
@ -7617,8 +7617,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
if (stringBuilder != null && i == searchArgs.length - 1) {
|
||||
if (result.guid == 502) {
|
||||
int freeAccount = -1;
|
||||
for (int account = 0;account < UserConfig.MAX_ACCOUNT_COUNT; account++) {
|
||||
int freeAccount;
|
||||
for (int account = 0;; account++) {
|
||||
if (!SharedConfig.activeAccounts.contains(account)) {
|
||||
freeAccount = account;
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue