diff --git a/app/src/main/java/com/fastaccess/github/di/modules/ViewModelModule.kt b/app/src/main/java/com/fastaccess/github/di/modules/ViewModelModule.kt index 3713db9f..08f95396 100644 --- a/app/src/main/java/com/fastaccess/github/di/modules/ViewModelModule.kt +++ b/app/src/main/java/com/fastaccess/github/di/modules/ViewModelModule.kt @@ -9,6 +9,7 @@ import com.fastaccess.github.ui.modules.auth.login.LoginViewModel import com.fastaccess.github.ui.modules.editor.dialog.UploadPictureViewModel import com.fastaccess.github.ui.modules.feed.fragment.viewmodel.FeedsViewModel import com.fastaccess.github.ui.modules.issue.fragment.viewmodel.IssueTimelineViewModel +import com.fastaccess.github.ui.modules.issuesprs.edit.EditIssuePrViewModel import com.fastaccess.github.ui.modules.issuesprs.edit.assignees.viewmodel.AssigneesViewModel import com.fastaccess.github.ui.modules.issuesprs.edit.labels.viewmodel.LabelsViewModel import com.fastaccess.github.ui.modules.issuesprs.edit.milestone.viewmodel.MilestoneViewModel @@ -100,4 +101,7 @@ abstract class ViewModelModule { @Binds @IntoMap @ViewModelKey(UploadPictureViewModel::class) abstract fun bindUploadPictureViewModel(viewModel: UploadPictureViewModel): ViewModel + + @Binds @IntoMap @ViewModelKey(EditIssuePrViewModel::class) + abstract fun bindEditIssuePrViewModel(viewModel: EditIssuePrViewModel): ViewModel } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/issuesprs/edit/EditIssuePrFragment.kt b/app/src/main/java/com/fastaccess/github/ui/modules/issuesprs/edit/EditIssuePrFragment.kt index baa06869..8e491134 100644 --- a/app/src/main/java/com/fastaccess/github/ui/modules/issuesprs/edit/EditIssuePrFragment.kt +++ b/app/src/main/java/com/fastaccess/github/ui/modules/issuesprs/edit/EditIssuePrFragment.kt @@ -7,10 +7,13 @@ import android.view.MotionEvent import android.view.View import androidx.core.os.bundleOf import androidx.core.view.isVisible +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.ViewModelProviders import com.fastaccess.data.model.parcelable.EditIssuePrBundleModel import com.fastaccess.github.R import com.fastaccess.github.base.BaseFragment import com.fastaccess.github.base.BaseViewModel +import com.fastaccess.github.extensions.observeNotNull import com.fastaccess.github.extensions.routeForResult import com.fastaccess.github.utils.EDITOR_DEEPLINK import com.fastaccess.github.utils.EXTRA @@ -24,8 +27,11 @@ import javax.inject.Inject * Created by Kosh on 2019-07-27. */ class EditIssuePrFragment : BaseFragment() { + + @Inject lateinit var viewModelFactory: ViewModelProvider.Factory @Inject lateinit var markwon: Markwon + private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(EditIssuePrViewModel::class.java) } private val model by lazy { arguments?.getParcelable(EXTRA) as? EditIssuePrBundleModel ?: throw NullPointerException("EditIssuePrBundleModel is null") } @@ -53,6 +59,12 @@ class EditIssuePrFragment : BaseFragment() { val description = model.description if (!description.isNullOrEmpty()) { descriptionEditText.post { markwon.setMarkdown(descriptionEditText, description) } + } else { + viewModel.templateLiveData.observeNotNull(this) { + model.description = it + descriptionEditText.post { markwon.setMarkdown(descriptionEditText, it) } + } + viewModel.loadTemplate(model.login, model.repo) } } descriptionEditText.setOnTouchListener { _, event -> diff --git a/app/src/main/java/com/fastaccess/github/ui/modules/issuesprs/edit/EditIssuePrViewModel.kt b/app/src/main/java/com/fastaccess/github/ui/modules/issuesprs/edit/EditIssuePrViewModel.kt new file mode 100644 index 00000000..41580442 --- /dev/null +++ b/app/src/main/java/com/fastaccess/github/ui/modules/issuesprs/edit/EditIssuePrViewModel.kt @@ -0,0 +1,34 @@ +package com.fastaccess.github.ui.modules.issuesprs.edit + +import androidx.lifecycle.MutableLiveData +import com.fastaccess.github.base.BaseViewModel +import com.fastaccess.github.usecase.files.GetFileContentUseCase +import timber.log.Timber +import javax.inject.Inject + +/** + * Created by Kosh on 2019-07-30. + */ +class EditIssuePrViewModel @Inject constructor( + private val getFileContentUseCase: GetFileContentUseCase +) : BaseViewModel() { + + val templateLiveData = MutableLiveData() + + fun loadTemplate( + login: String, + repo: String + ) { + getFileContentUseCase.login = login + getFileContentUseCase.repo = repo + getFileContentUseCase.path = "master:.github/ISSUE_TEMPLATE.md" + justSubscribe(getFileContentUseCase.buildObservable() + .map { + it.text?.replace(Regex("(?s)"), "")?.replace("<>", "") ?: "" // replace all comments! keep the text small! + } + .doOnNext { + Timber.e(it) + templateLiveData.postValue(it) + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/github/usecase/files/GetFileContentUseCase.kt b/app/src/main/java/com/fastaccess/github/usecase/files/GetFileContentUseCase.kt new file mode 100644 index 00000000..55710620 --- /dev/null +++ b/app/src/main/java/com/fastaccess/github/usecase/files/GetFileContentUseCase.kt @@ -0,0 +1,40 @@ +package com.fastaccess.github.usecase.files + +import com.apollographql.apollo.ApolloClient +import com.apollographql.apollo.rx2.Rx2Apollo +import com.fastaccess.data.model.FileConentModel +import com.fastaccess.data.repository.SchedulerProvider +import com.fastaccess.domain.usecase.base.BaseObservableUseCase +import github.GetFileContentQuery +import io.reactivex.Observable +import javax.inject.Inject + +/** + * Created by Kosh on 2019-07-30. + */ +class GetFileContentUseCase @Inject constructor( + private val apolloClient: ApolloClient, + private val schedulerProvider: SchedulerProvider +) : BaseObservableUseCase() { + + var repo: String = "" + var login: String = "" + var path: String = "" + + override fun buildObservable(): Observable = Rx2Apollo.from( + apolloClient.query( + GetFileContentQuery.builder() + .login(login) + .repo(repo) + .path(path) + .build() + ) + ) + .subscribeOn(schedulerProvider.ioThread()) + .observeOn(schedulerProvider.uiThread()) + .map { + val response = it.data()?.repositoryOwner?.repository?.`object` as? GetFileContentQuery.AsBlob + return@map FileConentModel(response?.text, response?.isBinary, response?.isTruncated, response?.byteSize) + } + +} \ No newline at end of file diff --git a/data/src/main/graphql/github/file_content.graphql b/data/src/main/graphql/github/file_content.graphql new file mode 100644 index 00000000..a2eb10d2 --- /dev/null +++ b/data/src/main/graphql/github/file_content.graphql @@ -0,0 +1,14 @@ +query getFileContent($login: String!, $repo: String!, $path: String!) { + repositoryOwner(login: $login) { + repository(name: $repo) { + object(expression: $path) { + ... on Blob { + isBinary + byteSize + isTruncated + text + } + } + } + } +} \ No newline at end of file diff --git a/data/src/main/java/com/fastaccess/data/model/FileConentModel.kt b/data/src/main/java/com/fastaccess/data/model/FileConentModel.kt new file mode 100644 index 00000000..71c61b13 --- /dev/null +++ b/data/src/main/java/com/fastaccess/data/model/FileConentModel.kt @@ -0,0 +1,13 @@ +package com.fastaccess.data.model + +import com.google.gson.annotations.SerializedName + +/** + * Created by Kosh on 2019-07-30. + */ +data class FileConentModel( + @SerializedName("text") var text: String? = null, + @SerializedName("isBinary") var isBinary: Boolean? = null, + @SerializedName("isTruncated") var isTruncated: Boolean? = null, + @SerializedName("byteSize") var byteSize: Int? = null +) \ No newline at end of file