Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
AloqaIM-Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
Administrator
AloqaIM-Android
Commits
0af8de4c
Commit
0af8de4c
authored
Aug 30, 2017
by
Filipe de Lima Brito
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update SidebarMainPresenter.java
parent
da668d26
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
165 additions
and
147 deletions
+165
-147
SidebarMainPresenter.java
...rocket/android/fragment/sidebar/SidebarMainPresenter.java
+165
-147
No files found.
app/src/main/java/chat/rocket/android/fragment/sidebar/SidebarMainPresenter.java
View file @
0af8de4c
...
...
@@ -3,12 +3,10 @@ package chat.rocket.android.fragment.sidebar;
import
android.support.annotation.NonNull
;
import
android.support.v4.util.Pair
;
import
chat.rocket.core.models.Spotlight
;
import
chat.rocket.persistence.realm.repositories.RealmSpotlightRepository
;
import
com.hadisatrio.optional.Optional
;
import
io.reactivex.Flowable
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.disposables.Disposable
;
import
java.util.ArrayList
;
import
java.util.List
;
import
chat.rocket.android.BackgroundLooper
;
import
chat.rocket.android.RocketChatCache
;
...
...
@@ -20,155 +18,175 @@ import chat.rocket.android.helper.TextUtils;
import
chat.rocket.android.shared.BasePresenter
;
import
chat.rocket.core.interactors.RoomInteractor
;
import
chat.rocket.core.models.Room
;
import
chat.rocket.core.models.RoomSidebar
;
import
chat.rocket.core.models.Spotlight
;
import
chat.rocket.core.models.User
;
import
chat.rocket.core.repositories.UserRepository
;
import
java.util.List
;
import
chat.rocket.persistence.realm.repositories.RealmSpotlightRepository
;
import
io.reactivex.Flowable
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.disposables.Disposable
;
public
class
SidebarMainPresenter
extends
BasePresenter
<
SidebarMainContract
.
View
>
implements
SidebarMainContract
.
Presenter
{
private
final
String
hostname
;
private
String
userId
;
private
final
RoomInteractor
roomInteractor
;
private
final
UserRepository
userRepository
;
private
final
RocketChatCache
rocketChatCache
;
private
final
AbsoluteUrlHelper
absoluteUrlHelper
;
private
final
MethodCallHelper
methodCallHelper
;
private
RealmSpotlightRepository
realmSpotlightRepository
;
public
SidebarMainPresenter
(
String
hostname
,
RoomInteractor
roomInteractor
,
UserRepository
userRepository
,
RocketChatCache
rocketChatCache
,
AbsoluteUrlHelper
absoluteUrlHelper
,
MethodCallHelper
methodCallHelper
,
RealmSpotlightRepository
realmSpotlightRepository
)
{
this
.
hostname
=
hostname
;
this
.
roomInteractor
=
roomInteractor
;
this
.
userRepository
=
userRepository
;
this
.
rocketChatCache
=
rocketChatCache
;
this
.
absoluteUrlHelper
=
absoluteUrlHelper
;
this
.
methodCallHelper
=
methodCallHelper
;
this
.
realmSpotlightRepository
=
realmSpotlightRepository
;
}
@Override
public
void
bindView
(
@NonNull
SidebarMainContract
.
View
view
)
{
super
.
bindView
(
view
);
if
(
TextUtils
.
isEmpty
(
hostname
))
{
view
.
showEmptyScreen
();
return
;
private
final
String
hostname
;
private
final
RoomInteractor
roomInteractor
;
private
final
UserRepository
userRepository
;
private
final
RocketChatCache
rocketChatCache
;
private
final
AbsoluteUrlHelper
absoluteUrlHelper
;
private
final
MethodCallHelper
methodCallHelper
;
private
RealmSpotlightRepository
realmSpotlightRepository
;
private
RoomSidebar
roomSidebar
;
public
SidebarMainPresenter
(
String
hostname
,
RoomInteractor
roomInteractor
,
UserRepository
userRepository
,
RocketChatCache
rocketChatCache
,
AbsoluteUrlHelper
absoluteUrlHelper
,
MethodCallHelper
methodCallHelper
,
RealmSpotlightRepository
realmSpotlightRepository
)
{
this
.
hostname
=
hostname
;
this
.
roomInteractor
=
roomInteractor
;
this
.
userRepository
=
userRepository
;
this
.
rocketChatCache
=
rocketChatCache
;
this
.
absoluteUrlHelper
=
absoluteUrlHelper
;
this
.
methodCallHelper
=
methodCallHelper
;
this
.
realmSpotlightRepository
=
realmSpotlightRepository
;
}
view
.
showScreen
();
subscribeToRooms
();
final
Disposable
subscription
=
Flowable
.
combineLatest
(
userRepository
.
getCurrent
().
distinctUntilChanged
(),
absoluteUrlHelper
.
getRocketChatAbsoluteUrl
().
toFlowable
(),
Pair:
:
new
)
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
pair
->
{
userId
=
pair
.
first
.
orNull
().
getId
();
view
.
show
(
pair
.
first
.
orNull
());
},
Logger:
:
report
);
addSubscription
(
subscription
);
}
@Override
public
void
onRoomSelected
(
Room
room
)
{
rocketChatCache
.
setSelectedRoomId
(
room
.
getRoomId
());
}
@Override
public
Flowable
<
List
<
Spotlight
>>
searchSpotlight
(
String
term
)
{
methodCallHelper
.
searchSpotlight
(
term
);
return
realmSpotlightRepository
.
getSuggestionsFor
(
term
,
10
);
}
@Override
public
void
onSpotlightSelected
(
Spotlight
spotlight
)
{
if
(
spotlight
.
getType
().
equals
(
Room
.
TYPE_DIRECT_MESSAGE
))
{
String
username
=
spotlight
.
getName
();
methodCallHelper
.
createDirectMessage
(
username
)
.
continueWithTask
(
task
->
{
if
(
task
.
isCompleted
())
{
rocketChatCache
.
setSelectedRoomId
(
task
.
getResult
());
}
return
null
;
});
}
else
{
methodCallHelper
.
joinRoom
(
spotlight
.
getId
())
.
continueWithTask
(
task
->
{
if
(
task
.
isCompleted
())
{
rocketChatCache
.
setSelectedRoomId
(
spotlight
.
getId
());
@Override
public
void
bindView
(
@NonNull
SidebarMainContract
.
View
view
)
{
super
.
bindView
(
view
);
if
(
TextUtils
.
isEmpty
(
hostname
))
{
view
.
showEmptyScreen
();
return
;
}
view
.
showScreen
();
subscribeToRooms
();
final
Disposable
subscription
=
Flowable
.
combineLatest
(
userRepository
.
getCurrent
().
distinctUntilChanged
(),
absoluteUrlHelper
.
getRocketChatAbsoluteUrl
().
toFlowable
(),
Pair:
:
new
)
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
pair
->
view
.
show
(
pair
.
first
.
orNull
()),
Logger:
:
report
);
addSubscription
(
subscription
);
}
@Override
public
void
onRoomSelected
(
RoomSidebar
roomSidebar
)
{
rocketChatCache
.
setSelectedRoomId
(
roomSidebar
.
getRoomId
());
}
@Override
public
Flowable
<
List
<
Spotlight
>>
searchSpotlight
(
String
term
)
{
methodCallHelper
.
searchSpotlight
(
term
);
return
realmSpotlightRepository
.
getSuggestionsFor
(
term
,
10
);
}
@Override
public
void
onSpotlightSelected
(
Spotlight
spotlight
)
{
if
(
spotlight
.
getType
().
equals
(
Room
.
TYPE_DIRECT_MESSAGE
))
{
String
username
=
spotlight
.
getName
();
methodCallHelper
.
createDirectMessage
(
username
)
.
continueWithTask
(
task
->
{
if
(
task
.
isCompleted
())
{
rocketChatCache
.
setSelectedRoomId
(
task
.
getResult
());
}
return
null
;
});
}
else
{
methodCallHelper
.
joinRoom
(
spotlight
.
getId
())
.
continueWithTask
(
task
->
{
if
(
task
.
isCompleted
())
{
rocketChatCache
.
setSelectedRoomId
(
spotlight
.
getId
());
}
return
null
;
});
}
}
@Override
public
void
onUserOnline
()
{
updateCurrentUserStatus
(
User
.
STATUS_ONLINE
);
}
@Override
public
void
onUserAway
()
{
updateCurrentUserStatus
(
User
.
STATUS_AWAY
);
}
@Override
public
void
onUserBusy
()
{
updateCurrentUserStatus
(
User
.
STATUS_BUSY
);
}
@Override
public
void
onUserOffline
()
{
updateCurrentUserStatus
(
User
.
STATUS_OFFLINE
);
}
@Override
public
void
onLogout
()
{
methodCallHelper
.
logout
().
continueWith
(
new
LogIfError
());
}
private
void
subscribeToRooms
()
{
final
Disposable
subscription
=
roomInteractor
.
getOpenRooms
()
.
distinctUntilChanged
()
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
this
::
processRooms
,
Logger:
:
report
);
addSubscription
(
subscription
);
}
private
void
processRooms
(
List
<
Room
>
roomList
)
{
ArrayList
<
RoomSidebar
>
roomSidebarList
=
new
ArrayList
<>();
for
(
Room
room
:
roomList
)
{
String
roomName
=
room
.
getName
();
String
roomType
=
room
.
getType
();
roomSidebar
=
new
RoomSidebar
();
roomSidebar
.
setId
(
room
.
getId
());
roomSidebar
.
setRoomId
(
room
.
getRoomId
());
roomSidebar
.
setRoomName
(
roomName
);
roomSidebar
.
setType
(
roomType
);
roomSidebar
.
setAlert
(
room
.
isAlert
());
roomSidebar
.
setFavorite
(
room
.
isFavorite
());
roomSidebar
.
setUnread
(
room
.
getUnread
());
roomSidebar
.
setUpdateAt
(
room
.
getUpdatedAt
());
roomSidebar
.
setLastSeen
(
room
.
getLastSeen
());
if
(
roomType
.
equals
(
Room
.
TYPE_DIRECT_MESSAGE
))
{
getUserStatus
(
roomName
);
}
return
null
;
});
roomSidebarList
.
add
(
roomSidebar
);
}
view
.
showRoomSidebarList
(
roomSidebarList
);
}
}
@Override
public
void
onUserOnline
()
{
updateCurrentUserStatus
(
User
.
STATUS_ONLINE
);
}
@Override
public
void
onUserAway
()
{
updateCurrentUserStatus
(
User
.
STATUS_AWAY
);
}
@Override
public
void
onUserBusy
()
{
updateCurrentUserStatus
(
User
.
STATUS_BUSY
);
}
@Override
public
void
onUserOffline
()
{
updateCurrentUserStatus
(
User
.
STATUS_OFFLINE
);
}
@Override
public
void
onLogout
()
{
methodCallHelper
.
logout
().
continueWith
(
new
LogIfError
());
}
private
void
subscribeToRooms
()
{
final
Disposable
subscription
=
roomInteractor
.
getOpenRooms
()
.
distinctUntilChanged
()
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
this
::
processRooms
,
Logger:
:
report
);
addSubscription
(
subscription
);
}
private
void
processRooms
(
List
<
Room
>
roomList
)
{
view
.
showRoomList
(
roomList
);
for
(
Room
room:
roomList
)
{
if
(
room
.
isDirectMessage
())
{
subscribeToDirectMessages
(
room
.
getName
());
}
private
void
getUserStatus
(
String
username
)
{
final
Disposable
subscription
=
userRepository
.
getByUsername
(
username
)
.
distinctUntilChanged
()
.
filter
(
Optional:
:
isPresent
)
.
map
(
Optional:
:
get
)
.
map
(
User:
:
getStatus
)
.
subscribe
(
this
::
setUserStatus
);
addSubscription
(
subscription
);
}
private
void
setUserStatus
(
String
status
)
{
roomSidebar
.
setUserStatus
(
status
);
}
private
void
updateCurrentUserStatus
(
String
status
)
{
methodCallHelper
.
setUserStatus
(
status
).
continueWith
(
new
LogIfError
());
}
}
private
void
subscribeToDirectMessages
(
String
username
)
{
final
Disposable
disposable
=
userRepository
.
getByUsername
(
username
)
.
distinctUntilChanged
()
.
filter
(
Optional:
:
isPresent
)
.
map
(
Optional:
:
get
)
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
view:
:
showUserStatus
,
Logger:
:
report
);
addSubscription
(
disposable
);
}
private
void
updateCurrentUserStatus
(
String
status
)
{
methodCallHelper
.
setUserStatus
(
status
).
continueWith
(
new
LogIfError
());
}
}
\ No newline at end of file
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