implementation of polling limit on open groups

This commit is contained in:
Brice-W 2021-05-24 12:00:17 +10:00
parent 910787a960
commit dbaa51bd9a
4 changed files with 40 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import android.content.Context
import android.net.Uri
import okhttp3.HttpUrl
import org.session.libsession.database.StorageProtocol
import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.messaging.jobs.AttachmentUploadJob
import org.session.libsession.messaging.jobs.Job
import org.session.libsession.messaging.jobs.JobQueue
@ -301,6 +302,8 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
}
override fun getLastMessageServerId(room: String, server: String): Long? {
// return null if limit is set on open groups polling
if (TextSecurePreferences.isOpenGroupPollingLimit(context)) return null
return DatabaseFactory.getLokiAPIDatabase(context).getLastMessageServerID(room, server)
}
@ -325,6 +328,8 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
}
override fun getLastDeletionServerId(room: String, server: String): Long? {
// return null if limit is set on open groups polling
if (TextSecurePreferences.isOpenGroupPollingLimit(context)) return null
return DatabaseFactory.getLokiAPIDatabase(context).getLastDeletionServerID(room, server)
}

View File

@ -32,6 +32,7 @@ import org.session.libsession.messaging.jobs.JobQueue
import org.session.libsession.messaging.mentions.MentionsManager
import org.session.libsession.messaging.open_groups.OpenGroupAPI
import org.session.libsession.messaging.sending_receiving.MessageSender
import org.session.libsession.messaging.sending_receiving.pollers.OpenGroupPollerV2
import org.session.libsession.utilities.*
import org.session.libsignal.utilities.toHexString
import org.session.libsignal.utilities.ThreadUtils
@ -66,6 +67,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
// region Lifecycle
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady)
// Check when Session was last opened
setPollingLimit();
// Double check that the long poller is up
(applicationContext as ApplicationContext).startPollingIfNeeded()
// Set content view
@ -194,6 +197,15 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
super.onDestroy()
EventBus.getDefault().unregister(this)
}
fun setPollingLimit() {
val lastTimeSessionOpened = TextSecurePreferences.getLastTimeSessionOpened(this)
val timeSinceLastTimeOpen = System.currentTimeMillis() - lastTimeSessionOpened
// activate polling limit on open groups if the app hasn't been opened for more than the duration set in MAX_INACTIVITY_PERIOD
TextSecurePreferences.setOpenGroupPollingLimit(this, timeSinceLastTimeOpen > OpenGroupPollerV2.maxInactivityPeriod)
TextSecurePreferences.setLastTimeSessionOpened(this)
}
// endregion
// region Updating

View File

@ -22,6 +22,7 @@ class OpenGroupPollerV2(private val server: String, private val executorService:
companion object {
private val pollInterval: Long = 4 * 1000
const val maxInactivityPeriod = 14 * 24 * 60 * 60 * 1000
}
fun startIfNeeded() {

View File

@ -99,6 +99,11 @@ object TextSecurePreferences {
private const val GIF_GRID_LAYOUT = "pref_gif_grid_layout"
// region Limit open group polling
private const val LAST_TIME_SESSION_OPENED = "pref_last_time_session_open"
private const val OPEN_GROUP_POLLING_LIMIT = "pref_Open_group_polling_limit"
// region FCM
const val IS_USING_FCM = "pref_is_using_fcm"
private const val FCM_TOKEN = "pref_fcm_token"
@ -771,5 +776,22 @@ object TextSecurePreferences {
fun setHasSeenFileServerInstabilityNotification(context: Context) {
setBooleanPreference(context, "has_seen_file_server_instability_notification", true)
}
fun getLastTimeSessionOpened(context: Context): Long {
return getLongPreference(context!!, LAST_TIME_SESSION_OPENED, 0)
}
fun setLastTimeSessionOpened(context: Context) {
setLongPreference(context, LAST_TIME_SESSION_OPENED, System.currentTimeMillis())
}
fun isOpenGroupPollingLimit(context: Context): Boolean {
return getBooleanPreference(context, OPEN_GROUP_POLLING_LIMIT, false)
}
fun setOpenGroupPollingLimit(context: Context, limit: Boolean) {
setBooleanPreference(context, OPEN_GROUP_POLLING_LIMIT, limit)
}
// endregion
}