verdnatura-chat/app/sagas/init.js

103 lines
3.2 KiB
JavaScript
Raw Normal View History

import { AsyncStorage } from 'react-native';
2018-12-05 20:52:08 +00:00
import { put, takeLatest, all } from 'redux-saga/effects';
2019-03-12 16:23:06 +00:00
import SplashScreen from 'react-native-splash-screen';
import RNUserDefaults from 'rn-user-defaults';
import * as actions from '../actions';
import { selectServerRequest } from '../actions/server';
import { setAllPreferences } from '../actions/sortPreferences';
import { toggleMarkdown } from '../actions/markdown';
import { toggleCrashReport } from '../actions/crashReport';
import { APP } from '../actions/actionsTypes';
2017-11-19 02:44:55 +00:00
import RocketChat from '../lib/rocketchat';
import log from '../utils/log';
2019-03-12 16:23:06 +00:00
import Navigation from '../lib/Navigation';
2019-04-17 17:01:03 +00:00
import database from '../lib/realm';
import {
SERVERS, SERVER_ICON, SERVER_NAME, SERVER_URL, TOKEN, USER_ID
} from '../constants/credentials';
import { isIOS } from '../utils/deviceInfo';
const restore = function* restore() {
try {
yield RNUserDefaults.setName(isIOS ? 'group.ios.chat.rocket' : 'chat.rocket.android');
const hasMigration = yield AsyncStorage.getItem('hasMigration');
let { token, server } = yield all({
token: RNUserDefaults.get(RocketChat.TOKEN_KEY),
server: RNUserDefaults.get('currentServer')
2018-12-05 20:52:08 +00:00
});
Beta (#265) * Fabric iOS * Fabric configured on iOS and Android * - react-native-fabric configured - login tracked * README updated * Run scripts from README updated * README scripts * get rooms and messages by rest * user status * more improves * more improves * send pong on timeout * fix some methods * more tests * rest messages * Room actions (#266) * Toggle notifications * Search messages * Invite users * Mute/Unmute users in room * rocket.cat messages * Room topic layout fixed * Starred messages loading onEndReached * Room actions onEndReached * Unnecessary login request * Login loading * Login services fixed * User presence layout * ïmproves on room actions view * Removed unnecessary data from SelectedUsersView * load few messages on open room, search message improve * fix loading messages forever * Removed state from search * Custom message time format * secureTextEntry layout * Reduce android app size * Roles subscription fix * Public routes navigation * fix reconnect * - New login/register, login, register * proguard * Login flux * App init/restore * Android layout fixes * Multiple meteor connection requests fixed * Nested attachments * Nested attachments * fix check status * New login layout (#269) * Public routes navigation * New login/register, login, register * Multiple meteor connection requests fixed * Nested attachments * Button component * TextInput android layout fixed * Register fixed * Thinner close modal button * Requests /me after login only one time * Static images moved * fix reconnect * fix ddp * fix custom emoji * New message layout (#273) * Grouping messages * Message layout * Users typing animation * Image attachment layout
2018-04-24 19:34:03 +00:00
// get native credentials
if (!hasMigration) {
const { serversDB } = database.databases;
const servers = yield RNUserDefaults.objectForKey(SERVERS);
if (servers) {
serversDB.write(() => {
servers.forEach(async(serverItem) => {
const serverInfo = {
id: serverItem[SERVER_URL],
name: serverItem[SERVER_NAME],
iconURL: serverItem[SERVER_ICON]
};
try {
serversDB.create('servers', serverInfo, true);
await RNUserDefaults.set(`${ RocketChat.TOKEN_KEY }-${ serverInfo.id }`, serverItem[USER_ID]);
} catch (e) {
log(e);
}
});
});
yield AsyncStorage.setItem('hasMigration', '1');
}
// if not have current
if (servers && servers.length !== 0 && (!token || !server)) {
server = servers[0][SERVER_URL];
token = servers[0][TOKEN];
}
}
const sortPreferences = yield RocketChat.getSortPreferences();
yield put(setAllPreferences(sortPreferences));
const useMarkdown = yield RocketChat.getUseMarkdown();
yield put(toggleMarkdown(useMarkdown));
const allowCrashReport = yield RocketChat.getAllowCrashReport();
yield put(toggleCrashReport(allowCrashReport));
2018-12-05 20:52:08 +00:00
if (!token || !server) {
yield all([
RNUserDefaults.clear(RocketChat.TOKEN_KEY),
RNUserDefaults.clear('currentServer')
2018-12-05 20:52:08 +00:00
]);
yield put(actions.appStart('outside'));
} else if (server) {
2019-04-17 17:01:03 +00:00
const serverObj = database.databases.serversDB.objectForPrimaryKey('servers', server);
yield put(selectServerRequest(server, serverObj && serverObj.version));
2018-12-05 20:52:08 +00:00
}
2017-11-13 13:19:24 +00:00
yield put(actions.appReady({}));
} catch (e) {
log(e);
}
};
2019-03-12 16:23:06 +00:00
const start = function* start({ root }) {
if (root === 'inside') {
yield Navigation.navigate('InsideStack');
} else if (root === 'setUsername') {
yield Navigation.navigate('SetUsernameView');
} else if (root === 'outside') {
yield Navigation.navigate('OutsideStack');
}
SplashScreen.hide();
};
const root = function* root() {
yield takeLatest(APP.INIT, restore);
2019-03-12 16:23:06 +00:00
yield takeLatest(APP.START, start);
};
export default root;