1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 13:57:10 +09:00

#540: fix upload command (#541)

* #450: fix upload command

* #540: update

* #540: fix tests

* #540: start tests
This commit is contained in:
Konstantin Ivanov 2020-06-22 16:08:01 +03:00 committed by GitHub
parent 092160fe33
commit 4d7c68c1aa
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 65 additions and 55 deletions

View file

@ -51,7 +51,7 @@ open class EditorTestSetup {
lateinit var updateAlignment: UpdateAlignment
lateinit var replaceBlock: ReplaceBlock
lateinit var setupBookmark: SetupBookmark
lateinit var uploadUrl: UploadUrl
lateinit var uploadBlock: UploadBlock
lateinit var splitBlock: SplitBlock
lateinit var createPage: CreatePage
lateinit var updateBackgroundColor: UpdateBackgroundColor
@ -123,7 +123,7 @@ open class EditorTestSetup {
setupBookmark = SetupBookmark(repo)
updateAlignment = UpdateAlignment(repo)
updateTitle = UpdateTitle(repo)
uploadUrl = UploadUrl(repo)
uploadBlock = UploadBlock(repo)
downloadFile = DownloadFile(
downloader = mock(),
context = Dispatchers.Main
@ -151,7 +151,7 @@ open class EditorTestSetup {
documentEventReducer = DocumentExternalEventReducer(),
archiveDocument = archiveDocument,
createDocument = createDocument,
uploadUrl = uploadUrl,
uploadUrl = uploadBlock,
urlBuilder = urlBuilder,
renderer = DefaultBlockViewRenderer(
urlBuilder = urlBuilder,

View file

@ -55,7 +55,6 @@ class PageModule {
removeLinkMark: RemoveLinkMark,
createPage: CreatePage,
createDocument: CreateDocument,
uploadUrl: UploadUrl,
documentExternalEventReducer: DocumentExternalEventReducer,
urlBuilder: UrlBuilder,
renderer: DefaultBlockViewRenderer,
@ -69,7 +68,6 @@ class PageModule {
interceptEvents = interceptEvents,
updateLinkMarks = updateLinkMarks,
removeLinkMark = removeLinkMark,
uploadUrl = uploadUrl,
documentEventReducer = documentExternalEventReducer,
urlBuilder = urlBuilder,
renderer = renderer,
@ -162,7 +160,7 @@ class PageModule {
@PerScreen
fun provideUploadUrl(
repo: BlockRepository
): UploadUrl = UploadUrl(
): UploadBlock = UploadBlock(
repo = repo
)
@ -323,6 +321,7 @@ class PageModule {
downloadFile: DownloadFile,
updateTitle: UpdateTitle,
updateText: UpdateText,
uploadBlock: UploadBlock,
updateAlignment: UpdateAlignment,
textInteractor: Interactor.TextInteractor,
setupBookmark: SetupBookmark,
@ -338,6 +337,7 @@ class PageModule {
duplicateBlock = duplicateBlock,
updateBackgroundColor = updateBackgroundColor,
updateTextColor = updateTextColor,
uploadBlock = uploadBlock,
splitBlock = splitBlock,
mergeBlocks = mergeBlocks,
unlinkBlocks = unlinkBlocks,

View file

@ -872,7 +872,7 @@ open class PageFragment :
}
private fun onFilePathReady(filePath: String?) {
vm.onAddVideoFileClicked(filePath)
vm.onProceedWithFilePath(filePath)
}
private fun clearPickit() {

View file

@ -347,7 +347,7 @@ fun Command.SetDocumentImageIcon.toEntity() = CommandEntity.SetDocumentImageIcon
context = context
)
fun Command.UploadVideoBlockUrl.toEntity(): CommandEntity.UploadBlock = CommandEntity.UploadBlock(
fun Command.UploadBlock.toEntity(): CommandEntity.UploadBlock = CommandEntity.UploadBlock(
contextId = contextId,
blockId = blockId,
url = url,

View file

@ -114,9 +114,8 @@ class BlockDataRepository(
command: Command.SetupBookmark
): Payload = factory.remote.setupBookmark(command.toEntity()).toDomain()
override suspend fun uploadUrl(command: Command.UploadVideoBlockUrl) {
factory.remote.uploadUrl(command.toEntity())
}
override suspend fun uploadBlock(command: Command.UploadBlock): Payload =
factory.remote.uploadBlock(command.toEntity()).toDomain()
override suspend fun undo(
command: Command.Undo

View file

@ -25,7 +25,7 @@ interface BlockDataStore {
suspend fun updateTextStyle(command: CommandEntity.UpdateStyle) : PayloadEntity
suspend fun updateCheckbox(command: CommandEntity.UpdateCheckbox)
suspend fun uploadUrl(command: CommandEntity.UploadBlock)
suspend fun uploadBlock(command: CommandEntity.UploadBlock): PayloadEntity
suspend fun dnd(command: CommandEntity.Dnd)
suspend fun unlink(command: CommandEntity.Unlink): PayloadEntity
suspend fun getConfig(): ConfigEntity

View file

@ -35,7 +35,7 @@ interface BlockRemote {
suspend fun closeDashboard(id: String)
suspend fun setDocumentEmojiIcon(command: CommandEntity.SetDocumentEmojiIcon)
suspend fun setDocumentImageIcon(command: CommandEntity.SetDocumentImageIcon)
suspend fun uploadUrl(command: CommandEntity.UploadBlock)
suspend fun uploadBlock(command: CommandEntity.UploadBlock): PayloadEntity
suspend fun setupBookmark(command: CommandEntity.SetupBookmark) : PayloadEntity
suspend fun undo(command: CommandEntity.Undo) : PayloadEntity
suspend fun redo(command: CommandEntity.Redo) : PayloadEntity

View file

@ -54,9 +54,9 @@ class BlockRemoteDataStore(private val remote: BlockRemote) : BlockDataStore {
command: CommandEntity.UpdateAlignment
) : PayloadEntity = remote.updateAlignment(command)
override suspend fun uploadUrl(command: CommandEntity.UploadBlock) {
remote.uploadUrl(command)
}
override suspend fun uploadBlock(
command: CommandEntity.UploadBlock
): PayloadEntity = remote.uploadBlock(command)
override suspend fun create(
command: CommandEntity.Create

View file

@ -4,22 +4,19 @@ import com.agileburo.anytype.domain.base.BaseUseCase
import com.agileburo.anytype.domain.base.Either
import com.agileburo.anytype.domain.block.model.Command
import com.agileburo.anytype.domain.block.repo.BlockRepository
import com.agileburo.anytype.domain.event.model.Payload
class UploadUrl(private val repo: BlockRepository) : BaseUseCase<Unit, UploadUrl.Params>() {
class UploadBlock(private val repo: BlockRepository) : BaseUseCase<Payload, UploadBlock.Params>() {
override suspend fun run(params: Params): Either<Throwable, Unit> = try {
repo.uploadUrl(
command = Command.UploadVideoBlockUrl(
override suspend fun run(params: Params): Either<Throwable, Payload> = safe {
repo.uploadBlock(
command = Command.UploadBlock(
contextId = params.contextId,
blockId = params.blockId,
url = params.url,
filePath = params.filePath
)
).let {
Either.Right(it)
}
} catch (t: Throwable) {
Either.Left(t)
)
}
data class Params(

View file

@ -195,13 +195,13 @@ sealed class Command {
)
/**
* Command for updating video block url
* Command for uploading media or file block
* @property contextId context id
* @property blockId id of the video block
* @property url new valid url
* @property blockId id of the block
* @property url valid url
* @property filePath file uri
*/
data class UploadVideoBlockUrl(
data class UploadBlock(
val contextId: Id,
val blockId: Id,
val url: String,

View file

@ -73,9 +73,9 @@ interface BlockRepository {
suspend fun closeDashboard(id: String)
/**
* Upload url for video block.
* Upload media or file block by path or url.
*/
suspend fun uploadUrl(command: Command.UploadVideoBlockUrl)
suspend fun uploadBlock(command: Command.UploadBlock): Payload
suspend fun setDocumentEmojiIcon(command: Command.SetDocumentEmojiIcon)
suspend fun setDocumentImageIcon(command: Command.SetDocumentImageIcon)

View file

@ -45,9 +45,8 @@ class BlockMiddleware(
)
}
override suspend fun uploadUrl(command: CommandEntity.UploadBlock) {
middleware.uploadMediaBlockContent(command)
}
override suspend fun uploadBlock(command: CommandEntity.UploadBlock) : PayloadEntity =
middleware.uploadBlock(command)
override suspend fun updateTextStyle(
command: CommandEntity.UpdateStyle

View file

@ -451,7 +451,7 @@ public class Middleware {
return mapper.toPayload(response.getEvent());
}
public void uploadMediaBlockContent(CommandEntity.UploadBlock command) throws Exception {
public PayloadEntity uploadBlock(CommandEntity.UploadBlock command) throws Exception {
Block.Upload.Request request = Block.Upload.Request
.newBuilder()
.setFilePath(command.getFilePath())
@ -469,6 +469,8 @@ public class Middleware {
if (BuildConfig.DEBUG) {
Timber.d(response.getClass().getName() + "\n" + response.toString());
}
return mapper.toPayload(response.getEvent());
}
public Pair<String, PayloadEntity> createBlock(

View file

@ -17,7 +17,7 @@ import com.agileburo.anytype.core_utils.ext.*
import com.agileburo.anytype.core_utils.ui.ViewStateViewModel
import com.agileburo.anytype.domain.block.interactor.RemoveLinkMark
import com.agileburo.anytype.domain.block.interactor.UpdateLinkMarks
import com.agileburo.anytype.domain.block.interactor.UploadUrl
import com.agileburo.anytype.domain.block.interactor.UploadBlock
import com.agileburo.anytype.domain.block.model.Block
import com.agileburo.anytype.domain.block.model.Block.Content
import com.agileburo.anytype.domain.block.model.Block.Prototype
@ -59,7 +59,6 @@ class PageViewModel(
private val interceptEvents: InterceptEvents,
private val updateLinkMarks: UpdateLinkMarks,
private val removeLinkMark: RemoveLinkMark,
private val uploadUrl: UploadUrl,
private val reducer: StateReducer<List<Block>, Event>,
private val urlBuilder: UrlBuilder,
private val renderer: DefaultBlockViewRenderer,
@ -1592,23 +1591,19 @@ class PageViewModel(
}
}
fun onAddVideoFileClicked(filePath: String?) {
fun onProceedWithFilePath(filePath: String?) {
if (filePath == null) {
Timber.d("Error while getting filePath")
return
}
uploadUrl(
scope = viewModelScope,
params = UploadUrl.Params(
contextId = context,
blockId = mediaBlockId,
url = "",
filePath = filePath
)
) { result ->
result.either(
fnL = { Timber.e(it, "Error while upload new file path for video block") },
fnR = { Timber.d("Upload File Path Success") }
viewModelScope.launch {
orchestrator.proxies.intents.send(
Intent.Media.Upload(
context = context,
target = mediaBlockId,
filePath = filePath,
url = ""
)
)
}
}

View file

@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.agileburo.anytype.domain.block.interactor.RemoveLinkMark
import com.agileburo.anytype.domain.block.interactor.UpdateLinkMarks
import com.agileburo.anytype.domain.block.interactor.UploadUrl
import com.agileburo.anytype.domain.block.interactor.UploadBlock
import com.agileburo.anytype.domain.block.model.Block
import com.agileburo.anytype.domain.event.interactor.InterceptEvents
import com.agileburo.anytype.domain.event.model.Event
@ -23,7 +23,6 @@ open class PageViewModelFactory(
private val interceptEvents: InterceptEvents,
private val updateLinkMarks: UpdateLinkMarks,
private val removeLinkMark: RemoveLinkMark,
private val uploadUrl: UploadUrl,
private val documentEventReducer: StateReducer<List<Block>, Event>,
private val urlBuilder: UrlBuilder,
private val renderer: DefaultBlockViewRenderer,
@ -39,7 +38,6 @@ open class PageViewModelFactory(
interceptEvents = interceptEvents,
updateLinkMarks = updateLinkMarks,
removeLinkMark = removeLinkMark,
uploadUrl = uploadUrl,
createPage = createPage,
reducer = documentEventReducer,
urlBuilder = urlBuilder,

View file

@ -127,6 +127,12 @@ sealed class Intent {
val name: String
) : Media()
class Upload(
val context: Id,
val target: Id,
val url: String,
val filePath: String
) : Media()
}
sealed class Bookmark : Intent() {

View file

@ -31,6 +31,7 @@ class Orchestrator(
private val downloadFile: DownloadFile,
private val updateText: UpdateText,
private val updateAlignment: UpdateAlignment,
private val uploadBlock: UploadBlock,
private val setupBookmark: SetupBookmark,
private val copy: Copy,
private val paste: Paste,
@ -279,6 +280,19 @@ class Orchestrator(
success = {}
)
}
is Intent.Media.Upload -> {
uploadBlock(
params = UploadBlock.Params(
contextId = intent.context,
blockId = intent.target,
url = intent.url,
filePath = intent.filePath
)
).proceed(
failure = defaultOnError,
success = defaultPayload
)
}
is Intent.Bookmark.SetupBookmark -> {
setupBookmark(
params = SetupBookmark.Params(

View file

@ -113,7 +113,7 @@ class PageViewModelTest {
lateinit var downloadFile: DownloadFile
@Mock
lateinit var uploadUrl: UploadUrl
lateinit var uploadBlock: UploadBlock
@Mock
lateinit var paste: Paste
@ -4334,7 +4334,6 @@ class PageViewModelTest {
removeLinkMark = removeLinkMark,
reducer = DocumentExternalEventReducer(),
urlBuilder = urlBuilder,
uploadUrl = uploadUrl,
renderer = DefaultBlockViewRenderer(
urlBuilder = urlBuilder,
toggleStateHolder = ToggleStateHolder.Default(),
@ -4356,6 +4355,7 @@ class PageViewModelTest {
updateTextStyle = updateTextStyle,
updateBackgroundColor = updateBackgroundColor,
mergeBlocks = mergeBlocks,
uploadBlock = uploadBlock,
splitBlock = splitBlock,
unlinkBlocks = unlinkBlocks,
memory = memory,