Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Room Park Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vladislav Bogdashkin
Room Park Android
Commits
4d0a9bdf
Commit
4d0a9bdf
authored
Dec 03, 2019
by
Vladislav Bogdashkin
🎣
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/api_update' into develop
parents
7fcc5468
0990432a
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
120 additions
and
118 deletions
+120
-118
FeedsRepository.kt
...nto/visual/roompark/data/data_provider/FeedsRepository.kt
+22
-34
IApi.kt
...a/com/biganto/visual/roompark/data/repository/api/IApi.kt
+2
-1
IRoomParkMobileApi.kt
...ompark/data/repository/api/retrofit/IRoomParkMobileApi.kt
+18
-1
RetrofitRepository.kt
...ompark/data/repository/api/retrofit/RetrofitRepository.kt
+10
-1
response.kt
...ual/roompark/data/repository/api/retrofit/raw/response.kt
+14
-1
IDb.kt
...ava/com/biganto/visual/roompark/data/repository/db/IDb.kt
+0
-1
RequeryRepository.kt
.../roompark/data/repository/db/requrey/RequeryRepository.kt
+1
-5
Article.kt
...sual/roompark/data/repository/db/requrey/model/Article.kt
+1
-1
Feed.kt
.../visual/roompark/data/repository/db/requrey/model/Feed.kt
+1
-3
raw2entity.kt
...anto/visual/roompark/data/repository/mapper/raw2entity.kt
+8
-25
ContextModule.kt
...va/com/biganto/visual/roompark/di/dagger/ContextModule.kt
+1
-1
DataModule.kt
.../java/com/biganto/visual/roompark/di/dagger/DataModule.kt
+0
-3
FeedsContract.kt
.../biganto/visual/roompark/domain/contract/FeedsContract.kt
+3
-2
articles.kt
...com/biganto/visual/roompark/domain/interactor/articles.kt
+5
-5
feeds.kt
...va/com/biganto/visual/roompark/domain/interactor/feeds.kt
+11
-10
feeds.kt
...in/java/com/biganto/visual/roompark/domain/model/feeds.kt
+4
-5
feedUseCase.kt
...om/biganto/visual/roompark/domain/use_case/feedUseCase.kt
+4
-4
ScreenController.kt
...oompark/presentation/screen/feed_list/ScreenController.kt
+3
-3
ScreenDI.kt
...visual/roompark/presentation/screen/feed_list/ScreenDI.kt
+1
-1
ScreenPresenter.kt
...roompark/presentation/screen/feed_list/ScreenPresenter.kt
+1
-1
ScreenContract.kt
...sual/roompark/presentation/screen/feeds/ScreenContract.kt
+1
-1
ScreenController.kt
...al/roompark/presentation/screen/feeds/ScreenController.kt
+6
-6
ScreenPresenter.kt
...ual/roompark/presentation/screen/feeds/ScreenPresenter.kt
+2
-2
ScreenViewState.kt
...ual/roompark/presentation/screen/feeds/ScreenViewState.kt
+1
-1
No files found.
app/src/main/java/com/biganto/visual/roompark/data/data_provider/FeedsRepository.kt
View file @
4d0a9bdf
...
...
@@ -6,7 +6,6 @@ import com.biganto.visual.roompark.data.repository.db.requrey.model.ArticleEntit
import
com.biganto.visual.roompark.data.repository.mapper.fromRaw
import
com.biganto.visual.roompark.data.repository.mapper.fromRawList
import
com.biganto.visual.roompark.domain.contract.FeedsContract
import
com.biganto.visual.roompark.domain.custom_exception.CustomApiException
import
com.biganto.visual.roompark.domain.model.ArticleModel
import
com.biganto.visual.roompark.domain.model.ArticlesPreviewModel
import
com.biganto.visual.roompark.domain.model.FeedModel
...
...
@@ -31,11 +30,11 @@ class FeedsContractModule @Inject constructor(
override
fun
fetchFeeds
():
Observable
<
List
<
FeedModel
>>
=
fetchAllFeeds
().
doOnError
(
::
e
)
override
fun
fetchFeedObservable
(
id
:
Int
):
Observable
<
ArticlesPreviewModel
>
=
fetchArticles
(
id
)
override
fun
fetchFeedObservable
(
feedAlias
:
String
):
Observable
<
ArticlesPreviewModel
>
=
fetchArticles
(
feedAlias
)
override
fun
fetchFeedObservable
(
id
:
Int
,
pageSize
:
Int
,
startIndex
:
Int
)
:
Observable
<
ArticlesPreviewModel
>
=
fetchArticles
(
id
,
pageSize
,
startIndex
)
override
fun
fetchFeedObservable
(
feedAlias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
)
:
Observable
<
ArticlesPreviewModel
>
=
fetchArticles
(
feedAlias
,
pageSize
,
startIndex
)
override
fun
getArticle
(
id
:
Int
):
Observable
<
ArticleModel
>
=
fetchArticle
(
id
)
...
...
@@ -45,44 +44,36 @@ class FeedsContractModule @Inject constructor(
}
private
fun
fetchArticlessApi
(
feedId
:
Int
,
pageSize
:
Int
,
startIndex
:
Int
):
Observable
<
List
<
ArticleEntity
>>?
{
val
feed
=
db
.
getFeed
(
feedId
).
firstOrNull
()
if
(
feed
==
null
)
{
e
(
"Unknown feedId: $feedId - cann't resolve feed_alias!"
)
throw
CustomApiException
.
UnknownCustomApiException
(-
1
,
null
,
"Unknown Feed!"
)
}
else
{
return
api
.
getArticlesPage
(
feed
.
alias
,
pageSize
,
floor
(
startIndex
.
toDouble
()/
pageSize
.
toDouble
()).
toInt
()+
1
)
private
fun
fetchArticlessApi
(
feedAlias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
)
:
Observable
<
List
<
ArticleEntity
>>?
=
api
.
getArticlesPage
(
feedAlias
,
pageSize
,
floor
(
startIndex
.
toDouble
()/
pageSize
.
toDouble
()).
toInt
()+
1
)
.
doOnNext
{
Timber
.
d
(
"raw0 $it"
)
}
.
map
{
it
.
items
}
.
map
{
fromRaw
(
it
,
feed
Id
)
}
.
map
{
fromRaw
(
it
,
feed
Alias
)
}
.
doOnNext
{
Timber
.
d
(
"raw enitites $it"
)
}
.
doOnNext
(
db
::
blockingUpsert
)
.
subscribeOn
(
Schedulers
.
io
())
}
}
private
fun
fetchArticlesDb
(
feedId
:
Int
,
pageSize
:
Int
,
startIndex
:
Int
):
Observable
<
MutableList
<
ArticleEntity
>>?
{
val
feed
=
db
.
getFeed
(
feedId
).
firstOrNull
()
Timber
.
d
(
"db startindex: $startIndex"
)
if
(
feed
==
null
)
{
e
(
"Unknown feedId: $feedId - cann't resolve feed_alias!"
)
throw
CustomApiException
.
UnknownCustomApiException
(-
1
,
null
,
"Unknown Feed!"
)
}
else
return
db
.
fetchArticles
(
feed
.
alias
,
pageSize
,
startIndex
)
private
fun
fetchArticlesDb
(
feedAlias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
)
:
Observable
<
MutableList
<
ArticleEntity
>>?
=
db
.
fetchArticles
(
feedAlias
,
pageSize
,
startIndex
)
.
toList
()
.
toObservable
()
.
doOnNext
{
Timber
.
d
(
"db items: ${it.size}"
)
}
.
subscribeOn
(
Schedulers
.
io
())
}
private
fun
fetchArticles
(
feedId
:
Int
,
pageSize
:
Int
=
10
,
startIndex
:
Int
=
0
):
Observable
<
ArticlesPreviewModel
>
=
private
fun
fetchArticles
(
feedAlias
:
String
,
pageSize
:
Int
=
10
,
startIndex
:
Int
=
0
)
:
Observable
<
ArticlesPreviewModel
>
=
Observable
.
mergeDelayError
(
arrayListOf
(
fetchArticlessApi
(
feedId
,
pageSize
,
startIndex
),
fetchArticlesDb
(
feedId
,
pageSize
,
startIndex
))
).
map
{
fromEntity
(
feedId
,
it
)
}
arrayListOf
(
fetchArticlessApi
(
feedAlias
,
pageSize
,
startIndex
),
fetchArticlesDb
(
feedAlias
,
pageSize
,
startIndex
)
)
).
map
{
fromEntity
(
feedAlias
,
it
)
}
private
val
fetchFeedsApi
=
...
...
@@ -106,10 +97,7 @@ class FeedsContractModule @Inject constructor(
private
fun
fetchArticleApi
(
id
:
Int
)
=
api
.
getArticle
(
id
)
.
doOnNext
{
Timber
.
d
(
"raw0 $it"
)
}
.
flatMap
{
article
->
db
.
getFeed
(
article
.
feed_alias
).
observable
()
.
map
{
fromRaw
(
article
,
it
.
id
)
}
}
.
map
(
::
fromRaw
)
.
flatMap
{
article
->
db
.
getArticle
(
article
.
id
).
observable
()
.
map
{
articleEntity
->
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/api/IApi.kt
View file @
4d0a9bdf
...
...
@@ -40,12 +40,13 @@ interface IRoomParkApi {
showElectric
:
Boolean
):
Observable
<
String
>
fun
getMultiTour
(
building
:
Int
,
flat
:
Int
):
Observable
<
List
<
PlanRaw
>
>
fun
getMultiTour
(
building
:
Int
,
flat
:
Int
):
Observable
<
Int
>
fun
getArticlesPage
(
feedName
:
String
,
pageSize
:
Int
=
DEFAULT_ARTICLE_PAGE_SIZE
,
page
:
Int
):
Observable
<
ArticlesListPaginationRaw
>
fun
getAlbums
(
parentId
:
Int
?
=
null
):
Observable
<
List
<
ImageAlbumRaw
>>
fun
getEstate
(
building
:
Int
,
flat
:
Int
):
Observable
<
EstateRaw
>
}
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/api/retrofit/IRoomParkMobileApi.kt
View file @
4d0a9bdf
...
...
@@ -127,6 +127,13 @@ interface IRoomParkMobileApi{
//endregion
//region Get Estate
const
val
GET_ESTATE_ID
=
"estates.getEstate"
const
val
ESTATE_BUILDING_NUMBER_PARAM
=
"building "
const
val
ESTATE_FLAT_NUMBER_PARAM
=
"number "
//endregion
}
...
...
@@ -248,6 +255,7 @@ interface IRoomParkMobileApi{
):
Observable
<
Response
<
String
>>
@Deprecated
(
"change to estates.getEstate method as more common"
)
@GET
(
"$API_URL$GET_MULTITOUR_ID$DELIMITER"
)
fun
getMultiTourId
(
@Query
(
CLIENT_TYPE_PARAM
)
clientType
:
String
=
DEFAULT_CLIENT_TYPE
,
...
...
@@ -255,7 +263,16 @@ interface IRoomParkMobileApi{
@Query
(
API_VERSION_PARAM
)
apiVersion
:
String
=
DEFAULT_API_VERSION
,
@Query
(
MULTITOUR_BUILDING_NUMBER_PARAM
)
building
:
Int
,
@Query
(
MULTITOUR_FLAT_NUMBER_PARAM
)
flatNumber
:
Int
):
Observable
<
Response
<
List
<
PlanRaw
>>>
):
Observable
<
Response
<
Int
>>
@GET
(
"$API_URL$GET_ESTATE_ID$DELIMITER"
)
fun
getEstate
(
@Query
(
CLIENT_TYPE_PARAM
)
clientType
:
String
=
DEFAULT_CLIENT_TYPE
,
@Query
(
CLIENT_VERSION_PARAM
)
clientVersion
:
String
=
DEFAULT_CLIENT_VERSION
,
@Query
(
API_VERSION_PARAM
)
apiVersion
:
String
=
DEFAULT_API_VERSION
,
@Query
(
ESTATE_BUILDING_NUMBER_PARAM
)
building
:
Int
,
@Query
(
ESTATE_FLAT_NUMBER_PARAM
)
flatNumber
:
Int
):
Observable
<
Response
<
EstateRaw
>>
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/data/repository/api/retrofit/RetrofitRepository.kt
View file @
4d0a9bdf
...
...
@@ -107,13 +107,22 @@ class RetrofitRepository @Inject constructor(retrofit: Retrofit) : IRoomParkApi
)
.
compose
(
RetrofitResponseValidation
())
override
fun
getMultiTour
(
building
:
Int
,
flat
:
Int
):
Observable
<
List
<
PlanRaw
>>
=
@Deprecated
(
"hidden by states.getEstate method"
)
override
fun
getMultiTour
(
building
:
Int
,
flat
:
Int
):
Observable
<
Int
>
=
api
.
getMultiTourId
(
building
=
building
,
flatNumber
=
flat
)
.
compose
(
RetrofitResponseValidation
())
override
fun
getEstate
(
building
:
Int
,
flat
:
Int
):
Observable
<
EstateRaw
>
=
api
.
getEstate
(
building
=
building
,
flatNumber
=
flat
)
.
compose
(
RetrofitResponseValidation
())
}
enum
class
PlanTypeCatalog
(
val
planId
:
Int
,
val
planName
:
String
){
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/api/retrofit/raw/response.kt
View file @
4d0a9bdf
...
...
@@ -74,7 +74,6 @@ data class EstateRoomRaw(
)
data class
FeedRaw
(
val
id
:
Int
,
val
alias
:
String
,
val
title
:
String
)
...
...
@@ -99,6 +98,8 @@ data class ArticleRaw(
val
id
:
Int
,
val
published
:
Date
,
val
title
:
String
,
val
announce
:
String
,
val
preview
:
String
?,
val
body
:
String
,
val
feed_alias
:
String
,
val
photo
:
List
<
NewsPhotoRaw
>?
...
...
@@ -156,4 +157,16 @@ data class AppVersionRaw(
val
message
:
String
?,
val
critical
:
Boolean
,
val
errors
:
List
<
ErrorRaw
>?
)
data class
WebCamRaw
(
val
id
:
Int
,
val
title
:
String
,
val
Streams
:
List
<
StreamRaw
>
)
data class
StreamRaw
(
val
res_name
:
String
,
val
hls
:
String
,
val
rtmp
:
String
)
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/data/repository/db/IDb.kt
View file @
4d0a9bdf
...
...
@@ -18,7 +18,6 @@ interface IDb {
fun
<
T
:
List
<
Persistable
>
>
blockingUpsert
(
entity
:
T
)
fun
userObservableResult
(
uuid
:
Int
):
Observable
<
ReactiveResult
<
UserEntity
>>
fun
fetchArticles
(
feedAlias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
):
Observable
<
ArticleEntity
>
fun
getFeed
(
feedId
:
Int
):
ReactiveResult
<
FeedEntity
>
fun
getTopLevelAlbums
():
Observable
<
ImageAlbumEntity
>
fun
getChildAlbums
(
parentId
:
Int
):
Observable
<
ImageAlbumEntity
>
fun
checkIfExistsAlbumJunction
(
albumId
:
Int
,
parentAlbumId
:
Int
):
ImageAlbumJunctionEntity
?
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/db/requrey/RequeryRepository.kt
View file @
4d0a9bdf
...
...
@@ -63,10 +63,6 @@ class RequeryRepository @Inject constructor(
override
fun
fetchFeeds
():
Observable
<
FeedEntity
>
=
fetchAll
<
FeedEntity
>().
get
().
observable
()
override
fun
getFeed
(
feedId
:
Int
):
ReactiveResult
<
FeedEntity
>
=
fetchAll
<
FeedEntity
>().
where
(
FeedEntity
.
ID
.
eq
(
feedId
))
.
get
()
override
fun
getFeed
(
feedAlias
:
String
):
ReactiveResult
<
FeedEntity
>
=
fetchAll
<
FeedEntity
>().
where
(
FeedEntity
.
ALIAS
.
eq
(
feedAlias
))
.
get
()
...
...
@@ -89,7 +85,7 @@ class RequeryRepository @Inject constructor(
override
fun
fetchArticles
(
feedAlias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
)
:
Observable
<
ArticleEntity
>
=
fetchAll
<
ArticleEntity
>()
.
where
(
ArticleEntity
.
FEED_ID
.
eq
(
1
))
.
where
(
ArticleEntity
.
FEED_ID
.
eq
(
feedAlias
))
.
orderBy
(
ArticleEntity
.
PUBLISHED
.
desc
())
.
limit
(
pageSize
)
.
offset
(
startIndex
)
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/db/requrey/model/Article.kt
View file @
4d0a9bdf
...
...
@@ -22,7 +22,7 @@ interface Article : Persistable {
val
preview
:
String
?
@get
:
Nullable
val
body
:
String
?
@get
:
ForeignKey
(
references
=
Feed
::
class
,
referencedColumn
=
"
id
"
)
@get
:
ForeignKey
(
references
=
Feed
::
class
,
referencedColumn
=
"
alias
"
)
@get
:
ManyToOne
(
cascade
=
[
CascadeAction
.
NONE
])
val
feed
:
Feed
?
@get
:
Convert
(
TitledPhotoListConverter
::
class
)
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/db/requrey/model/Feed.kt
View file @
4d0a9bdf
...
...
@@ -9,11 +9,9 @@ import io.requery.*
@Entity
interface
Feed
:
Persistable
{
@get
:
Key
val
id
:
Int
val
title
:
String
val
alias
:
String
val
title
:
String
@get
:
JunctionTable
(
name
=
"FeedArticlesRule"
)
@get
:
OneToMany
(
cascade
=
[
CascadeAction
.
DELETE
])
val
articles
:
Set
<
Article
>?
...
...
app/src/main/java/com/biganto/visual/roompark/data/repository/mapper/raw2entity.kt
View file @
4d0a9bdf
...
...
@@ -27,7 +27,6 @@ fun fromRaw(raw: AuthRaw) : UserEntity {
fun
fromRaw
(
raw
:
FeedRaw
)
:
FeedEntity
{
val
entity
=
FeedEntity
()
entity
.
setId
(
raw
.
id
)
entity
.
setTitle
(
raw
.
title
)
entity
.
setAlias
(
raw
.
alias
)
return
entity
...
...
@@ -36,9 +35,12 @@ fun fromRaw(raw:FeedRaw) : FeedEntity {
fun
fromRaw
(
raw
:
ArticleRaw
)
:
ArticleEntity
{
val
entity
=
ArticleEntity
()
entity
.
setId
(
raw
.
id
)
entity
.
setPublished
(
raw
.
published
)
entity
.
setTitle
(
raw
.
title
)
entity
.
setBody
(
raw
.
body
)
entity
.
setPreview
(
raw
.
feed_alias
)
entity
.
setAnnounce
(
raw
.
announce
)
entity
.
setPreview
(
raw
.
preview
)
raw
.
photo
?.
let
{
entity
.
photo
=
fromRawList
(
it
,
::
fromRaw
)}
val
feed
=
FeedEntity
()
feed
.
setAlias
(
raw
.
feed_alias
)
entity
.
setFeed
(
feed
)
...
...
@@ -47,7 +49,7 @@ fun fromRaw(raw:ArticleRaw) : ArticleEntity {
}
fun
fromRaw
(
raw
:
NewsArticleRaw
,
feed
Id
:
Int
):
ArticleEntity
{
fun
fromRaw
(
raw
:
NewsArticleRaw
,
feed
Alias
:
String
):
ArticleEntity
{
val
entity
=
ArticleEntity
()
entity
.
setId
(
raw
.
id
)
entity
.
setPreview
(
raw
.
preview
)
...
...
@@ -55,31 +57,12 @@ fun fromRaw(raw:NewsArticleRaw,feedId:Int):ArticleEntity{
entity
.
setPublished
(
raw
.
published
)
entity
.
setTitle
(
raw
.
title
)
val
feed
=
FeedEntity
()
feed
.
setId
(
feedId
)
// feed.setAlias(feedAlias)
feed
.
setAlias
(
feedAlias
)
entity
.
setFeed
(
feed
)
return
entity
}
fun
fromRaw
(
raw
:
ArticleRaw
,
feedId
:
Int
):
ArticleEntity
{
val
entity
=
ArticleEntity
()
entity
.
setId
(
raw
.
id
)
entity
.
setPublished
(
raw
.
published
)
entity
.
setTitle
(
raw
.
title
)
entity
.
setBody
(
raw
.
body
)
raw
.
photo
?.
let
{
entity
.
photo
=
fromRawList
(
it
,
::
fromRaw
)
}
val
feed
=
FeedEntity
()
feed
.
setId
(
feedId
)
// feed.setAlias(raw.feed_alias)
entity
.
setFeed
(
feed
)
return
entity
}
fun
fromRaw
(
raw
:
NewsPhotoRaw
):
TitledPhoto
{
return
TitledPhoto
(
raw
.
title
,
raw
.
url
)
}
...
...
@@ -99,7 +82,7 @@ fun fromRaw(raw:ImageAlbumRaw) : ImageAlbumEntity {
fun
<
E
,
M
>
fromRawList
(
raw
:
List
<
E
>,
block
:(
E
)->
M
):
List
<
M
>
=
List
(
raw
.
size
)
{
index
->
block
(
raw
[
index
])
}
fun
fromRaw
(
raw
:
List
<
NewsArticleRaw
>,
feed
Id
:
Int
):
List
<
ArticleEntity
>
=
List
(
raw
.
size
)
{
index
->
fromRaw
(
raw
[
index
],
feed
Id
)
}
fun
fromRaw
(
raw
:
List
<
NewsArticleRaw
>,
feed
Alias
:
String
):
List
<
ArticleEntity
>
=
List
(
raw
.
size
)
{
index
->
fromRaw
(
raw
[
index
],
feed
Alias
)
}
val
calcTargetResolution
=
max
(
display
.
widthPixels
,
display
.
heightPixels
)
app/src/main/java/com/biganto/visual/roompark/di/dagger/ContextModule.kt
View file @
4d0a9bdf
...
...
@@ -21,7 +21,7 @@ const val ESTATES_CACHE_LIMIT_SECONDS_INACTIVE = 200L
const
val
FILES_CACHE_LIMIT_SIZE
=
10000
const
val
FILES_CACHE_LIMIT_SECONDS_INACTIVE
=
60L
const
val
DATABASE_VERSION
=
7
const
val
DATABASE_VERSION
=
8
@Module
abstract
class
AppModule
{
...
...
app/src/main/java/com/biganto/visual/roompark/di/dagger/DataModule.kt
View file @
4d0a9bdf
...
...
@@ -26,15 +26,12 @@ interface DataComponent{
@Module
(
includes
=
[
DataModule
::
class
,
RetrofitModule
::
class
,
DbModule
::
class
,
LocalStorage
::
class
])
abstract
class
ContractRepositoryModule
{
@Singleton
@Binds
abstract
fun
provideAuth
(
contract
:
AuthContractModule
):
AuthContract
@Singleton
@Binds
abstract
fun
provideFeedsContract
(
impl
:
FeedsContractModule
):
FeedsContract
@Singleton
@Binds
abstract
fun
provideDevProgressContract
(
impl
:
AlbumsContractModule
):
DevProgressContract
}
...
...
app/src/main/java/com/biganto/visual/roompark/domain/contract/FeedsContract.kt
View file @
4d0a9bdf
...
...
@@ -13,10 +13,11 @@ interface FeedsContract{
fun
fetchFeeds
():
Observable
<
List
<
FeedModel
>>
fun
getArticle
(
id
:
Int
):
Observable
<
ArticleModel
>
fun
fetchFeedObservable
(
id
:
Int
):
Observable
<
ArticlesPreviewModel
>
fun
fetchFeedObservable
(
id
:
Int
,
feedAlias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
):
Observable
<
ArticlesPreviewModel
>
fun
fetchFeedObservable
(
feedAlias
:
String
):
Observable
<
ArticlesPreviewModel
>
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/domain/interactor/articles.kt
View file @
4d0a9bdf
...
...
@@ -11,11 +11,11 @@ import javax.inject.Inject
class
ArticlesInteractor
@Inject
constructor
(
)
{
fun
fetchArticles
(
feed
Id
:
Int
):
Single
<
ArticlesPreviewModel
>
=
Single
.
just
(
when
(
feed
Id
)
{
1
->
FeedsInteractor
.
testNewsArticles
2
->
FeedsInteractor
.
testBlogsArticles
3
->
FeedsInteractor
.
testDevArticles
fun
fetchArticles
(
feed
Alias
:
String
):
Single
<
ArticlesPreviewModel
>
=
Single
.
just
(
when
(
feed
Alias
)
{
"news"
->
FeedsInteractor
.
testNewsArticles
"blog"
->
FeedsInteractor
.
testBlogsArticles
"constructors_blog"
->
FeedsInteractor
.
testDevArticles
else
->
error
(
"unknown feedId"
)
}
)
...
...
app/src/main/java/com/biganto/visual/roompark/domain/interactor/feeds.kt
View file @
4d0a9bdf
...
...
@@ -20,8 +20,8 @@ class FeedsInteractor @Inject constructor(
feedsUseCase
.
getFeeds
().
map
{
FeedsHeaderModel
(
it
)}
//Single.just(testFeeds)
fun
fetchArticles
(
feed
Id
:
Int
):
Observable
<
ArticlesPreviewModel
>
=
feedsUseCase
.
getArticles
(
feed
Id
)
fun
fetchArticles
(
feed
Alias
:
String
):
Observable
<
ArticlesPreviewModel
>
=
feedsUseCase
.
getArticles
(
feed
Alias
)
// Single.just(
// when (feedId) {
// 1 -> testNewsArticles
...
...
@@ -30,8 +30,8 @@ class FeedsInteractor @Inject constructor(
// else -> error("unknown feedId")
// }
// )
fun
fetchArticles
(
feed
Id
:
Int
,
pageSize
:
Int
,
startIndex
:
Int
):
Observable
<
ArticlesPreviewModel
>
=
feedsUseCase
.
fetchArticlesPage
(
feed
Id
,
pageSize
,
startIndex
)
fun
fetchArticles
(
feed
Alias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
):
Observable
<
ArticlesPreviewModel
>
=
feedsUseCase
.
fetchArticlesPage
(
feed
Alias
,
pageSize
,
startIndex
)
fun
fetchAlbums
():
Observable
<
List
<
AlbumPreviewModel
>>
=
albumsUseCase
.
getProgressAlbums
()
...
...
@@ -50,14 +50,15 @@ class FeedsInteractor @Inject constructor(
val
testFeeds
=
FeedsHeaderModel
(
listOf
(
FeedModel
(
1
,
"НОВОСТИ"
),
FeedModel
(
2
,
"БЛОГИ"
),
FeedModel
(
2
,
"БЛОГ СТРОИТЕЛЬСТВА"
)
FeedModel
(
"news"
,
"НОВОСТИ"
),
FeedModel
(
"news"
,
"БЛОГИ"
),
FeedModel
(
"news"
,
"БЛОГ СТРОИТЕЛЬСТВА"
)
)
)
val
testNewsArticles
=
ArticlesPreviewModel
(
1
,
"news"
,
listOf
(
ArticlePreviewModel
(
1
...
...
@@ -87,7 +88,7 @@ class FeedsInteractor @Inject constructor(
)
val
testBlogsArticles
=
ArticlesPreviewModel
(
2
,
"news"
,
listOf
(
ArticlePreviewModel
(
1
...
...
@@ -117,7 +118,7 @@ class FeedsInteractor @Inject constructor(
)
val
testDevArticles
=
ArticlesPreviewModel
(
3
,
"news"
,
listOf
(
ArticlePreviewModel
(
1
...
...
app/src/main/java/com/biganto/visual/roompark/domain/model/feeds.kt
View file @
4d0a9bdf
...
...
@@ -11,7 +11,7 @@ import java.util.*
const
val
DEFAULT_ROOM_PARK_PREVIEW
=
"https://room-park.ru/assets/news_articles/preview/00/00/00/15-fe1886.jpeg"
data class
FeedModel
(
val
feedId
:
Int
,
val
title
:
String
,
val
alias
:
String
?
=
null
)
data class
FeedModel
(
val
title
:
String
,
val
alias
:
String
)
data class
FeedsHeaderModel
(
val
feeds
:
List
<
FeedModel
>)
...
...
@@ -30,7 +30,7 @@ data class ArticlePreviewModel(
}
}
data class
ArticlesPreviewModel
(
val
parentFeed
Id
:
Int
,
val
articles
:
List
<
ArticlePreviewModel
>)
data class
ArticlesPreviewModel
(
val
parentFeed
Alias
:
String
,
val
articles
:
List
<
ArticlePreviewModel
>)
data class
ArticleModel
(
...
...
@@ -44,7 +44,6 @@ data class ArticleModel(
)
fun
fromEntity
(
entity
:
FeedEntity
):
FeedModel
=
FeedModel
(
feedId
=
entity
.
id
,
title
=
entity
.
title
,
alias
=
entity
.
alias
)
...
...
@@ -58,9 +57,9 @@ fun fromEntity(entity: ArticleEntity):ArticlePreviewModel = ArticlePreviewModel(
isRead
=
false
)
fun
fromEntity
(
parentId
:
Int
,
entity
:
List
<
ArticleEntity
>):
ArticlesPreviewModel
=
fun
fromEntity
(
parentId
:
String
,
entity
:
List
<
ArticleEntity
>):
ArticlesPreviewModel
=
ArticlesPreviewModel
(
parentFeed
Id
=
parentId
,
parentFeed
Alias
=
parentId
,
articles
=
fromEntity
(
entity
,
::
fromEntity
)
)
...
...
app/src/main/java/com/biganto/visual/roompark/domain/use_case/feedUseCase.kt
View file @
4d0a9bdf
...
...
@@ -12,11 +12,11 @@ class FeedUseCase @Inject constructor(
){
fun
getFeeds
()
=
contract
.
fetchFeeds
()
fun
getArticles
(
feed
Id
:
Int
)
=
contract
.
fetchFeedObservable
(
feed
Id
)
fun
getArticles
(
feed
Alias
:
String
)
=
contract
.
fetchFeedObservable
(
feed
Alias
)
fun
fetchArticlesPage
(
feed
Id
:
Int
,
pageSize
:
Int
,
startIndex
:
Int
)
=
contract
.
fetchFeedObservable
(
feed
Id
,
pageSize
,
startIndex
)
fun
fetchArticlesPage
(
feed
Alias
:
String
,
pageSize
:
Int
,
startIndex
:
Int
)
=
contract
.
fetchFeedObservable
(
feed
Alias
,
pageSize
,
startIndex
)
fun
getArticle
(
articleId
:
Int
)
=
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feed_list/ScreenController.kt
View file @
4d0a9bdf
...
...
@@ -21,7 +21,7 @@ import javax.inject.Inject
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
private
const
val
FEED_ID
=
"DIRECT_FEED_ID_KEY"
const
val
FEED_ALIAS
=
"DIRECT_FEED_ID_KEY"
class
ArticlesScreenController
:
BigantoBaseController
<
ArticlesScreenViewState
...
...
@@ -32,7 +32,7 @@ class ArticlesScreenController :
constructor
()
constructor
(
feed
Id
:
Int
):
super
(
bundleOf
(
FEED_ID
to
feedId
))
constructor
(
feed
Alias
:
String
):
super
(
bundleOf
(
FEED_ALIAS
to
feedAlias
))
override
fun
injectDependencies
()
{
getComponent
()
...
...
@@ -102,7 +102,7 @@ class ArticlesScreenController :
}
private
fun
getComponent
()
=
DaggerArticlesScreenComponent
.
factory
()
.
create
(
args
.
get
Int
(
FEED_ID
)
.
create
(
args
.
get
String
(
FEED_ALIAS
)
!!
,
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
)
.
inject
(
this
)
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feed_list/ScreenDI.kt
View file @
4d0a9bdf
...
...
@@ -20,7 +20,7 @@ interface ArticlesScreenComponent {
@Component
.
Factory
interface
Factory
{
fun
create
(
@BindsInstance
@Named
(
"FEED_ID_INT"
)
feed
:
Int
@BindsInstance
@Named
(
FEED_ALIAS
)
feed
:
String
,
appComponent
:
AppComponent
,
@BindsInstance
activity
:
RoomParkMainActivity
):
ArticlesScreenComponent
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feed_list/ScreenPresenter.kt
View file @
4d0a9bdf
...
...
@@ -15,7 +15,7 @@ import javax.inject.Named
class
ArticlesScreenPresenter
@Inject
constructor
(
@Named
(
"FEED_ID_INT"
)
private
val
feedId
:
Int
,
@Named
(
FEED_ALIAS
)
private
val
feedId
:
String
,
private
val
interactor
:
ArticlesInteractor
)
:
BigantoBasePresenter
<
ArticlesScreen
,
ArticlesScreenViewState
>()
{
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feeds/ScreenContract.kt
View file @
4d0a9bdf
...
...
@@ -12,7 +12,7 @@ import io.reactivex.Observable
*/
interface
FeedsScreen
:
BigantoBaseContract
<
FeedsScreenViewState
>
{
fun
feedsTabSelected
():
Observable
<
Int
>
fun
feedsTabSelected
():
Observable
<
String
>
fun
requsetsNewArticles
():
Observable
<
Pair
<
FeedModel
,
Int
>>
fun
onAllFeedArticles
():
Observable
<
FeedModel
>
fun
onCameraSelected
():
Observable
<
WebCamModel
>
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feeds/ScreenController.kt
View file @
4d0a9bdf
...
...
@@ -60,11 +60,11 @@ class FeedsScreenController :
.
debounce
(
120L
,
TimeUnit
.
MILLISECONDS
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
override
fun
feedsTabSelected
():
Observable
<
Int
>
override
fun
feedsTabSelected
():
Observable
<
String
>
=
feedsTabs
.
selections
()
.
debounce
(
200L
,
TimeUnit
.
MILLISECONDS
)
.
map
{
it
.
position
}
.
map
{
storedFeedsList
[
it
].
feedId
}
.
map
{
storedFeedsList
[
it
].
alias
}
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
doOnNext
{
allFeedArticles
.
text
=
"ВСЕ ${allFeedName(it)} →"
}
...
...
@@ -170,7 +170,7 @@ class FeedsScreenController :
private
fun
render
(
viewState
:
FeedsScreenViewState
.
ToArticlesScreen
)
{
router
.
pushController
(
RouterTransaction
.
with
(
ArticlesScreenController
(
viewState
.
feed
Id
))
RouterTransaction
.
with
(
ArticlesScreenController
(
viewState
.
feed
Alias
))
.
popChangeHandler
(
FadeChangeHandler
())
.
pushChangeHandler
(
FadeChangeHandler
())
)
...
...
@@ -201,7 +201,7 @@ class FeedsScreenController :
private
fun
render
(
viewState
:
FeedsScreenViewState
.
SomeError
)
=
showError
(
viewState
.
exception
)
private
fun
allFeedName
(
feed
Id
:
Int
)
=
if
(
feedId
==
1
)
"НОВОСТИ"
else
"БЛОГИ"
private
fun
allFeedName
(
feed
Alias
:
String
)
=
if
(
feedAlias
==
"news"
)
"НОВОСТИ"
else
"БЛОГИ"
private
fun
render
(
viewState
:
FeedsScreenViewState
.
FeedsPages
){
feedsTabs
.
removeAllTabs
()
...
...
@@ -209,7 +209,7 @@ class FeedsScreenController :
viewState
.
items
.
forEach
{
feed
->
val
tab
=
feedsTabs
.
newTab
()
.
setCustomView
(
R
.
layout
.
feeds_tab_view
)
.
setTag
(
feed
.
feedId
)
.
setTag
(
feed
.
alias
)
tab
.
customView
?.
let
{
it
.
findViewById
<
TextView
>(
R
.
id
.
tab_title
)
?.
text
=
feed
.
title
...
...
@@ -250,7 +250,7 @@ class FeedsScreenController :
viewState
.
restore
.
feeds
.
forEach
{
feed
->
val
tab
=
feedsTabs
.
newTab
()
.
setCustomView
(
R
.
layout
.
feeds_tab_view
)
.
setTag
(
feed
.
feedId
)
.
setTag
(
feed
.
alias
)
tab
.
customView
?.
let
{
it
.
findViewById
<
TextView
>(
R
.
id
.
tab_title
)
?.
text
=
feed
.
title
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feeds/ScreenPresenter.kt
View file @
4d0a9bdf
...
...
@@ -70,7 +70,7 @@ class FeedsScreenPresenter @Inject constructor(
val
switchToAllArtiles
=
intent
(
FeedsScreen
::
onAllFeedArticles
)
.
map
<
FeedsScreenViewState
>
{
FeedsScreenViewState
.
ToArticlesScreen
(
it
.
feedId
)
FeedsScreenViewState
.
ToArticlesScreen
(
it
.
alias
)
}
.
onErrorReturn
(
::
parseError
)
...
...
@@ -91,7 +91,7 @@ class FeedsScreenPresenter @Inject constructor(
val
getNewArticlesPage
=
intent
(
FeedsScreen
::
requsetsNewArticles
)
.
flatMap
{
interactor
.
fetchArticles
(
it
.
first
.
feedId
,
FEED_PREVIEW_PAGE_SIZE
,
it
.
second
)
}
.
flatMap
{
interactor
.
fetchArticles
(
it
.
first
.
alias
,
FEED_PREVIEW_PAGE_SIZE
,
it
.
second
)
}
.
map
<
FeedsScreenViewState
>
{
restoreModel
.
articles
=
it
.
articles
Timber
.
d
(
"arrived list: ${it.articles.size}"
)
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feeds/ScreenViewState.kt
View file @
4d0a9bdf
...
...
@@ -25,7 +25,7 @@ sealed class FeedsScreenViewState : BigantoBaseViewState() {
class
SomeError
(
val
exception
:
ExceptionString
)
:
FeedsScreenViewState
()
class
ToArticlesScreen
(
val
feed
Id
:
Int
)
:
FeedsScreenViewState
()
class
ToArticlesScreen
(
val
feed
Alias
:
String
)
:
FeedsScreenViewState
()
class
ToArticle
(
val
articleId
:
Int
)
:
FeedsScreenViewState
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment