Skip to content

Commit

Permalink
Workaround for previewing Talk pages that don't exist yet. (#4631)
Browse files Browse the repository at this point in the history
Co-authored-by: Cooltey Feng <cfeng@wikimedia.org>
  • Loading branch information
dbrant and cooltey committed Apr 30, 2024
1 parent bd5d3db commit b2cd817
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 3 deletions.
4 changes: 4 additions & 0 deletions app/src/main/java/org/wikipedia/edit/EditSectionActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,10 @@ class EditSectionActivity : BaseActivity(), ThemeChooserDialog.Callback, EditPre
invalidateOptionsMenu()
}

override fun isNewPage(): Boolean {
return false
}

override fun onBackPressed() {
val addImageTitle = intent.parcelableExtra<PageTitle>(InsertMediaActivity.EXTRA_IMAGE_TITLE)
val addImageSource = intent.getStringExtra(InsertMediaActivity.EXTRA_IMAGE_SOURCE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import org.wikipedia.page.PageTitle
import org.wikipedia.page.PageViewModel
import org.wikipedia.page.references.PageReferences
import org.wikipedia.page.references.ReferenceDialog
import org.wikipedia.staticdata.MainPageNameData
import org.wikipedia.util.DeviceUtil
import org.wikipedia.util.DimenUtil
import org.wikipedia.util.ResourceUtil
Expand All @@ -40,6 +41,7 @@ class EditPreviewFragment : Fragment(), CommunicationBridgeListener, ReferenceDi
interface Callback {
fun getParentPageTitle(): PageTitle
fun showProgressBar(visible: Boolean)
fun isNewPage(): Boolean
}

private var _binding: FragmentPreviewEditBinding? = null
Expand Down Expand Up @@ -80,8 +82,12 @@ class EditPreviewFragment : Fragment(), CommunicationBridgeListener, ReferenceDi
fun showPreview(title: PageTitle, wikiText: String) {
DeviceUtil.hideSoftKeyboard(requireActivity())
callback().showProgressBar(true)
val url = ServiceFactory.getRestBasePath(model.title!!.wikiSite) +
RestService.PAGE_HTML_PREVIEW_ENDPOINT + UriUtil.encodeURL(title.prefixedText)

// Workaround for T363781
// The preview endpoint requires the target page to exist, so if it doesn't exist yet,
// we will base the preview on the Main Page of the wiki.
val url = ServiceFactory.getRestBasePath(model.title!!.wikiSite) + RestService.PAGE_HTML_PREVIEW_ENDPOINT +
UriUtil.encodeURL(if (callback().isNewPage()) MainPageNameData.valueFor(title.wikiSite.languageCode) else title.prefixedText)
val postData = "wikitext=" + UriUtil.encodeURL(wikiText)
binding.editPreviewWebview.postUrl(url, postData.toByteArray())
binding.editPreviewContainer.isVisible = true
Expand Down
5 changes: 4 additions & 1 deletion app/src/main/java/org/wikipedia/talk/TalkReplyActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,10 @@ class TalkReplyActivity : BaseActivity(), UserMentionInputView.Listener, EditPre
invalidateOptionsMenu()
}

override fun isNewPage(): Boolean {
return !viewModel.doesPageExist
}

companion object {
const val EXTRA_PARENT_SUBJECT = "parentSubject"
const val EXTRA_TOPIC = "topic"
Expand Down Expand Up @@ -609,7 +613,6 @@ class TalkReplyActivity : BaseActivity(), UserMentionInputView.Listener, EditPre
.putExtra(FROM_REVISION_ID, fromRevisionId)
.putExtra(TO_REVISION_ID, toRevisionId)
.putExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE, invokeSource)
.putExtra(Constants.INTENT_EXTRA_INVOKE_SOURCE, invokeSource)
}
}
}
13 changes: 13 additions & 0 deletions app/src/main/java/org/wikipedia/talk/TalkReplyViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,24 @@ class TalkReplyViewModel(bundle: Bundle) : ViewModel() {

val postReplyData = SingleLiveData<Resource<Long>>()
val saveTemplateData = SingleLiveData<Resource<TalkTemplate>>()
var doesPageExist = false

init {
if (isFromDiff) {
loadTemplates()
}
checkPageExists()
}

@Suppress("KotlinConstantConditions")
private fun checkPageExists() {
viewModelScope.launch(CoroutineExceptionHandler { _, throwable ->
L.e(throwable)
}) {
ServiceFactory.get(pageTitle.wikiSite).getPageIds(pageTitle.prefixedText).let {
doesPageExist = (it.query?.pages?.firstOrNull()?.pageId ?: 0) > 0
}
}
}

private fun loadTemplates() {
Expand Down

0 comments on commit b2cd817

Please sign in to comment.