Commit bcdc9ac3 authored by Vladislav Bogdashkin's avatar Vladislav Bogdashkin 🎣

show and cache plans via api

parent 394e26c4
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
package="com.biganto.visual.roompark"> package="com.biganto.visual.roompark">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application <application
android:name=".base.RoomParkApplication" android:name=".base.RoomParkApplication"
android:allowBackup="true" android:allowBackup="true"
......
...@@ -5,6 +5,7 @@ import com.biganto.visual.roompark.data.local.UserState ...@@ -5,6 +5,7 @@ import com.biganto.visual.roompark.data.local.UserState
import com.biganto.visual.roompark.data.repository.api.IRoomParkApi import com.biganto.visual.roompark.data.repository.api.IRoomParkApi
import com.biganto.visual.roompark.data.repository.db.IDb import com.biganto.visual.roompark.data.repository.db.IDb
import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import com.biganto.visual.roompark.data.repository.file.FileModule
import com.biganto.visual.roompark.data.repository.mapper.fromRaw import com.biganto.visual.roompark.data.repository.mapper.fromRaw
import com.biganto.visual.roompark.data.repository.mapper.fromRawList import com.biganto.visual.roompark.data.repository.mapper.fromRawList
import com.biganto.visual.roompark.domain.contract.DealContract import com.biganto.visual.roompark.domain.contract.DealContract
...@@ -26,7 +27,8 @@ import javax.inject.Inject ...@@ -26,7 +27,8 @@ import javax.inject.Inject
class EstateRepository @Inject constructor( class EstateRepository @Inject constructor(
private val local: ILocalStore, private val local: ILocalStore,
private val api: IRoomParkApi, private val api: IRoomParkApi,
private val db: IDb private val db: IDb,
private val file: FileModule
): DealContract { ): DealContract {
...@@ -115,6 +117,12 @@ class EstateRepository @Inject constructor( ...@@ -115,6 +117,12 @@ class EstateRepository @Inject constructor(
, walls:Boolean = false , walls:Boolean = false
, electric:Boolean = false) = , electric:Boolean = false) =
api.getDirectPlan(estateId, planId,furniture,sizes,walls,electric) api.getDirectPlan(estateId, planId,furniture,sizes,walls,electric)
.map{
val sFile = FileModule.getDirectory(file.context
,FileModule.FileDirectory.PlanTypeDir(childName = "planType-$estateId-$planId.html"))
file.saveFileToDisk(sFile,it)
sFile.path
}
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
...@@ -124,4 +132,12 @@ class EstateRepository @Inject constructor( ...@@ -124,4 +132,12 @@ class EstateRepository @Inject constructor(
arrayListOf(getPlanApi(estateId,planId)) arrayListOf(getPlanApi(estateId,planId))
) )
// fun getPlanRequestString(estateId: Int
// , planId:Int
// , furniture:Boolean
// , sizes:Boolean
// , walls:Boolean
// , electric:Boolean
// ) = api.getDirectPlan(estateId,planId,furniture,sizes,electric).
} }
...@@ -112,6 +112,21 @@ class RetrofitRepository @Inject constructor(retrofit: Retrofit) : IRoomParkApi ...@@ -112,6 +112,21 @@ class RetrofitRepository @Inject constructor(retrofit: Retrofit) : IRoomParkApi
) )
.compose(RetrofitResponseValidation()) .compose(RetrofitResponseValidation())
// fun getPlanString(
// estateId: Int,
// planType: Int,
// showFurniture: Boolean,
// showSizes: Boolean,
// showWalls: Boolean,
// showElectric: Boolean) = api.getPlan(
// estate_id = estateId,
// planType = planType,
// furniture = showFurniture.asInt,
// sizes = showSizes.asInt,
// walls = showWalls.asInt,
// electric = showElectric.asInt
// ).req
@Deprecated("hidden by states.getEstate method") @Deprecated("hidden by states.getEstate method")
override fun getMultiTour(building: Int, flat: Int): Observable<Int> = override fun getMultiTour(building: Int, flat: Int): Observable<Int> =
......
package com.biganto.visual.roompark.data.repository.file package com.biganto.visual.roompark.data.repository.file
import android.app.Application
import android.content.Context import android.content.Context
import android.os.Environment import android.os.Environment
import com.google.gson.JsonElement import com.google.gson.JsonElement
import dagger.Module import dagger.Module
import timber.log.Timber import timber.log.Timber
import java.io.File import java.io.File
import javax.inject.Inject
/** /**
...@@ -14,7 +16,7 @@ import java.io.File ...@@ -14,7 +16,7 @@ import java.io.File
@Module @Module
class FilesModule(private val context: Context) { class FileModule @Inject constructor(val context: Application) {
private val rootFolder: File private val rootFolder: File
get() { get() {
...@@ -49,7 +51,10 @@ class FilesModule(private val context: Context) { ...@@ -49,7 +51,10 @@ class FilesModule(private val context: Context) {
} }
fun saveFileToDisk(file:File,content: String){ fun saveFileToDisk(file:File,content: String){
Timber.d("write to : $file")
Timber.d("write to : ${file.name}")
// file.createNewFile()
file.parentFile.mkdirs()
file.writeText(content) //to json array because core unity method parse data like TourData[] Estate[] etc.. file.writeText(content) //to json array because core unity method parse data like TourData[] Estate[] etc..
} }
...@@ -61,18 +66,20 @@ class FilesModule(private val context: Context) { ...@@ -61,18 +66,20 @@ class FilesModule(private val context: Context) {
} }
companion object { companion object {
fun getDirectory(context: Context?, dirType: FileDirectory): String = fun getDirectory(context: Context?, dirType: FileDirectory): File =
File(
context?.filesDir?.absolutePath?.plus(dirType.dir) context?.filesDir?.absolutePath?.plus(dirType.dir)
?: throw IllegalArgumentException("Context cannot be null!") ?: throw IllegalArgumentException("Context cannot be null!")
)
fun assetsDirectory(context: Context?): String = context?.filesDir?.absolutePath fun assetsDirectory(context: Context?): String = context?.filesDir?.absolutePath
?: throw IllegalArgumentException("Context cannot be null!") ?: throw IllegalArgumentException("Context cannot be null!")
} }
sealed class FileDirectory(val dir:String) { sealed class FileDirectory(val dir:String) {
class PlanTypeDir(dir:String = "estates") : FileDirectory(dir) class PlanTypeDir(dir:String = "/estates",childName:String? = null) : FileDirectory(dir.plus("/$childName"))
class ToursDir(dir:String = "tours") : FileDirectory(dir) class ToursDir(dir:String = "/tours",childName:String? = null) : FileDirectory(dir.plus("/childName"))
class FeedsDir(dir:String = "feeds") : FileDirectory(dir) class FeedsDir(dir:String = "/feeds",childName:String? = null) : FileDirectory(dir.plus("/childName"))
class Albums(dir:String = "photos") : FileDirectory(dir) class Albums(dir:String = "/photos",childName:String? = null) : FileDirectory(dir.plus("/childName"))
} }
} }
\ No newline at end of file
...@@ -8,6 +8,7 @@ import com.biganto.visual.roompark.data.repository.api.IRoomParkApi ...@@ -8,6 +8,7 @@ import com.biganto.visual.roompark.data.repository.api.IRoomParkApi
import com.biganto.visual.roompark.data.repository.api.retrofit.di.RetrofitModule import com.biganto.visual.roompark.data.repository.api.retrofit.di.RetrofitModule
import com.biganto.visual.roompark.data.repository.db.IDb import com.biganto.visual.roompark.data.repository.db.IDb
import com.biganto.visual.roompark.data.repository.db.requrey.DbModule import com.biganto.visual.roompark.data.repository.db.requrey.DbModule
import com.biganto.visual.roompark.data.repository.file.FileModule
import com.biganto.visual.roompark.domain.contract.AuthContract import com.biganto.visual.roompark.domain.contract.AuthContract
import com.biganto.visual.roompark.domain.contract.DealContract import com.biganto.visual.roompark.domain.contract.DealContract
import com.biganto.visual.roompark.domain.contract.DevProgressContract import com.biganto.visual.roompark.domain.contract.DevProgressContract
...@@ -43,7 +44,8 @@ import javax.inject.Singleton ...@@ -43,7 +44,8 @@ import javax.inject.Singleton
PicassoModule::class, PicassoModule::class,
ActivityModule::class, ActivityModule::class,
ContractRepositoryModule::class, ContractRepositoryModule::class,
AppActivityModule ::class]) AppActivityModule ::class,
FileModule::class])
interface AppComponent : AndroidInjector<RoomParkApplication>{ interface AppComponent : AndroidInjector<RoomParkApplication>{
fun authC(): AuthContract fun authC(): AuthContract
...@@ -65,6 +67,8 @@ interface AppComponent : AndroidInjector<RoomParkApplication>{ ...@@ -65,6 +67,8 @@ interface AppComponent : AndroidInjector<RoomParkApplication>{
fun providePicassoAsync(): Picasso fun providePicassoAsync(): Picasso
fun provideFileSystem(): FileModule
@Component.Factory @Component.Factory
interface Factory{ interface Factory{
......
package com.biganto.visual.roompark.presentation.screen.estate package com.biganto.visual.roompark.presentation.screen.estate
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.webkit.WebView import android.webkit.WebView
...@@ -15,9 +16,12 @@ import com.jakewharton.rxbinding3.material.selections ...@@ -15,9 +16,12 @@ import com.jakewharton.rxbinding3.material.selections
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import timber.log.Timber import timber.log.Timber
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import javax.inject.Inject import javax.inject.Inject
/** /**
* Created by Vladislav Bogdashkin on 30.09.2019. * Created by Vladislav Bogdashkin on 30.09.2019.
*/ */
...@@ -120,13 +124,40 @@ class EstateScreenController : ...@@ -120,13 +124,40 @@ class EstateScreenController :
} }
private fun render(viewState: EstateScreenViewState.LoadPlan) { private fun render(viewState: EstateScreenViewState.LoadPlan) {
val mimeTypeSvg = "image/svg+xml" // val mimeTypeSvg = "image/svg+xml"
val mimeTypeSvg = "text/html"
val encoding = "utf-8" val encoding = "utf-8"
viewState.planBody.replace("<br>","<br />") // viewState.planBody.replace("<br>","<br />")
viewState.planBody.replace("<\\br>","<br />") // viewState.planBody.replace("<\\br>","<br />")
// Timber.w("counts br : ${}) // Timber.w("counts br : ${})
planWebView.settings.javaScriptEnabled = true planWebView.settings.javaScriptEnabled = true
planWebView.loadData(viewState.planBody,mimeTypeSvg,encoding) planWebView.clearCache(true)
// planWebView.loadUrl("https://room-park.ru/choose/flat/2/1/74/")
val svgStream = resources?.openRawResource(R.raw.flat_plan_test)
val inputStreamReader = InputStreamReader(svgStream!!)
val sb = StringBuilder()
var line: String?
val br = BufferedReader(inputStreamReader)
line = br.readLine()
while (line != null) {
sb.append(line)
line = br.readLine()
}
br.close()
var svgBody : String = sb.toString()
Timber.d("ulr : ${viewState.planBody}")
val uri = "file:///${Uri.parse(viewState.planBody).path}"
Timber.d("uri: ${uri}")
svgBody ="https://room-park.ru/api/estates.getPlan?&client=androidplayer&client_version=3.0&v=2.0&estate_id=4902&plan_id=0&furniture=0&sizes=0&walls=0&electric=0"
svgBody = uri
planWebView.loadUrl(svgBody)
// planWebView.loadUrl("https://room-park.ru/api/estates.getPlan?&client=androidplayer&client_version=3.0&v=2.0&estate_id=4009&plan_id=1&furniture=1&sizes=0&walls=0&electric=1")
// planWebView.loadDataWithBaseURL(
// "",viewState.planBody,mimeTypeSvg,encoding,null
// )
// planWebView.load(svgBody,mimeTypeSvg,encoding)
} }
private fun getComponent() = DaggerEstateScreenComponent.factory() private fun getComponent() = DaggerEstateScreenComponent.factory()
...@@ -137,4 +168,4 @@ class EstateScreenController : ...@@ -137,4 +168,4 @@ class EstateScreenController :
override fun getLayoutId(): Int = R.layout.flat_full_card_screen override fun getLayoutId(): Int = R.layout.flat_full_card_screen
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment