
Alexandr
13.09.2018
05:49:14
ты делаешь что то не так

Di7aK
13.09.2018
05:49:33
а как надо

Alexandr
13.09.2018
05:50:00
задачу опиши что ты делаешь для начала

Di7aK
13.09.2018
05:50:12
кароч

Google

Di7aK
13.09.2018
05:50:41
нужен манагер загрузок с абортами

Alexandr
13.09.2018
05:54:44
андройд?

Di7aK
13.09.2018
05:57:58
само собой
юзаю ретрофит для аплоада и fuel для загрузки
это вообще нормально?

Alexandr
13.09.2018
06:00:21
чем стандартный манагер андройда не подходит?

Di7aK
13.09.2018
06:00:43
только для просмотра
пошло все в жепу буду говнокодить

Konstantin
13.09.2018
06:34:39

Di7aK
13.09.2018
06:39:09

Konstantin
13.09.2018
06:45:37


Руслан
13.09.2018
07:18:18
тут два вопроса про то как использовать okhttp с корутинами были, покажу как я использовал (cc @InsanusMokrassar @Vorkytaka)
Для начала нам нужен адаптер для функции enqueue, который использует callback чтобы сделать suspend функцию:
class OkHttpException(
val request: Request,
val exception: Exception
) : RuntimeException(exception)
suspend fun Call.await(): Response = suspendCoroutine { cont: Continuation<Response> ->
this.enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
cont.resume(response)
}
override fun onFailure(call: Call, exception: IOException) {
cont.resumeWithException(OkHttpException(call.request(), exception))
}
})
}
Далее нам нужно... Да в общем-то и все, теперь можно брать и использовать:
val response = okHttpClient.newCall(request).await()
И вот например задача Алексея:
fun muchFun(request: Request): Response = runBlocking {
okHttpClient.newCall(request).await()
}

Google

Denis
13.09.2018
07:19:16
Добрый день.
Можно ли каким-то образом при map'е коллекции ставить условие с различными ихсодами?
Т.е. что-то вроде этого
list.map{ item -> if (item.property == smth) then item.anotherProperty = 10 else item.anotherProperty = 20}
Стандартным способом не поулчается, но может есть какое-то хитрое решение?
Есть вариант сделать 2 коллекции из 1 и для каждой свой фильтр под необходимое услвоие, но если будет больше чем 2 условия, то под каждое нужно будет новую операцию с коллекцией писать. Может есть какое-то способо получше?

Руслан
13.09.2018
07:21:28

Denis
13.09.2018
07:22:00

Руслан
13.09.2018
07:22:52
Ну все, должно работать. Проблема в твоем коде что ты возвращаещь Unit из map, и мутируешь item в мап

Denis
13.09.2018
07:27:08

Алексей
13.09.2018
07:30:59
То есть есть класс, в котором происходит работа с OkHttp, там и происходит вызов send, блокирующий всё на свете, включая поток отправки/получения данных
А есть там же метод, работающий с enqueue


Руслан
13.09.2018
07:33:46
Т.е. у е тебя есть выбор какой метод в либе использовать? Либа предоставляет асинхронный API получается? Или в либе есть условно плохой код, и при этом ты не автор либы?

Алексей
13.09.2018
07:34:43
Сверху шляпа, которую могу вызывать я, снизу - то, что происходит в итоге
то есть я могу передать коллбэки или заблокировать всё на свете
Я хотел написать что-то, что дёргало бы асинхронный метод, возвращало бы Deferred/лочило текущий поток/корутину и возвращало результат по await или просто как обычная функция

Руслан
13.09.2018
07:39:16
А, ну так все круто. У тебя есть асинхронный api, напиши функцию потипу той что я показал, она обернет send(req, call) и у тебя будет функция suspend send(req)

Алексей
13.09.2018
07:40:00
а можно конкретней?
https://github.com/InsanusMokrassar/AutoPostTelegramBot/blob/0.4.1/src/main/kotlin/com/github/insanusmokrassar/AutoPostTelegramBot/utils/extensions/TelegramBot.kt#L81
я пытался сделать так
но что-то вечно шло не так и отловить что именно у меня не получилось, но это не важно. Факт в том, что это не работает

