· 4 years ago · Aug 16, 2021, 01:10 PM
1private fun upload(message: Message) {
2 log(Log.DEBUG, SEND_DOWNLOAD_MESSAGE_TAG, "upload baseURL $baseURL")
3
4 //Проверяем наличие сообщения в отправляемых
5 observerUploadMap[message.localId]?.let {
6 it.dispose()
7 observerUploadMap.remove(message.localId)
8 hideUploadProgressBar(this, message, false)
9 IrbisManager.storage().setSendingMessageStatus(message.localId, Message.STATUS_ERROR)
10 return
11 }
12
13 if (message.filePath == null) {
14 return
15 }
16 //Устанавливаем начальный процент отправки сообщения
17 publishPercent(this, message, 0, true)
18
19 //Помечаем сообщение, как "загружаемое"
20 IrbisManager.storage().setSendingMessageStatus(message.localId, Message.STATUS_SENDING)
21
22
23 val key: String? = repository.getKey(message)
24 //Для сервера с API выше 5 отправляем сам файл и его превью, для сервера с апи ниже, только файл.
25 val isMultipleFiles: Boolean = message.previewFilePath != null && IrbisManager.settings().apiServer > 5
26
27 val disposableStringSingleObserver = object : DisposableSingleObserver<String>() {
28 override fun onSuccess(value: String) {
29 sendMessageQueue(repository.getPackedMessage(message, value, isMultipleFiles))
30 hideUploadProgressBar(this@SendDownloadMessageService, message, true)
31 observerUploadMap[message.localId]?.let {
32 it.dispose()
33 observerUploadMap.remove(message.localId)
34 }
35
36 stopService()
37 }
38
39 override fun onError(e: Throwable) {
40 e.printStackTrace()
41 log(Log.DEBUG, SEND_DOWNLOAD_MESSAGE_TAG, "on error ${e.message}")
42 hideUploadProgressBar(this@SendDownloadMessageService, message, false)
43 setErrorMessage(message)
44 stopService()
45 }
46 }
47
48 val mapObserver: DisposableSingleObserver<*> = if (isMultipleFiles) {
49 DataManager.uploadMultipleFiles(
50 message.filePath,
51 message.previewFilePath,
52 key,
53 RestServices.createUploadRestService(baseURL),
54 ) { percent: Int -> publishPercent(this, message, percent, true) }
55 .subscribeOn(Schedulers.computation())
56 .observeOn(AndroidSchedulers.mainThread())
57 .subscribeWith(disposableStringSingleObserver)
58 } else {
59 DataManager.uploadFile(
60 message.filePath,
61 key,
62 RestServices.createUploadRestService(baseURL)
63 ) { percent: Int -> publishPercent(this, message, percent, true) }
64 .subscribeOn(Schedulers.computation())
65 .observeOn(AndroidSchedulers.mainThread())
66 .subscribeWith(disposableStringSingleObserver)
67 }
68
69 observerUploadMap[message.localId] = mapObserver
70 }