mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 13:57:10 +09:00
* #450: fix upload command * #540: update * #540: fix tests * #540: start tests
This commit is contained in:
parent
092160fe33
commit
4d7c68c1aa
18 changed files with 65 additions and 55 deletions
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -872,7 +872,7 @@ open class PageFragment :
|
|||
}
|
||||
|
||||
private fun onFilePathReady(filePath: String?) {
|
||||
vm.onAddVideoFileClicked(filePath)
|
||||
vm.onProceedWithFilePath(filePath)
|
||||
}
|
||||
|
||||
private fun clearPickit() {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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 = ""
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue