You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	Many small changes
This commit is contained in:
		| @@ -23,6 +23,12 @@ class ActionButtonComponent extends React.Component { | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	componentWillReceiveProps(newProps) { | ||||
| 		if ('toggled' in newProps) { | ||||
| 			this.setState({ toggled: newProps.toggled }); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	newTodo_press() { | ||||
| 		this.props.dispatch({ | ||||
| 			type: 'Navigation/NAVIGATE', | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| import React, { Component } from 'react'; | ||||
| import { View, Button, TextInput, WebView, Text, StyleSheet } from 'react-native'; | ||||
| import { BackHandler, View, Button, TextInput, WebView, Text, StyleSheet } from 'react-native'; | ||||
| import { connect } from 'react-redux' | ||||
| import { Log } from 'lib/log.js' | ||||
| import { Note } from 'lib/models/note.js' | ||||
| import { Folder } from 'lib/models/folder.js' | ||||
| import { BaseModel } from 'lib/base-model.js' | ||||
| import { ActionButton } from 'lib/components/action-button.js'; | ||||
| import Icon from 'react-native-vector-icons/Ionicons'; | ||||
| import { ScreenHeader } from 'lib/components/screen-header.js'; | ||||
| @@ -11,6 +12,9 @@ import { Checkbox } from 'lib/components/checkbox.js' | ||||
| import { _ } from 'lib/locale.js'; | ||||
| import marked from 'lib/marked.js'; | ||||
| import { BaseScreenComponent } from 'lib/components/base-screen.js'; | ||||
| import { dialogs } from 'lib/dialogs.js'; | ||||
| import { NotesScreenUtils } from 'lib/components/screens/notes-utils.js' | ||||
| import DialogBox from 'react-native-dialogbox'; | ||||
|  | ||||
| const styles = StyleSheet.create({ | ||||
| 	webView: { | ||||
| @@ -32,17 +36,47 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
| 			noteMetadata: '', | ||||
| 			showNoteMetadata: false, | ||||
| 			folder: null, | ||||
| 			lastSavedNote: null, | ||||
| 		} | ||||
|  | ||||
| 		this.backHandler = () => { | ||||
| 			if (!this.state.note.id) { | ||||
| 				return false; | ||||
| 			} | ||||
|  | ||||
| 			if (this.state.mode == 'edit') { | ||||
| 				this.setState({ mode: 'view' }); | ||||
| 				return true; | ||||
| 			} | ||||
|  | ||||
| 			return false; | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	isModified() { | ||||
| 		if (!this.state.note || !this.state.lastSavedNote) return false; | ||||
| 		let diff = BaseModel.diffObjects(this.state.note, this.state.lastSavedNote); | ||||
| 		delete diff.type_; | ||||
| 		return !!Object.getOwnPropertyNames(diff).length; | ||||
| 	} | ||||
|  | ||||
| 	componentWillMount() { | ||||
| 		BackHandler.addEventListener('hardwareBackPress', this.backHandler); | ||||
|  | ||||
| 		if (!this.props.noteId) { | ||||
| 			let note = this.props.itemType == 'todo' ? Note.newTodo(this.props.folderId) : Note.new(this.props.folderId); | ||||
| 			this.setState({ note: note }); | ||||
| 			this.setState({ | ||||
| 				lastSavedNote: Object.assign({}, note), | ||||
| 				note: note, | ||||
| 				mode: 'edit', | ||||
| 			}); | ||||
| 			this.refreshNoteMetadata(); | ||||
| 		} else { | ||||
| 			Note.load(this.props.noteId).then((note) => { | ||||
| 				this.setState({ note: note }); | ||||
| 				this.setState({ | ||||
| 					lastSavedNote: Object.assign({}, note), | ||||
| 					note: note, | ||||
| 				}); | ||||
| 				this.refreshNoteMetadata(); | ||||
| 			}); | ||||
| 		} | ||||
| @@ -50,6 +84,10 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
| 		this.refreshFolder(); | ||||
| 	} | ||||
|  | ||||
| 	componentWillUnmount() { | ||||
| 		BackHandler.removeEventListener('hardwareBackPress', this.backHandler); | ||||
| 	} | ||||
|  | ||||
| 	async currentFolder() { | ||||
| 		let folderId = this.props.folderId; | ||||
| 		if (!folderId) { | ||||
| @@ -91,7 +129,7 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
| 	async saveNoteButton_press() { | ||||
| 		let note = Object.assign({}, this.state.note); | ||||
|  | ||||
| 		if (!this.state.note.parent_id) { | ||||
| 		if (!note.parent_id) { | ||||
| 			let folder = await Folder.defaultFolder(); | ||||
| 			if (!folder) { | ||||
| 				Log.warn('Cannot save note without a notebook'); | ||||
| @@ -101,17 +139,30 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
| 		} | ||||
|  | ||||
| 		let isNew = !note.id; | ||||
| 		if (!note.title) note.title = _('Untitled'); | ||||
| 		note = await Note.save(note); | ||||
| 		this.setState({ note: note }); | ||||
| 		this.setState({ | ||||
| 			lastSavedNote: Object.assign({}, note), | ||||
| 			note: note, | ||||
| 		}); | ||||
| 		if (isNew) Note.updateGeolocation(note.id); | ||||
| 		this.refreshNoteMetadata(); | ||||
| 	} | ||||
|  | ||||
| 	deleteNote_onPress(noteId) { | ||||
| 		Log.info('DELETE', noteId); | ||||
| 	async deleteNote_onPress() { | ||||
| 		let note = this.state.note; | ||||
| 		if (!note.id) return; | ||||
|  | ||||
| 		let ok = await dialogs.confirm(this, _('Delete note?')); | ||||
| 		if (!ok) return; | ||||
|  | ||||
| 		let folderId = note.parent_id; | ||||
|  | ||||
| 		await Note.delete(note.id); | ||||
| 		await NotesScreenUtils.openNoteList(folderId); | ||||
| 	} | ||||
|  | ||||
| 	attachFile_onPress(noteId) { | ||||
| 	attachFile_onPress() { | ||||
|  | ||||
| 	} | ||||
|  | ||||
| @@ -122,12 +173,16 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
|  | ||||
| 	menuOptions() { | ||||
| 		return [ | ||||
| 			{ title: _('Attach file'), onPress: () => { this.attachFile_onPress(this.state.note.id); } }, | ||||
| 			{ title: _('Delete note'), onPress: () => { this.deleteNote_onPress(this.state.note.id); } }, | ||||
| 			{ title: _('Attach file'), onPress: () => { this.attachFile_onPress(); } }, | ||||
| 			{ title: _('Delete note'), onPress: () => { this.deleteNote_onPress(); } }, | ||||
| 			{ title: _('Toggle metadata'), onPress: () => { this.showMetadata_onPress(); } }, | ||||
| 		]; | ||||
| 	} | ||||
|  | ||||
| 	todoCheckbox_change(checked) { | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	render() { | ||||
| 		const note = this.state.note; | ||||
| 		const isTodo = !!Number(note.is_todo); | ||||
| @@ -195,7 +250,15 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
| 				</View> | ||||
| 			); | ||||
| 		} else { | ||||
| 			bodyComponent = <TextInput autoFocus={true} style={{flex: 1, textAlignVertical: 'top', fontFamily: 'monospace'}} multiline={true} value={note.body} onChangeText={(text) => this.body_changeText(text)} /> | ||||
| 			bodyComponent = ( | ||||
| 				<TextInput | ||||
| 					autoFocus={true} | ||||
| 					style={{flex: 1, textAlignVertical: 'top', fontFamily: 'monospace'}} | ||||
| 					multiline={true} | ||||
| 					value={note.body} | ||||
| 					onChangeText={(text) => this.body_changeText(text)} | ||||
| 				/> | ||||
| 			); | ||||
| 		} | ||||
|  | ||||
| 		let title = null; | ||||
| @@ -226,7 +289,11 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
| 				}, | ||||
| 			}); | ||||
|  | ||||
| 			return <ActionButton isToggle={true} buttons={buttons}/> | ||||
| 			if (this.state.mode == 'edit' && !this.isModified()) return <ActionButton style={{display:'none'}}/>; | ||||
|  | ||||
| 			let toggled = this.state.mode == 'edit'; | ||||
|  | ||||
| 			return <ActionButton isToggle={true} buttons={buttons} toggled={toggled} /> | ||||
| 		} | ||||
|  | ||||
| 		const actionButtonComp = renderActionButton(); | ||||
| @@ -235,12 +302,13 @@ class NoteScreenComponent extends BaseScreenComponent { | ||||
| 			<View style={this.styles().screen}> | ||||
| 				<ScreenHeader navState={this.props.navigation.state} menuOptions={this.menuOptions()} title={title} /> | ||||
| 				<View style={{ flexDirection: 'row' }}> | ||||
| 					{ isTodo && <Checkbox checked={!!Number(note.todo_completed)} /> }<TextInput style={{flex:1}} value={note.title} onChangeText={(text) => this.title_changeText(text)} /> | ||||
| 					{ isTodo && <Checkbox checked={!!Number(note.todo_completed)} onChange={(checked) => { this.todoCheckbox_change(checked) }} /> }<TextInput style={{flex:1}} value={note.title} onChangeText={(text) => this.title_changeText(text)} /> | ||||
| 				</View> | ||||
| 				{ bodyComponent } | ||||
| 				{ todoComponents } | ||||
| 				{ actionButtonComp } | ||||
| 				{ this.state.showNoteMetadata && <Text>{this.state.noteMetadata}</Text> } | ||||
| 				<DialogBox ref={dialogbox => { this.dialogbox = dialogbox }}/> | ||||
| 			</View> | ||||
| 		); | ||||
| 	} | ||||
|   | ||||
| @@ -190,6 +190,15 @@ class Note extends BaseItem { | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| 	static async delete(id, options = null) { | ||||
| 		let r = await super.delete(id, options); | ||||
|  | ||||
| 		this.dispatch({ | ||||
| 			type: 'NOTES_DELETE', | ||||
| 			noteId: id, | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| Note.updateGeolocationEnabled_ = true; | ||||
|   | ||||
| @@ -9,10 +9,11 @@ import { FileApiDriverOneDrive } from 'lib/file-api-driver-onedrive.js'; | ||||
| const reg = {}; | ||||
|  | ||||
| reg.logger = () => { | ||||
| 	if (reg.logger_) return reg.logger_; | ||||
| 	reg.logger_ = new Logger(); | ||||
| 	reg.logger_.addTarget('console'); | ||||
| 	reg.logger_.setLevel(Logger.LEVEL_DEBUG); | ||||
| 	if (!reg.logger_) { | ||||
| 		console.warn('Calling logger before it is initialized'); | ||||
| 		return new Logger(); | ||||
| 	} | ||||
|  | ||||
| 	return reg.logger_; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -27,7 +27,7 @@ let time = { | ||||
| 	}, | ||||
|  | ||||
| 	formatMsToLocal(ms, format) { | ||||
| 		return moment.unix(ms / 1000).format(format); | ||||
| 		return moment(ms).format(format); | ||||
| 	}, | ||||
|  | ||||
| 	msleep(ms) { | ||||
|   | ||||
| @@ -26,7 +26,6 @@ import { StatusScreen } from 'lib/components/screens/status.js' | ||||
| import { WelcomeScreen } from 'lib/components/screens/welcome.js' | ||||
| import { OneDriveLoginScreen } from 'lib/components/screens/onedrive-login.js' | ||||
| import { Setting } from 'lib/models/setting.js' | ||||
| import { Synchronizer } from 'lib/synchronizer.js' | ||||
| import { MenuContext } from 'react-native-popup-menu'; | ||||
| import { SideMenu } from 'lib/components/side-menu.js'; | ||||
| import { SideMenuContent } from 'lib/components/side-menu-content.js'; | ||||
| @@ -62,143 +61,165 @@ const reducer = (state = defaultState, action) => { | ||||
|  | ||||
| 	let newState = state; | ||||
|  | ||||
| 	switch (action.type) { | ||||
| 	try { | ||||
| 		switch (action.type) { | ||||
|  | ||||
| 		case 'Navigation/BACK': | ||||
| 			case 'Navigation/BACK': | ||||
|  | ||||
| 			if (navHistory.length < 2) break; | ||||
| 				if (navHistory.length < 2) break; | ||||
|  | ||||
| 			action = navHistory.pop(); // Current page | ||||
| 			action = navHistory.pop(); // Previous page | ||||
| 				action = navHistory.pop(); // Current page | ||||
| 				action = navHistory.pop(); // Previous page | ||||
|  | ||||
| 			// Fall throught | ||||
| 				// Fall throught | ||||
|  | ||||
| 		case 'Navigation/NAVIGATE': | ||||
| 			case 'Navigation/NAVIGATE': | ||||
|  | ||||
| 			const currentRoute = state.route; | ||||
| 			const currentRouteName = currentRoute ? currentRoute.routeName : ''; | ||||
| 				const currentRoute = state.route; | ||||
| 				const currentRouteName = currentRoute ? currentRoute.routeName : ''; | ||||
|  | ||||
| 			reg.logger().info('Route: ' + currentRouteName + ' => ' + action.routeName); | ||||
| 				reg.logger().info('Route: ' + currentRouteName + ' => ' + action.routeName); | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 				newState = Object.assign({}, state); | ||||
|  | ||||
| 			if ('noteId' in action) { | ||||
| 				newState.selectedNoteId = action.noteId; | ||||
| 			} | ||||
|  | ||||
| 			if ('folderId' in action) { | ||||
| 				newState.selectedFolderId = action.folderId; | ||||
| 			} | ||||
|  | ||||
| 			if ('itemType' in action) { | ||||
| 				newState.selectedItemType = action.itemType; | ||||
| 			} | ||||
|  | ||||
| 			if (currentRouteName == action.routeName) { | ||||
| 				// If the current screen is already the requested screen, don't do anything | ||||
| 			} else { | ||||
| 				newState.route = action; | ||||
| 				navHistory.push(action); | ||||
| 			} | ||||
|  | ||||
| 			newState.historyCanGoBack = navHistory.length >= 2; | ||||
|  | ||||
| 			Keyboard.dismiss(); // TODO: should probably be in some middleware | ||||
| 			break; | ||||
|  | ||||
| 		// Replace all the notes with the provided array | ||||
| 		case 'APPLICATION_LOADING_DONE': | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.loading = false; | ||||
| 			break; | ||||
|  | ||||
| 		// Replace all the notes with the provided array | ||||
| 		case 'NOTES_UPDATE_ALL': | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.notes = action.notes; | ||||
| 			break; | ||||
|  | ||||
| 		// Insert the note into the note list if it's new, or | ||||
| 		// update it within the note array if it already exists. | ||||
| 		case 'NOTES_UPDATE_ONE': | ||||
|  | ||||
| 			if (action.note.parent_id != state.selectedFolderId) break; | ||||
|  | ||||
| 			let newNotes = state.notes.splice(0); | ||||
| 			var found = false; | ||||
| 			for (let i = 0; i < newNotes.length; i++) { | ||||
| 				let n = newNotes[i]; | ||||
| 				if (n.id == action.note.id) { | ||||
| 					newNotes[i] = action.note; | ||||
| 					found = true; | ||||
| 					break; | ||||
| 				if ('noteId' in action) { | ||||
| 					newState.selectedNoteId = action.noteId; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if (!found) newNotes.push(action.note); | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.notes = newNotes; | ||||
| 			break; | ||||
|  | ||||
| 		case 'FOLDERS_UPDATE_ALL': | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.folders = action.folders; | ||||
| 			break; | ||||
|  | ||||
| 		case 'FOLDERS_UPDATE_ONE': | ||||
|  | ||||
| 			var newFolders = state.folders.splice(0); | ||||
| 			var found = false; | ||||
| 			for (let i = 0; i < newFolders.length; i++) { | ||||
| 				let n = newFolders[i]; | ||||
| 				if (n.id == action.folder.id) { | ||||
| 					newFolders[i] = action.folder; | ||||
| 					found = true; | ||||
| 					break; | ||||
| 				if ('folderId' in action) { | ||||
| 					newState.selectedFolderId = action.folderId; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if (!found) newFolders.push(action.folder); | ||||
| 				if ('itemType' in action) { | ||||
| 					newState.selectedItemType = action.itemType; | ||||
| 				} | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.folders = newFolders; | ||||
| 			break; | ||||
| 				if (currentRouteName == action.routeName) { | ||||
| 					// If the current screen is already the requested screen, don't do anything | ||||
| 				} else { | ||||
| 					newState.route = action; | ||||
| 					navHistory.push(action); | ||||
| 				} | ||||
|  | ||||
| 		case 'FOLDER_DELETE': | ||||
| 				newState.historyCanGoBack = navHistory.length >= 2; | ||||
|  | ||||
| 			var newFolders = []; | ||||
| 			for (let i = 0; i < state.folders.length; i++) { | ||||
| 				let f = state.folders[i]; | ||||
| 				if (f.id == action.folderId) continue; | ||||
| 				newFolders.push(f); | ||||
| 			} | ||||
| 				if (newState.route.routeName == 'Notes') { | ||||
| 					Setting.setValue('activeFolderId', newState.selectedFolderId); | ||||
| 				} | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.folders = newFolders; | ||||
| 			break; | ||||
| 				Keyboard.dismiss(); // TODO: should probably be in some middleware | ||||
| 				break; | ||||
|  | ||||
| 		case 'SIDE_MENU_TOGGLE': | ||||
| 			// Replace all the notes with the provided array | ||||
| 			case 'APPLICATION_LOADING_DONE': | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.showSideMenu = !newState.showSideMenu | ||||
| 			break; | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.loading = false; | ||||
| 				break; | ||||
|  | ||||
| 		case 'SIDE_MENU_OPEN': | ||||
| 			// Replace all the notes with the provided array | ||||
| 			case 'NOTES_UPDATE_ALL': | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.showSideMenu = true | ||||
| 			break; | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.notes = action.notes; | ||||
| 				break; | ||||
|  | ||||
| 		case 'SIDE_MENU_CLOSE': | ||||
| 			// Insert the note into the note list if it's new, or | ||||
| 			// update it within the note array if it already exists. | ||||
| 			case 'NOTES_UPDATE_ONE': | ||||
|  | ||||
| 			newState = Object.assign({}, state); | ||||
| 			newState.showSideMenu = false | ||||
| 			break; | ||||
| 				if (action.note.parent_id != state.selectedFolderId) break; | ||||
|  | ||||
| 				let newNotes = state.notes.splice(0); | ||||
| 				var found = false; | ||||
| 				for (let i = 0; i < newNotes.length; i++) { | ||||
| 					let n = newNotes[i]; | ||||
| 					if (n.id == action.note.id) { | ||||
| 						newNotes[i] = action.note; | ||||
| 						found = true; | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 				if (!found) newNotes.push(action.note); | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.notes = newNotes; | ||||
| 				break; | ||||
|  | ||||
| 			case 'NOTES_DELETE': | ||||
|  | ||||
| 				var newNotes = []; | ||||
| 				for (let i = 0; i < state.notes.length; i++) { | ||||
| 					let f = state.notes[i]; | ||||
| 					if (f.id == action.noteId) continue; | ||||
| 					newNotes.push(f); | ||||
| 				} | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.notes = newNotes; | ||||
| 				break; | ||||
|  | ||||
| 			case 'FOLDERS_UPDATE_ALL': | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.folders = action.folders; | ||||
| 				break; | ||||
|  | ||||
| 			case 'FOLDERS_UPDATE_ONE': | ||||
|  | ||||
| 				var newFolders = state.folders.splice(0); | ||||
| 				var found = false; | ||||
| 				for (let i = 0; i < newFolders.length; i++) { | ||||
| 					let n = newFolders[i]; | ||||
| 					if (n.id == action.folder.id) { | ||||
| 						newFolders[i] = action.folder; | ||||
| 						found = true; | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 				if (!found) newFolders.push(action.folder); | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.folders = newFolders; | ||||
| 				break; | ||||
|  | ||||
| 			case 'FOLDER_DELETE': | ||||
|  | ||||
| 				var newFolders = []; | ||||
| 				for (let i = 0; i < state.folders.length; i++) { | ||||
| 					let f = state.folders[i]; | ||||
| 					if (f.id == action.folderId) continue; | ||||
| 					newFolders.push(f); | ||||
| 				} | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.folders = newFolders; | ||||
| 				break; | ||||
|  | ||||
| 			case 'SIDE_MENU_TOGGLE': | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.showSideMenu = !newState.showSideMenu | ||||
| 				break; | ||||
|  | ||||
| 			case 'SIDE_MENU_OPEN': | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.showSideMenu = true | ||||
| 				break; | ||||
|  | ||||
| 			case 'SIDE_MENU_CLOSE': | ||||
|  | ||||
| 				newState = Object.assign({}, state); | ||||
| 				newState.showSideMenu = false | ||||
| 				break; | ||||
|  | ||||
| 		} | ||||
| 	} catch (error) { | ||||
| 		error.message = 'In reducer: ' + error.message; | ||||
| 		throw error; | ||||
| 	} | ||||
|  | ||||
| 	return newState; | ||||
| @@ -223,12 +244,25 @@ async function initialize(dispatch, backButtonHandler) { | ||||
| 	const logDatabase = new Database(new DatabaseDriverReactNative()); | ||||
| 	await logDatabase.open({ name: 'log.sqlite' }); | ||||
| 	await logDatabase.exec(Logger.databaseCreateTableSql()); | ||||
| 	reg.logger().addTarget('database', { database: logDatabase, source: 'm' }); | ||||
|  | ||||
| 	const mainLogger = new Logger(); | ||||
| 	mainLogger.addTarget('database', { database: logDatabase, source: 'm' }); | ||||
| 	mainLogger.addTarget('console'); | ||||
| 	mainLogger.setLevel(Logger.LEVEL_DEBUG); | ||||
| 	mainLogger.addTarget('database', { database: logDatabase, source: 'm' }); | ||||
|  | ||||
| 	reg.setLogger(mainLogger); | ||||
|  | ||||
| 	reg.logger().info('===================================='); | ||||
| 	reg.logger().info('Starting application ' + Setting.value('appId') + ' (' + Setting.value('env') + ')'); | ||||
|  | ||||
| 	const dbLogger = new Logger(); | ||||
| 	dbLogger.addTarget('database', { database: logDatabase, source: 'm' }); | ||||
| 	dbLogger.addTarget('console'); | ||||
| 	dbLogger.setLevel(Logger.LEVEL_INFO); | ||||
|  | ||||
| 	let db = new JoplinDatabase(new DatabaseDriverReactNative()); | ||||
| 	db.setLogger(dbLogger); | ||||
| 	reg.setDb(db); | ||||
|  | ||||
| 	BaseModel.dispatch = dispatch; | ||||
| @@ -271,7 +305,14 @@ async function initialize(dispatch, backButtonHandler) { | ||||
| 			type: 'APPLICATION_LOADING_DONE', | ||||
| 		}); | ||||
|  | ||||
| 		await NotesScreenUtils.openDefaultNoteList(); | ||||
| 		let folderId = Setting.value('activeFolderId'); | ||||
| 		let folder = await Folder.load(folderId); | ||||
|  | ||||
| 		if (folder) { | ||||
| 			await NotesScreenUtils.openNoteList(folderId); | ||||
| 		} else { | ||||
| 			await NotesScreenUtils.openDefaultNoteList(); | ||||
| 		} | ||||
| 	} catch (error) { | ||||
| 		reg.logger().error('Initialization error:', error); | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user