@@ -19,6 +19,8 @@ selfoss.dbOnline = {
19
19
statsDirty : false ,
20
20
firstSync : true ,
21
21
22
+ itemsDownloadBatchSize : 15 ,
23
+ statusUploadBatchSize : 200 ,
22
24
23
25
_syncBegin : function ( ) {
24
26
if ( ! selfoss . dbOnline . syncing ) {
@@ -110,7 +112,7 @@ selfoss.dbOnline = {
110
112
if ( selfoss . db . storage ) {
111
113
syncParams . itemsSinceId = selfoss . dbOffline . lastItemId ;
112
114
syncParams . itemsNotBefore = selfoss . dbOffline . newestGCedEntry . toISOString ( ) ;
113
- syncParams . itemsHowMany = selfoss . filter . itemsPerPage ;
115
+ syncParams . itemsHowMany = selfoss . dbOnline . itemsDownloadBatchSize ;
114
116
}
115
117
116
118
selfoss . dbOnline . statsDirty = false ;
@@ -146,21 +148,24 @@ selfoss.dbOnline = {
146
148
selfoss . dbOffline
147
149
. shouldLoadEntriesOnline = 'lastId' in data
148
150
&& data . lastId - selfoss . dbOffline . lastItemId >
149
- 2 * selfoss . filter . itemsPerPage ;
151
+ 2 * selfoss . dbOnline . itemsDownloadBatchSize ;
150
152
151
153
selfoss . dbOffline . storeEntries ( data . newItems )
152
154
. then ( function ( ) {
153
155
selfoss . dbOffline . storeLastUpdate ( dataDate ) ;
154
-
155
156
selfoss . dbOnline . _syncDone ( ) ;
156
-
157
- // fetch more if server has more
158
- if ( selfoss . dbOffline . newerEntriesMissing ) {
159
- selfoss . dbOnline . sync ( ) ;
160
- }
161
157
} ) ;
162
158
}
163
159
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
+
164
169
if ( 'itemUpdates' in data ) {
165
170
// refresh entry statuses in db and dequeue queued
166
171
// statuses but do not calculate stats as they are taken
@@ -703,8 +708,9 @@ selfoss.dbOffline = {
703
708
704
709
705
710
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 => {
708
714
let statusUpdate = {
709
715
id : s . entryId ,
710
716
datetime : s . datetime
@@ -713,10 +719,12 @@ selfoss.dbOffline = {
713
719
714
720
return statusUpdate ;
715
721
} ) ;
716
- } ) . then ( statuses => {
722
+
717
723
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
+ }
720
728
} ) ;
721
729
} ) ;
722
730
0 commit comments