Google

Руслан
13.09.2018
07:41:44

Алексей
13.09.2018
07:42:09
я внутри оборачиваю всё в runBlocking
я помню, что runBlocking может сменить поток, если его уснуть

Руслан
13.09.2018
07:43:27
ой, нет. на многих уровнях не верно

Алексей
13.09.2018
07:43:47

Руслан
13.09.2018
07:44:00
зачем вообще делать runBlocking, если у тебя executeAsync не suspend.

Алексей
13.09.2018
07:44:18
там внизу join
суть в том, что я дожидаюсь отмены toDestroy и потом только иду дальше, эмулируя таким образом синхронизацию

Руслан
13.09.2018
07:44:59
потом вот такая цепочка колбеков https://github.com/InsanusMokrassar/AutoPostTelegramBot/blob/23866b3a3828aa1c843033477c26b514ac364607/src/main/kotlin/com/github/insanusmokrassar/AutoPostTelegramBot/plugins/base/commands/DeletePost.kt#L29
корутины как раз нужны чтобы от этого избавиться

Алексей
13.09.2018
07:45:29

Pavlo
13.09.2018
07:45:31

Алексей
13.09.2018
07:45:39
но что мне делать вот с этим?:)

Denis
13.09.2018
07:46:17

Руслан
13.09.2018
07:46:50
вообще вот эта конструкция с launch

Алексей
13.09.2018
07:48:37

Siyr
13.09.2018
07:48:50

Руслан
13.09.2018
07:49:36

Google

Алексей
13.09.2018
07:49:52

Di7aK
13.09.2018
07:50:02
с fuel никто не работал? у меня при вызове cancel() на загрузке файла ничего не происходит, дальше грузит

Руслан
13.09.2018
07:50:11

Admin
ERROR: S client not available

Алексей
13.09.2018
07:50:19
фактически, когда этот launch завершается - в контейнере лежит результат
я и спрашиваю, как сделать хорошо
и как вообще это сделать работающим -.-

Alexey
13.09.2018
07:51:27
Всем привет. Взял в качестве di фрэймворка guice от гугла. Регистрирую мапперы в модуле примерно вот так
bind<Mapper<Chat, domain.model.Chat>>().to<TelegramChatToChatMapper>()
bind<Mapper<User?, domain.model.User>>().to<TelegramUserToUserMapper>()
При создании контейнера ошибка что нет имплементации мапперов
В качестве обертки над guice для котлина юзаю https://github.com/authzee/kotlin-guice это
Никто не встречался с такой проблемой?

Руслан
13.09.2018
07:51:31


Алексей
13.09.2018
07:52:04
я могу только коллбэки прокинуть
и то, не в сам OkHttp, а в либу

Руслан
13.09.2018
07:52:57
Один метод написать и у тебя будут нормальные корутины в проекте

Алексей
13.09.2018
07:54:05
Пойду читать, что такое Continuation
@HeapyHop Правильно ли я понимаю, что suspendCoroutine блочит корутину пока на её объекте Continuation не вызовут resume[WithException]?

Руслан
13.09.2018
08:03:55
Да, все верно

Алексей
13.09.2018
08:04:04
хорошо, спасибо

Google

Mikhail
13.09.2018
08:07:47

Di7aK
13.09.2018
08:10:29
потому что ключ значение?

Никита
13.09.2018
08:20:05
Ребят, подскажите, есть ByteArray() с двумя элементами, как мне конвертнуть его в интовое число?

Igor
13.09.2018
08:21:12
Зачем тебе Throw, ты же их джавы это не вызовишь

Алексей
13.09.2018
08:21:37
Да и даже если не вызову - лучше предупреждать, что может произойти

Natasha
13.09.2018
08:41:05
Сегодня день программиста
так что ребята
с праздником

Konstantine
13.09.2018
08:41:50
Нада пить!

abdurrahim hassan
13.09.2018
08:45:45

Alexey
13.09.2018
08:46:51
Ребята, подскажите как в toothpick + kotlin зарегистрировать дженерик класс?