Skip to content

Commit 93a0faa

Browse files
nioljtojnar
authored andcommitted
offline: batch upload offline status changes
This is to avoid getting: PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. after reading a lot of items offline.
1 parent 40ea713 commit 93a0faa

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

assets/js/selfoss-db.js

+21-13
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ selfoss.dbOnline = {
1919
statsDirty: false,
2020
firstSync: true,
2121

22+
itemsDownloadBatchSize: 15,
23+
statusUploadBatchSize: 200,
2224

2325
_syncBegin: function() {
2426
if (!selfoss.dbOnline.syncing) {
@@ -110,7 +112,7 @@ selfoss.dbOnline = {
110112
if (selfoss.db.storage) {
111113
syncParams.itemsSinceId = selfoss.dbOffline.lastItemId;
112114
syncParams.itemsNotBefore = selfoss.dbOffline.newestGCedEntry.toISOString();
113-
syncParams.itemsHowMany = selfoss.filter.itemsPerPage;
115+
syncParams.itemsHowMany = selfoss.dbOnline.itemsDownloadBatchSize;
114116
}
115117

116118
selfoss.dbOnline.statsDirty = false;
@@ -146,21 +148,24 @@ selfoss.dbOnline = {
146148
selfoss.dbOffline
147149
.shouldLoadEntriesOnline = 'lastId' in data
148150
&& data.lastId - selfoss.dbOffline.lastItemId >
149-
2 * selfoss.filter.itemsPerPage;
151+
2 * selfoss.dbOnline.itemsDownloadBatchSize;
150152

151153
selfoss.dbOffline.storeEntries(data.newItems)
152154
.then(function() {
153155
selfoss.dbOffline.storeLastUpdate(dataDate);
154-
155156
selfoss.dbOnline._syncDone();
156-
157-
// fetch more if server has more
158-
if (selfoss.dbOffline.newerEntriesMissing) {
159-
selfoss.dbOnline.sync();
160-
}
161157
});
162158
}
163159

160+
if (selfoss.dbOffline.newerEntriesMissing
161+
|| selfoss.dbOffline.needsSync) {
162+
// There are still new items to fetch
163+
// or statuses to send
164+
syncing.then(function() {
165+
selfoss.dbOffline.sendNewStatuses();
166+
});
167+
}
168+
164169
if ('itemUpdates' in data) {
165170
// refresh entry statuses in db and dequeue queued
166171
// statuses but do not calculate stats as they are taken
@@ -703,8 +708,9 @@ selfoss.dbOffline = {
703708

704709

705710
sendNewStatuses: function() {
706-
selfoss.db.storage.statusq.toArray().then(statuses => {
707-
return statuses.map(s => {
711+
selfoss.dbOffline._tr('r', selfoss.db.storage.statusq, async () => {
712+
const offlineStatusesCount = await selfoss.db.storage.statusq.count();
713+
const statuses = (await selfoss.db.storage.statusq.limit(selfoss.dbOnline.statusUploadBatchSize).toArray()).map(s => {
708714
let statusUpdate = {
709715
id: s.entryId,
710716
datetime: s.datetime
@@ -713,10 +719,12 @@ selfoss.dbOffline = {
713719

714720
return statusUpdate;
715721
});
716-
}).then(statuses => {
722+
717723
const s = statuses.length > 0 ? statuses : undefined;
718-
selfoss.dbOnline.sync(s, true).then(function() {
719-
selfoss.dbOffline.needsSync = false;
724+
selfoss.dbOnline.sync(s, true).then(() => {
725+
if (offlineStatusesCount <= selfoss.dbOnline.statusUploadBatchSize) {
726+
selfoss.dbOffline.needsSync = false;
727+
}
720728
});
721729
});
722730

0 commit comments

Comments
 (0)