Skip to content

Commit 352513e

Browse files
committed
Adding resolver
1 parent 407790b commit 352513e

1 file changed

Lines changed: 100 additions & 0 deletions

File tree

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package org.wordpress.android.reader.savedposts.resolver
2+
3+
import android.database.Cursor
4+
import org.wordpress.android.R
5+
import org.wordpress.android.datasets.wrappers.ReaderDatabaseWrapper
6+
import org.wordpress.android.datasets.wrappers.ReaderPostTableWrapper
7+
import org.wordpress.android.datasets.wrappers.ReaderTagTableWrapper
8+
import org.wordpress.android.models.ReaderPostList
9+
import org.wordpress.android.models.ReaderTag
10+
import org.wordpress.android.models.ReaderTagType.BOOKMARKED
11+
import org.wordpress.android.provider.query.QueryResult
12+
import org.wordpress.android.reader.savedposts.JetpackReaderSavedPostsFlag
13+
import org.wordpress.android.reader.savedposts.ReaderSavedPostsAnalyticsTracker
14+
import org.wordpress.android.reader.savedposts.ReaderSavedPostsAnalyticsTracker.ErrorType
15+
import org.wordpress.android.reader.savedposts.provider.ReaderSavedPostsProvider
16+
import org.wordpress.android.resolver.ContentResolverWrapper
17+
import org.wordpress.android.ui.prefs.AppPrefsWrapper
18+
import org.wordpress.android.util.publicdata.WordPressPublicData
19+
import org.wordpress.android.viewmodel.ContextProvider
20+
import javax.inject.Inject
21+
22+
class ReaderSavedPostsResolver @Inject constructor(
23+
private val jetpackReaderSavedPostsFlag: JetpackReaderSavedPostsFlag,
24+
private val queryResult: QueryResult,
25+
private val contextProvider: ContextProvider,
26+
private val contentResolverWrapper: ContentResolverWrapper,
27+
private val readerSavedPostsAnalyticsTracker: ReaderSavedPostsAnalyticsTracker,
28+
private val wordPressPublicData: WordPressPublicData,
29+
private val appPrefsWrapper: AppPrefsWrapper,
30+
private val readerPostTableWrapper: ReaderPostTableWrapper,
31+
private val readerTagTableWrapper: ReaderTagTableWrapper,
32+
private val readerDatabaseWrapper: ReaderDatabaseWrapper
33+
) {
34+
fun tryGetReaderSavedPosts(onSuccess: () -> Unit, onFailure: () -> Unit) {
35+
val isFeatureFlagEnabled = jetpackReaderSavedPostsFlag.isEnabled()
36+
if (!isFeatureFlagEnabled) {
37+
onFailure()
38+
return
39+
}
40+
val isFirstTry = appPrefsWrapper.getIsFirstTryReaderSavedPostsJetpack()
41+
if (!isFirstTry) {
42+
onFailure()
43+
return
44+
}
45+
46+
readerSavedPostsAnalyticsTracker.trackStart()
47+
appPrefsWrapper.saveIsFirstTryReaderSavedPostsJetpack(false)
48+
val savedPostsCursor = getReaderSavedPostsCursor()
49+
if (savedPostsCursor != null) {
50+
val posts = queryResult.getValue<ReaderPostList>(savedPostsCursor) ?: ReaderPostList()
51+
52+
if (posts.isNotEmpty()) {
53+
updateReaderSavedPosts(onSuccess, onFailure, posts)
54+
} else {
55+
readerSavedPostsAnalyticsTracker.trackFailed(ErrorType.NoUserSavedPostsError)
56+
onFailure
57+
}
58+
} else {
59+
readerSavedPostsAnalyticsTracker.trackFailed(ErrorType.QuerySavedPostsError)
60+
onFailure()
61+
}
62+
}
63+
64+
private fun getReaderSavedPostsCursor(): Cursor? {
65+
val savedPostsUriValue = "content://${wordPressPublicData.currentPackageId()}.${ReaderSavedPostsProvider::class.simpleName}"
66+
return contentResolverWrapper.queryUri(
67+
contextProvider.getContext().contentResolver,
68+
savedPostsUriValue
69+
)
70+
}
71+
72+
private fun updateReaderSavedPosts(
73+
onSuccess: () -> Unit,
74+
onFailure: () -> Unit,
75+
posts: ReaderPostList
76+
) {
77+
try {
78+
readerDatabaseWrapper.reset(false)
79+
readerTagTableWrapper.addOrUpdateTag(
80+
ReaderTag(
81+
"",
82+
contextProvider.getContext().getString(R.string.reader_save_for_later_display_name),
83+
contextProvider.getContext().getString(R.string.reader_save_for_later_title),
84+
"",
85+
BOOKMARKED
86+
)
87+
)
88+
89+
readerTagTableWrapper.getBookmarkTags()!!.first().let {
90+
readerPostTableWrapper.addOrUpdatePosts(it, posts)
91+
}
92+
93+
readerSavedPostsAnalyticsTracker.trackSuccess()
94+
onSuccess()
95+
} catch (exception: Exception) {
96+
readerSavedPostsAnalyticsTracker.trackFailed(ErrorType.UpdateSavedPostsError)
97+
onFailure()
98+
}
99+
}
100+
}

0 commit comments

Comments
 (0)