Skip to content

Commit 2497f81

Browse files
committed
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 de103f5 commit 2497f81

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

public/js/selfoss-db.js

+21-10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ selfoss.dbOnline = {
1717
statsDirty: false,
1818
firstSync: true,
1919

20+
itemsDownloadBatchSize: 15,
21+
statusUploadBatchSize: 200,
2022

2123
_syncBegin: function() {
2224
if (!selfoss.dbOnline.syncing) {
@@ -108,7 +110,7 @@ selfoss.dbOnline = {
108110
if (selfoss.db.storage) {
109111
syncParams.itemsSinceId = selfoss.dbOffline.lastItemId;
110112
syncParams.itemsNotBefore = selfoss.dbOffline.newestGCedEntry.toISOString();
111-
syncParams.itemsHowMany = selfoss.filter.itemsPerPage;
113+
syncParams.itemsHowMany = selfoss.dbOnline.itemsDownloadBatchSize;
112114
}
113115

114116
selfoss.dbOnline.statsDirty = false;
@@ -144,21 +146,24 @@ selfoss.dbOnline = {
144146
selfoss.dbOffline
145147
.shouldLoadEntriesOnline = 'lastId' in data
146148
&& data.lastId - selfoss.dbOffline.lastItemId >
147-
2 * selfoss.filter.itemsPerPage;
149+
2 * selfoss.dbOnline.itemsDownloadBatchSize;
148150

149151
selfoss.dbOffline.storeEntries(data.newItems)
150152
.then(function() {
151153
selfoss.dbOffline.storeLastUpdate(dataDate);
152-
153154
selfoss.dbOnline._syncDone();
154-
155-
// fetch more if server has more
156-
if (selfoss.dbOffline.newerEntriesMissing) {
157-
selfoss.dbOnline.sync();
158-
}
159155
});
160156
}
161157

158+
if (selfoss.dbOffline.newerEntriesMissing
159+
|| selfoss.dbOffline.needsSync) {
160+
// There are still new items to fetch
161+
// or statuses to send
162+
syncing.then(function() {
163+
selfoss.dbOffline.sendNewStatuses();
164+
});
165+
}
166+
162167
if ('itemUpdates' in data) {
163168
// refresh entry statuses in db and dequeue queued
164169
// statuses but do not calculate stats as they are taken
@@ -705,8 +710,12 @@ selfoss.dbOffline = {
705710

706711
sendNewStatuses: function() {
707712
var statuses = [];
713+
var offlineStatusesCount = 0;
708714
selfoss.dbOffline._tr('r', selfoss.db.storage.statusq, function() {
709-
selfoss.db.storage.statusq.each(function(s) {
715+
selfoss.db.storage.statusq.count().then(function(c) {
716+
offlineStatusesCount = c;
717+
});
718+
selfoss.db.storage.statusq.limit(selfoss.dbOnline.statusUploadBatchSize).each(function(s) {
710719
var statusUpdate = {
711720
id: s.entryId,
712721
datetime: s.datetime
@@ -720,7 +729,9 @@ selfoss.dbOffline = {
720729
s = statuses;
721730
}
722731
selfoss.dbOnline.sync(s, true).then(function() {
723-
selfoss.dbOffline.needsSync = false;
732+
if (offlineStatusesCount <= selfoss.dbOnline.statusUploadBatchSize) {
733+
selfoss.dbOffline.needsSync = false;
734+
}
724735
});
725736
});
726737

0 commit comments

Comments
 (0)