You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-26 22:41:17 +02:00
Chore: Refactor mobile plugin logic into locations more consistent with other parts of the app (#10636)
This commit is contained in:
@@ -596,6 +596,27 @@ packages/app-mobile/components/buttons/index.js
|
|||||||
packages/app-mobile/components/getResponsiveValue.test.js
|
packages/app-mobile/components/getResponsiveValue.test.js
|
||||||
packages/app-mobile/components/getResponsiveValue.js
|
packages/app-mobile/components/getResponsiveValue.js
|
||||||
packages/app-mobile/components/global-style.js
|
packages/app-mobile/components/global-style.js
|
||||||
|
packages/app-mobile/components/plugins/PluginRunner.js
|
||||||
|
packages/app-mobile/components/plugins/PluginRunnerWebView.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/initializeDialogWebView.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/initializePluginBackgroundIframe.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/pluginRunnerBackgroundPage.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/startStopPlugin.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/getFormData.test.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/getFormData.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/makeSandboxedIframe.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/reportUnhandledErrors.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/wrapConsoleLog.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginDialogManager.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginDialogWebView.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginPanelViewer.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginUserWebView.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useDialogMessenger.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useDialogSize.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useViewInfos.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useWebViewSetup.js
|
||||||
|
packages/app-mobile/components/plugins/types.js
|
||||||
|
packages/app-mobile/components/plugins/utils/createOnLogHandler.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js
|
packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js
|
||||||
@@ -660,36 +681,11 @@ packages/app-mobile/components/screens/status.js
|
|||||||
packages/app-mobile/components/side-menu-content.js
|
packages/app-mobile/components/side-menu-content.js
|
||||||
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
||||||
packages/app-mobile/gulpfile.js
|
packages/app-mobile/gulpfile.js
|
||||||
packages/app-mobile/plugins/PlatformImplementation.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/PluginRunner.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/PluginRunnerWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializeDialogWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializePluginBackgroundIframe.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/pluginRunnerBackgroundPage.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/startStopPlugin.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.test.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/makeSandboxedIframe.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/reportUnhandledErrors.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/wrapConsoleLog.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginDialogManager.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginDialogWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginPanelViewer.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginUserWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useDialogMessenger.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useDialogSize.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useViewInfos.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useWebViewSetup.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/types.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/utils/createOnLogHandler.js
|
|
||||||
packages/app-mobile/plugins/hooks/usePlugin.js
|
|
||||||
packages/app-mobile/plugins/loadPlugins.test.js
|
|
||||||
packages/app-mobile/plugins/loadPlugins.js
|
|
||||||
packages/app-mobile/plugins/testing/MockPluginRunner.js
|
|
||||||
packages/app-mobile/root.js
|
packages/app-mobile/root.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.android.js
|
packages/app-mobile/services/AlarmServiceDriver.android.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
||||||
packages/app-mobile/services/e2ee/RSA.react-native.js
|
packages/app-mobile/services/e2ee/RSA.react-native.js
|
||||||
|
packages/app-mobile/services/plugins/PlatformImplementation.js
|
||||||
packages/app-mobile/services/profiles/index.js
|
packages/app-mobile/services/profiles/index.js
|
||||||
packages/app-mobile/services/voiceTyping/vosk.android.js
|
packages/app-mobile/services/voiceTyping/vosk.android.js
|
||||||
packages/app-mobile/services/voiceTyping/vosk.ios.js
|
packages/app-mobile/services/voiceTyping/vosk.ios.js
|
||||||
@@ -898,6 +894,7 @@ packages/lib/geolocation-node.js
|
|||||||
packages/lib/hooks/useAsyncEffect.js
|
packages/lib/hooks/useAsyncEffect.js
|
||||||
packages/lib/hooks/useElementSize.js
|
packages/lib/hooks/useElementSize.js
|
||||||
packages/lib/hooks/useEventListener.js
|
packages/lib/hooks/useEventListener.js
|
||||||
|
packages/lib/hooks/usePlugin.js
|
||||||
packages/lib/hooks/usePrevious.js
|
packages/lib/hooks/usePrevious.js
|
||||||
packages/lib/htmlUtils.test.js
|
packages/lib/htmlUtils.test.js
|
||||||
packages/lib/htmlUtils.js
|
packages/lib/htmlUtils.js
|
||||||
@@ -1110,7 +1107,11 @@ packages/lib/services/plugins/api/noteListType.js
|
|||||||
packages/lib/services/plugins/api/types.js
|
packages/lib/services/plugins/api/types.js
|
||||||
packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.js
|
packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.js
|
||||||
packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.js
|
packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.js
|
||||||
|
packages/lib/services/plugins/loadPlugins.test.js
|
||||||
|
packages/lib/services/plugins/loadPlugins.js
|
||||||
packages/lib/services/plugins/reducer.js
|
packages/lib/services/plugins/reducer.js
|
||||||
|
packages/lib/services/plugins/testing/MockPlatformImplementation.js
|
||||||
|
packages/lib/services/plugins/testing/MockPluginRunner.js
|
||||||
packages/lib/services/plugins/utils/createViewHandle.js
|
packages/lib/services/plugins/utils/createViewHandle.js
|
||||||
packages/lib/services/plugins/utils/executeSandboxCall.js
|
packages/lib/services/plugins/utils/executeSandboxCall.js
|
||||||
packages/lib/services/plugins/utils/getPluginIssueReportUrl.test.js
|
packages/lib/services/plugins/utils/getPluginIssueReportUrl.test.js
|
||||||
|
|||||||
53
.gitignore
vendored
53
.gitignore
vendored
@@ -575,6 +575,27 @@ packages/app-mobile/components/buttons/index.js
|
|||||||
packages/app-mobile/components/getResponsiveValue.test.js
|
packages/app-mobile/components/getResponsiveValue.test.js
|
||||||
packages/app-mobile/components/getResponsiveValue.js
|
packages/app-mobile/components/getResponsiveValue.js
|
||||||
packages/app-mobile/components/global-style.js
|
packages/app-mobile/components/global-style.js
|
||||||
|
packages/app-mobile/components/plugins/PluginRunner.js
|
||||||
|
packages/app-mobile/components/plugins/PluginRunnerWebView.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/initializeDialogWebView.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/initializePluginBackgroundIframe.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/pluginRunnerBackgroundPage.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/startStopPlugin.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/getFormData.test.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/getFormData.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/makeSandboxedIframe.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/reportUnhandledErrors.js
|
||||||
|
packages/app-mobile/components/plugins/backgroundPage/utils/wrapConsoleLog.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginDialogManager.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginDialogWebView.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginPanelViewer.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/PluginUserWebView.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useDialogMessenger.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useDialogSize.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useViewInfos.js
|
||||||
|
packages/app-mobile/components/plugins/dialogs/hooks/useWebViewSetup.js
|
||||||
|
packages/app-mobile/components/plugins/types.js
|
||||||
|
packages/app-mobile/components/plugins/utils/createOnLogHandler.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js
|
packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js
|
||||||
@@ -639,36 +660,11 @@ packages/app-mobile/components/screens/status.js
|
|||||||
packages/app-mobile/components/side-menu-content.js
|
packages/app-mobile/components/side-menu-content.js
|
||||||
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
||||||
packages/app-mobile/gulpfile.js
|
packages/app-mobile/gulpfile.js
|
||||||
packages/app-mobile/plugins/PlatformImplementation.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/PluginRunner.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/PluginRunnerWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializeDialogWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializePluginBackgroundIframe.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/pluginRunnerBackgroundPage.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/startStopPlugin.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.test.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/makeSandboxedIframe.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/reportUnhandledErrors.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/wrapConsoleLog.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginDialogManager.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginDialogWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginPanelViewer.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/PluginUserWebView.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useDialogMessenger.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useDialogSize.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useViewInfos.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useWebViewSetup.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/types.js
|
|
||||||
packages/app-mobile/plugins/PluginRunner/utils/createOnLogHandler.js
|
|
||||||
packages/app-mobile/plugins/hooks/usePlugin.js
|
|
||||||
packages/app-mobile/plugins/loadPlugins.test.js
|
|
||||||
packages/app-mobile/plugins/loadPlugins.js
|
|
||||||
packages/app-mobile/plugins/testing/MockPluginRunner.js
|
|
||||||
packages/app-mobile/root.js
|
packages/app-mobile/root.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.android.js
|
packages/app-mobile/services/AlarmServiceDriver.android.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
||||||
packages/app-mobile/services/e2ee/RSA.react-native.js
|
packages/app-mobile/services/e2ee/RSA.react-native.js
|
||||||
|
packages/app-mobile/services/plugins/PlatformImplementation.js
|
||||||
packages/app-mobile/services/profiles/index.js
|
packages/app-mobile/services/profiles/index.js
|
||||||
packages/app-mobile/services/voiceTyping/vosk.android.js
|
packages/app-mobile/services/voiceTyping/vosk.android.js
|
||||||
packages/app-mobile/services/voiceTyping/vosk.ios.js
|
packages/app-mobile/services/voiceTyping/vosk.ios.js
|
||||||
@@ -877,6 +873,7 @@ packages/lib/geolocation-node.js
|
|||||||
packages/lib/hooks/useAsyncEffect.js
|
packages/lib/hooks/useAsyncEffect.js
|
||||||
packages/lib/hooks/useElementSize.js
|
packages/lib/hooks/useElementSize.js
|
||||||
packages/lib/hooks/useEventListener.js
|
packages/lib/hooks/useEventListener.js
|
||||||
|
packages/lib/hooks/usePlugin.js
|
||||||
packages/lib/hooks/usePrevious.js
|
packages/lib/hooks/usePrevious.js
|
||||||
packages/lib/htmlUtils.test.js
|
packages/lib/htmlUtils.test.js
|
||||||
packages/lib/htmlUtils.js
|
packages/lib/htmlUtils.js
|
||||||
@@ -1089,7 +1086,11 @@ packages/lib/services/plugins/api/noteListType.js
|
|||||||
packages/lib/services/plugins/api/types.js
|
packages/lib/services/plugins/api/types.js
|
||||||
packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.js
|
packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.js
|
||||||
packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.js
|
packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.js
|
||||||
|
packages/lib/services/plugins/loadPlugins.test.js
|
||||||
|
packages/lib/services/plugins/loadPlugins.js
|
||||||
packages/lib/services/plugins/reducer.js
|
packages/lib/services/plugins/reducer.js
|
||||||
|
packages/lib/services/plugins/testing/MockPlatformImplementation.js
|
||||||
|
packages/lib/services/plugins/testing/MockPluginRunner.js
|
||||||
packages/lib/services/plugins/utils/createViewHandle.js
|
packages/lib/services/plugins/utils/createViewHandle.js
|
||||||
packages/lib/services/plugins/utils/executeSandboxCall.js
|
packages/lib/services/plugins/utils/executeSandboxCall.js
|
||||||
packages/lib/services/plugins/utils/getPluginIssueReportUrl.test.js
|
packages/lib/services/plugins/utils/getPluginIssueReportUrl.test.js
|
||||||
|
|||||||
12
packages/app-mobile/.gitignore
vendored
12
packages/app-mobile/.gitignore
vendored
@@ -66,14 +66,10 @@ yarn-error.log
|
|||||||
lib/csstojs/
|
lib/csstojs/
|
||||||
lib/rnInjectedJs/
|
lib/rnInjectedJs/
|
||||||
dist/
|
dist/
|
||||||
plugins/sources/*
|
components/**/*.bundle.js
|
||||||
plugins/PluginRunner/**/*.bundle.js
|
components/**/*.bundle.js.LICENSE.txt
|
||||||
components/NoteBodyViewer/**/*.bundle.js
|
components/**/*.bundle.js.md5
|
||||||
components/NoteBodyViewer/**/*.bundle.js.LICENSE.txt
|
components/**/*.bundle.min.js
|
||||||
components/NoteEditor/**/*.bundle.js
|
|
||||||
components/NoteEditor/**/*.bundle.js.md5
|
|
||||||
components/NoteEditor/**/*.bundle.min.js
|
|
||||||
components/NoteEditor/**/*.bundle.js.LICENSE.txt
|
|
||||||
|
|
||||||
utils/fs-driver-android.js
|
utils/fs-driver-android.js
|
||||||
android/app/build-*
|
android/app/build-*
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
|
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import ExtendedWebView, { WebViewControl } from '../../components/ExtendedWebView';
|
import ExtendedWebView, { WebViewControl } from '../../components/ExtendedWebView';
|
||||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||||
import shim from '@joplin/lib/shim';
|
import shim from '@joplin/lib/shim';
|
||||||
import PluginRunner from './PluginRunner';
|
import PluginRunner from './PluginRunner';
|
||||||
import loadPlugins from '../loadPlugins';
|
import loadPlugins from '@joplin/lib/services/plugins/loadPlugins';
|
||||||
import { connect, useStore } from 'react-redux';
|
import { connect, useStore } from 'react-redux';
|
||||||
import Logger from '@joplin/utils/Logger';
|
import Logger from '@joplin/utils/Logger';
|
||||||
import { View } from 'react-native';
|
import { View } from 'react-native';
|
||||||
@@ -14,6 +13,7 @@ import useAsyncEffect from '@joplin/lib/hooks/useAsyncEffect';
|
|||||||
import PluginDialogManager from './dialogs/PluginDialogManager';
|
import PluginDialogManager from './dialogs/PluginDialogManager';
|
||||||
import { AppState } from '../../utils/types';
|
import { AppState } from '../../utils/types';
|
||||||
import usePrevious from '@joplin/lib/hooks/usePrevious';
|
import usePrevious from '@joplin/lib/hooks/usePrevious';
|
||||||
|
import PlatformImplementation from '../../services/plugins/PlatformImplementation';
|
||||||
|
|
||||||
const logger = Logger.create('PluginRunnerWebView');
|
const logger = Logger.create('PluginRunnerWebView');
|
||||||
|
|
||||||
@@ -42,7 +42,14 @@ const usePlugins = (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await loadPlugins({ pluginRunner, pluginSettings, store, reloadAll: reloadAllRef.current, cancelEvent: event });
|
await loadPlugins({
|
||||||
|
pluginRunner,
|
||||||
|
pluginSettings,
|
||||||
|
platformImplementation: PlatformImplementation.instance(),
|
||||||
|
store,
|
||||||
|
reloadAll: reloadAllRef.current,
|
||||||
|
cancelEvent: event,
|
||||||
|
});
|
||||||
|
|
||||||
// A full reload, if it was necessary, has been completed.
|
// A full reload, if it was necessary, has been completed.
|
||||||
if (!event.cancelled) {
|
if (!event.cancelled) {
|
||||||
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|||||||
import { useCallback, useMemo, useState } from 'react';
|
import { useCallback, useMemo, useState } from 'react';
|
||||||
import { PluginHtmlContents, PluginStates, ViewInfo } from '@joplin/lib/services/plugins/reducer';
|
import { PluginHtmlContents, PluginStates, ViewInfo } from '@joplin/lib/services/plugins/reducer';
|
||||||
import { StyleSheet, View, useWindowDimensions } from 'react-native';
|
import { StyleSheet, View, useWindowDimensions } from 'react-native';
|
||||||
import usePlugin from '../../hooks/usePlugin';
|
import usePlugin from '@joplin/lib/hooks/usePlugin';
|
||||||
import { DialogContentSize, DialogWebViewApi } from '../types';
|
import { DialogContentSize, DialogWebViewApi } from '../types';
|
||||||
import { Button } from 'react-native-paper';
|
import { Button } from 'react-native-paper';
|
||||||
import { themeStyle } from '@joplin/lib/theme';
|
import { themeStyle } from '@joplin/lib/theme';
|
||||||
@@ -3,7 +3,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|||||||
import { PluginHtmlContents, ViewInfo } from '@joplin/lib/services/plugins/reducer';
|
import { PluginHtmlContents, ViewInfo } from '@joplin/lib/services/plugins/reducer';
|
||||||
import ExtendedWebView, { WebViewControl } from '../../../components/ExtendedWebView';
|
import ExtendedWebView, { WebViewControl } from '../../../components/ExtendedWebView';
|
||||||
import { ViewStyle } from 'react-native';
|
import { ViewStyle } from 'react-native';
|
||||||
import usePlugin from '../../hooks/usePlugin';
|
import usePlugin from '@joplin/lib/hooks/usePlugin';
|
||||||
import shim from '@joplin/lib/shim';
|
import shim from '@joplin/lib/shim';
|
||||||
import useDialogMessenger from './hooks/useDialogMessenger';
|
import useDialogMessenger from './hooks/useDialogMessenger';
|
||||||
import useWebViewSetup from './hooks/useWebViewSetup';
|
import useWebViewSetup from './hooks/useWebViewSetup';
|
||||||
@@ -2,7 +2,7 @@ import { PluginItem } from '@joplin/lib/components/shared/config/plugins/types';
|
|||||||
import { PluginSettings } from '@joplin/lib/services/plugins/PluginService';
|
import { PluginSettings } from '@joplin/lib/services/plugins/PluginService';
|
||||||
import { PluginManifest } from '@joplin/lib/services/plugins/utils/types';
|
import { PluginManifest } from '@joplin/lib/services/plugins/utils/types';
|
||||||
import { useMemo, useRef } from 'react';
|
import { useMemo, useRef } from 'react';
|
||||||
import usePlugin from '../../../../../plugins/hooks/usePlugin';
|
import usePlugin from '@joplin/lib/hooks/usePlugin';
|
||||||
|
|
||||||
// initialItem is used when the plugin is not installed. For example, if the plugin item is being
|
// initialItem is used when the plugin is not installed. For example, if the plugin item is being
|
||||||
// created from search results.
|
// created from search results.
|
||||||
|
|||||||
@@ -122,12 +122,12 @@ import { ReactNode } from 'react';
|
|||||||
import { parseShareCache } from '@joplin/lib/services/share/reducer';
|
import { parseShareCache } from '@joplin/lib/services/share/reducer';
|
||||||
import autodetectTheme, { onSystemColorSchemeChange } from './utils/autodetectTheme';
|
import autodetectTheme, { onSystemColorSchemeChange } from './utils/autodetectTheme';
|
||||||
import runOnDeviceFsDriverTests from './utils/fs-driver/runOnDeviceTests';
|
import runOnDeviceFsDriverTests from './utils/fs-driver/runOnDeviceTests';
|
||||||
import PluginRunnerWebView from './plugins/PluginRunner/PluginRunnerWebView';
|
import PluginRunnerWebView from './components/plugins/PluginRunnerWebView';
|
||||||
import { refreshFolders, scheduleRefreshFolders } from '@joplin/lib/folders-screen-utils';
|
import { refreshFolders, scheduleRefreshFolders } from '@joplin/lib/folders-screen-utils';
|
||||||
import KeymapService from '@joplin/lib/services/KeymapService';
|
import KeymapService from '@joplin/lib/services/KeymapService';
|
||||||
import PluginService from '@joplin/lib/services/plugins/PluginService';
|
import PluginService from '@joplin/lib/services/plugins/PluginService';
|
||||||
import initializeCommandService from './utils/initializeCommandService';
|
import initializeCommandService from './utils/initializeCommandService';
|
||||||
import PlatformImplementation from './plugins/PlatformImplementation';
|
import PlatformImplementation from './services/plugins/PlatformImplementation';
|
||||||
import ShareManager from './components/screens/ShareManager';
|
import ShareManager from './components/screens/ShareManager';
|
||||||
import appDefaultState, { DEFAULT_ROUTE } from './utils/appDefaultState';
|
import appDefaultState, { DEFAULT_ROUTE } from './utils/appDefaultState';
|
||||||
import { setDateFormat, setTimeFormat, setTimeLocale } from '@joplin/utils/time';
|
import { setDateFormat, setTimeFormat, setTimeLocale } from '@joplin/utils/time';
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ const jsDrawBundle = new BundledFile(
|
|||||||
|
|
||||||
const pluginBackgroundPageBundle = new BundledFile(
|
const pluginBackgroundPageBundle = new BundledFile(
|
||||||
'pluginBackgroundPage',
|
'pluginBackgroundPage',
|
||||||
`${mobileDir}/plugins/PluginRunner/backgroundPage/pluginRunnerBackgroundPage.ts`,
|
`${mobileDir}/components/plugins/backgroundPage/pluginRunnerBackgroundPage.ts`,
|
||||||
);
|
);
|
||||||
|
|
||||||
const noteViewerBundle = new BundledFile(
|
const noteViewerBundle = new BundledFile(
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
import PluginService from '@joplin/lib/services/plugins/PluginService';
|
import PluginService from '../services/plugins/PluginService';
|
||||||
import Logger from '@joplin/utils/Logger';
|
import Logger from '@joplin/utils/Logger';
|
||||||
import { useEffect, useMemo, useRef, useState } from 'react';
|
import shim from '../shim';
|
||||||
|
|
||||||
const logger = Logger.create('usePlugin');
|
const logger = Logger.create('usePlugin');
|
||||||
|
|
||||||
const usePlugin = (pluginId: string) => {
|
const usePlugin = (pluginId: string) => {
|
||||||
const [pluginReloadCounter, setPluginReloadCounter] = useState(0);
|
const React = shim.react();
|
||||||
|
const [pluginReloadCounter, setPluginReloadCounter] = React.useState(0);
|
||||||
|
|
||||||
const plugin = useMemo(() => {
|
const plugin = React.useMemo(() => {
|
||||||
if (!PluginService.instance().pluginIds.includes(pluginId)) {
|
if (!PluginService.instance().pluginIds.includes(pluginId)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -21,12 +22,12 @@ const usePlugin = (pluginId: string) => {
|
|||||||
// matches the one loaded in the PluginService.
|
// matches the one loaded in the PluginService.
|
||||||
}, [pluginId, pluginReloadCounter]);
|
}, [pluginId, pluginReloadCounter]);
|
||||||
|
|
||||||
const reloadCounterRef = useRef(0);
|
const reloadCounterRef = React.useRef(0);
|
||||||
reloadCounterRef.current = pluginReloadCounter;
|
reloadCounterRef.current = pluginReloadCounter;
|
||||||
|
|
||||||
// The plugin may need to be re-fetched from the PluginService. When a plugin is reloaded,
|
// The plugin may need to be re-fetched from the PluginService. When a plugin is reloaded,
|
||||||
// its Plugin object is replaced with a new one.
|
// its Plugin object is replaced with a new one.
|
||||||
useEffect(() => {
|
React.useEffect(() => {
|
||||||
const { remove } = PluginService.instance().addLoadedPluginsChangeListener(() => {
|
const { remove } = PluginService.instance().addLoadedPluginsChangeListener(() => {
|
||||||
setPluginReloadCounter(reloadCounterRef.current + 1);
|
setPluginReloadCounter(reloadCounterRef.current + 1);
|
||||||
});
|
});
|
||||||
@@ -1,12 +1,20 @@
|
|||||||
import Setting from '@joplin/lib/models/Setting';
|
import Setting from '../../models/Setting';
|
||||||
import PluginService, { defaultPluginSetting } from '@joplin/lib/services/plugins/PluginService';
|
import PluginService, { defaultPluginSetting } from '../../services/plugins/PluginService';
|
||||||
import { PluginManifest } from '@joplin/lib/services/plugins/utils/types';
|
import { PluginManifest } from '../../services/plugins/utils/types';
|
||||||
import { setupDatabaseAndSynchronizer, switchClient } from '@joplin/lib/testing/test-utils';
|
import { setupDatabaseAndSynchronizer, switchClient } from '../../testing/test-utils';
|
||||||
import { writeFile } from 'fs-extra';
|
import { writeFile } from 'fs-extra';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import loadPlugins, { Props as LoadPluginsProps } from './loadPlugins';
|
import loadPlugins, { Props as LoadPluginsProps } from './loadPlugins';
|
||||||
import createMockReduxStore from '../utils/testing/createMockReduxStore';
|
|
||||||
import MockPluginRunner from './testing/MockPluginRunner';
|
import MockPluginRunner from './testing/MockPluginRunner';
|
||||||
|
import reducer, { State, defaultState } from '../../reducer';
|
||||||
|
import { Action, createStore } from 'redux';
|
||||||
|
import MockPlatformImplementation from './testing/MockPlatformImplementation';
|
||||||
|
|
||||||
|
const createMockReduxStore = () => {
|
||||||
|
return createStore((state: State = defaultState, action: Action<unknown>) => {
|
||||||
|
return reducer(state, action);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const setPluginEnabled = (id: string, enabled: boolean) => {
|
const setPluginEnabled = (id: string, enabled: boolean) => {
|
||||||
const newPluginStates = {
|
const newPluginStates = {
|
||||||
@@ -42,6 +50,8 @@ const defaultManifestProperties = {
|
|||||||
platforms: ['desktop', 'mobile'],
|
platforms: ['desktop', 'mobile'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const platformImplementation = new MockPlatformImplementation();
|
||||||
|
|
||||||
describe('loadPlugins', () => {
|
describe('loadPlugins', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await setupDatabaseAndSynchronizer(1);
|
await setupDatabaseAndSynchronizer(1);
|
||||||
@@ -75,6 +85,7 @@ describe('loadPlugins', () => {
|
|||||||
const loadPluginsOptions: LoadPluginsProps = {
|
const loadPluginsOptions: LoadPluginsProps = {
|
||||||
pluginRunner,
|
pluginRunner,
|
||||||
pluginSettings: Setting.value('plugins.states'),
|
pluginSettings: Setting.value('plugins.states'),
|
||||||
|
platformImplementation,
|
||||||
store,
|
store,
|
||||||
reloadAll: false,
|
reloadAll: false,
|
||||||
cancelEvent: { cancelled: false },
|
cancelEvent: { cancelled: false },
|
||||||
@@ -120,6 +131,7 @@ describe('loadPlugins', () => {
|
|||||||
const loadPluginsOptions: LoadPluginsProps = {
|
const loadPluginsOptions: LoadPluginsProps = {
|
||||||
pluginRunner,
|
pluginRunner,
|
||||||
pluginSettings: Setting.value('plugins.states'),
|
pluginSettings: Setting.value('plugins.states'),
|
||||||
|
platformImplementation,
|
||||||
store,
|
store,
|
||||||
reloadAll: true,
|
reloadAll: true,
|
||||||
cancelEvent: { cancelled: false },
|
cancelEvent: { cancelled: false },
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import Setting from '@joplin/lib/models/Setting';
|
import Setting from '../../models/Setting';
|
||||||
import BasePluginRunner from '@joplin/lib/services/plugins/BasePluginRunner';
|
import BasePluginRunner from '../plugins/BasePluginRunner';
|
||||||
import PluginService, { PluginSettings } from '@joplin/lib/services/plugins/PluginService';
|
import PluginService, { PluginSettings } from '../../services/plugins/PluginService';
|
||||||
import PlatformImplementation from './PlatformImplementation';
|
|
||||||
import { Store } from 'redux';
|
import { Store } from 'redux';
|
||||||
import Logger from '@joplin/utils/Logger';
|
import Logger from '@joplin/utils/Logger';
|
||||||
import shim from '@joplin/lib/shim';
|
import shim from '../../shim';
|
||||||
import { AppState } from '../utils/types';
|
import { State as AppState } from '../../reducer';
|
||||||
|
import BasePlatformImplementation from './BasePlatformImplementation';
|
||||||
|
|
||||||
const logger = Logger.create('loadPlugins');
|
const logger = Logger.create('loadPlugins');
|
||||||
|
|
||||||
@@ -14,15 +14,22 @@ type CancelEvent = { cancelled: boolean };
|
|||||||
export interface Props {
|
export interface Props {
|
||||||
pluginRunner: BasePluginRunner;
|
pluginRunner: BasePluginRunner;
|
||||||
pluginSettings: PluginSettings;
|
pluginSettings: PluginSettings;
|
||||||
|
platformImplementation: BasePlatformImplementation;
|
||||||
store: Store<AppState>;
|
store: Store<AppState>;
|
||||||
reloadAll: boolean;
|
reloadAll: boolean;
|
||||||
cancelEvent: CancelEvent;
|
cancelEvent: CancelEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadPlugins = async ({ pluginRunner, pluginSettings, store, reloadAll, cancelEvent }: Props) => {
|
const loadPlugins = async ({
|
||||||
|
pluginRunner,
|
||||||
|
platformImplementation,
|
||||||
|
pluginSettings,
|
||||||
|
store,
|
||||||
|
reloadAll,
|
||||||
|
cancelEvent,
|
||||||
|
}: Props) => {
|
||||||
try {
|
try {
|
||||||
const pluginService = PluginService.instance();
|
const pluginService = PluginService.instance();
|
||||||
const platformImplementation = PlatformImplementation.instance();
|
|
||||||
pluginService.initialize(
|
pluginService.initialize(
|
||||||
platformImplementation.versionInfo.version, platformImplementation, pluginRunner, store,
|
platformImplementation.versionInfo.version, platformImplementation, pluginRunner, store,
|
||||||
);
|
);
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
import BasePlatformImplementation from '../BasePlatformImplementation';
|
||||||
|
import shim from '../../../shim';
|
||||||
|
import Setting from '../../../models/Setting';
|
||||||
|
import { reg } from '../../../registry';
|
||||||
|
import { Implementation as ImagingImplementation } from '../api/JoplinImaging';
|
||||||
|
|
||||||
|
export default class MockPlatformImplementation extends BasePlatformImplementation {
|
||||||
|
public override get versionInfo() {
|
||||||
|
return {
|
||||||
|
version: shim.appVersion(),
|
||||||
|
syncVersion: Setting.value('syncVersion'),
|
||||||
|
platform: 'desktop' as 'desktop',
|
||||||
|
profileVersion: reg.db().version(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override get nativeImage(): null {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override get imaging(): ImagingImplementation {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override get window(): null {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override get joplin() {
|
||||||
|
return { views: { dialogs: { showMessageBox: jest.fn(), showOpenDialog: jest.fn() } } };
|
||||||
|
}
|
||||||
|
|
||||||
|
public override get clipboard(): null {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
import BasePluginRunner from '@joplin/lib/services/plugins/BasePluginRunner';
|
import BasePluginRunner from '../../../services/plugins/BasePluginRunner';
|
||||||
import Plugin from '@joplin/lib/services/plugins/Plugin';
|
import Plugin from '../../../services/plugins/Plugin';
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: Merge this with the plugin runner in app-cli, which, at the time of this writing,
|
||||||
|
// was used only for tests.
|
||||||
export default class MockPluginRunner extends BasePluginRunner {
|
export default class MockPluginRunner extends BasePluginRunner {
|
||||||
public runningPluginIds: string[] = [];
|
public runningPluginIds: string[] = [];
|
||||||
private onRunningPluginsChangedListeners_ = [() => {}];
|
private onRunningPluginsChangedListeners_ = [() => {}];
|
||||||
@@ -350,7 +350,7 @@ const shim = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
appVersion: (): any => {
|
appVersion: (): string => {
|
||||||
throw new Error('Not implemented: appVersion');
|
throw new Error('Not implemented: appVersion');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user