You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-29 22:48:10 +02:00
All: Started resource fetcher service when a note has been decrypted
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
const Setting = require('lib/models/Setting');
|
||||
const Tag = require('lib/models/Tag');
|
||||
const BaseModel = require('lib/BaseModel');
|
||||
const Note = require('lib/models/Note');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const ResourceFetcher = require('lib/services/ResourceFetcher');
|
||||
@@ -18,8 +19,14 @@ const reduxSharedMiddleware = async function(store, next, action) {
|
||||
reg.resetSyncTarget();
|
||||
}
|
||||
|
||||
let mustAutoAddResources = false;
|
||||
|
||||
if (action.type === 'SETTING_UPDATE_ONE' && action.key === 'sync.resourceDownloadMode') {
|
||||
ResourceFetcher.instance().autoAddResources();
|
||||
mustAutoAddResources = true;
|
||||
}
|
||||
|
||||
if (action.type === 'DECRYPTION_WORKER_SET' && action.state === 'idle' && action.decryptedItemCounts && !!action.decryptedItemCounts[BaseModel.TYPE_NOTE]) {
|
||||
mustAutoAddResources = true;
|
||||
}
|
||||
|
||||
// In general the DecryptionWorker is started via events, such as when an encrypted note
|
||||
@@ -70,6 +77,9 @@ const reduxSharedMiddleware = async function(store, next, action) {
|
||||
});
|
||||
}
|
||||
|
||||
if (mustAutoAddResources) {
|
||||
ResourceFetcher.instance().autoAddResources();
|
||||
}
|
||||
|
||||
if (refreshTags) {
|
||||
store.dispatch({
|
||||
|
||||
@@ -45,6 +45,7 @@ const defaultState = {
|
||||
state: 'idle',
|
||||
itemIndex: 0,
|
||||
itemCount: 0,
|
||||
decryptedItemCounts: {},
|
||||
},
|
||||
selectedNoteTags: [],
|
||||
resourceFetcher: {
|
||||
@@ -415,6 +416,8 @@ function removeItemFromArray(array, property, value) {
|
||||
}
|
||||
|
||||
const reducer = (state = defaultState, action) => {
|
||||
// if (!['SIDE_MENU_OPEN_PERCENT'].includes(action.type)) console.info('Action', action.type);
|
||||
|
||||
let newState = state;
|
||||
|
||||
try {
|
||||
|
||||
@@ -137,6 +137,7 @@ class DecryptionWorker {
|
||||
this.state_ = 'started';
|
||||
|
||||
const excludedIds = [];
|
||||
const decryptedItemCounts = {};
|
||||
|
||||
this.dispatch({ type: 'ENCRYPTION_HAS_DISABLED_ITEMS', value: false });
|
||||
this.dispatchReport({ state: 'started' });
|
||||
@@ -179,6 +180,10 @@ class DecryptionWorker {
|
||||
|
||||
await clearDecryptionCounter();
|
||||
|
||||
if (!decryptedItemCounts[decryptedItem.type_]) decryptedItemCounts[decryptedItem.type_] = 0;
|
||||
|
||||
decryptedItemCounts[decryptedItem.type_]++;
|
||||
|
||||
if (decryptedItem.type_ === Resource.modelType() && !!decryptedItem.encryption_blob_encrypted) {
|
||||
// itemsThatNeedDecryption() will return the resource again if the blob has not been decrypted,
|
||||
// but that will result in an infinite loop if the blob simply has not been downloaded yet.
|
||||
@@ -240,7 +245,10 @@ class DecryptionWorker {
|
||||
|
||||
this.state_ = 'idle';
|
||||
|
||||
this.dispatchReport({ state: 'idle' });
|
||||
this.dispatchReport({
|
||||
state: 'idle',
|
||||
decryptedItemCounts: decryptedItemCounts,
|
||||
});
|
||||
|
||||
if (downloadedButEncryptedBlobCount) {
|
||||
this.logger().info(`DecryptionWorker: Some resources have been downloaded but are not decrypted yet. Scheduling another decryption. Resource count: ${downloadedButEncryptedBlobCount}`);
|
||||
|
||||
Reference in New Issue
Block a user