use of org.matrix.androidsdk.rest.model.User in project matrix-android-sdk by matrix-org.
the class RoomsRestClient method inviteUserToRoom.
/**
* Invite a user to a room.
*
* @param roomId the room id
* @param userId the user id
* @param callback the async callback
*/
public void inviteUserToRoom(final String roomId, final String userId, final ApiCallback<Void> callback) {
final String description = "inviteToRoom : roomId " + roomId + " userId " + userId;
User user = new User();
user.user_id = userId;
try {
mApi.invite(roomId, user, new RestAdapterCallback<Void>(description, mUnsentEventsManager, callback, new RestAdapterCallback.RequestRetryCallBack() {
@Override
public void onRetry() {
inviteUserToRoom(roomId, userId, callback);
}
}));
} catch (Throwable t) {
callback.onUnexpectedError(new Exception(t));
}
}
use of org.matrix.androidsdk.rest.model.User in project matrix-android-sdk by matrix-org.
the class MXMemoryStore method setAvatarURL.
@Override
public boolean setAvatarURL(String avatarURL, long ts) {
boolean isUpdated = false;
synchronized (LOG_TAG) {
if (null != mMetadata) {
Log.d(LOG_TAG, "## setAvatarURL() : from " + mMetadata.mUserAvatarUrl + " to " + avatarURL + " ts " + ts);
}
isUpdated = (null != mMetadata) && !TextUtils.equals(mMetadata.mUserAvatarUrl, avatarURL) && (mUserAvatarUrlTs < ts) && (ts != 0) && (ts <= System.currentTimeMillis());
if (isUpdated) {
mMetadata.mUserAvatarUrl = avatarURL;
mUserAvatarUrlTs = ts;
// update the cached oneself User
User myUser = getUser(mMetadata.mUserId);
if (null != myUser) {
myUser.setAvatarUrl(avatarURL);
}
Log.d(LOG_TAG, "## setAvatarURL() : updated");
commit();
}
}
return isUpdated;
}
use of org.matrix.androidsdk.rest.model.User in project matrix-android-sdk by matrix-org.
the class MXDataHandler method handlePresenceEvent.
// ================================================================================
// Sync V2
// ================================================================================
/**
* Handle a presence event.
*
* @param presenceEvent teh presence event.
*/
private void handlePresenceEvent(Event presenceEvent) {
// Presence event
if (Event.EVENT_TYPE_PRESENCE.equals(presenceEvent.getType())) {
User userPresence = JsonUtils.toUser(presenceEvent.getContent());
// use the sender by default
if (!TextUtils.isEmpty(presenceEvent.getSender())) {
userPresence.user_id = presenceEvent.getSender();
}
User user = mStore.getUser(userPresence.user_id);
if (user == null) {
user = userPresence;
user.setDataHandler(this);
} else {
user.currently_active = userPresence.currently_active;
user.presence = userPresence.presence;
user.lastActiveAgo = userPresence.lastActiveAgo;
}
user.setLatestPresenceTs(System.currentTimeMillis());
// check if the current user has been updated
if (mCredentials.userId.equals(user.user_id)) {
// always use the up-to-date information
getMyUser().displayname = user.displayname;
getMyUser().avatar_url = user.getAvatarUrl();
mStore.setAvatarURL(user.getAvatarUrl(), presenceEvent.getOriginServerTs());
mStore.setDisplayName(user.displayname, presenceEvent.getOriginServerTs());
}
mStore.storeUser(user);
this.onPresenceUpdate(presenceEvent, user);
}
}
use of org.matrix.androidsdk.rest.model.User in project matrix-android-sdk by matrix-org.
the class MXMemoryStore method updateUserWithRoomMemberEvent.
/**
* Update the user information from a room member.
*
* @param roomMember the room member.
*/
@Override
public void updateUserWithRoomMemberEvent(RoomMember roomMember) {
try {
if (null != roomMember) {
User user = getUser(roomMember.getUserId());
// if the user does not exist, create it
if (null == user) {
user = new User();
user.user_id = roomMember.getUserId();
user.setRetrievedFromRoomMember();
storeUser(user);
}
// the leave and ban events have no displayname and no avatar url.
if (TextUtils.equals(roomMember.membership, RoomMember.MEMBERSHIP_JOIN)) {
boolean hasUpdates = !TextUtils.equals(user.displayname, roomMember.displayname) || !TextUtils.equals(user.getAvatarUrl(), roomMember.getAvatarUrl());
if (hasUpdates) {
// but if the presence is set to 0, it means that the user information is not initialized
if (user.getLatestPresenceTs() < roomMember.getOriginServerTs()) {
// if the user joined the room, it implies that he used the application
user.displayname = roomMember.displayname;
user.setAvatarUrl(roomMember.getAvatarUrl());
user.setLatestPresenceTs(roomMember.getOriginServerTs());
user.setRetrievedFromRoomMember();
}
}
}
}
} catch (OutOfMemoryError oom) {
dispatchOOM(oom);
Log.e(LOG_TAG, "## updateUserWithRoomMemberEvent() failed " + oom.getMessage());
} catch (Exception e) {
Log.e(LOG_TAG, "## updateUserWithRoomMemberEvent() failed " + e.getMessage());
}
}
use of org.matrix.androidsdk.rest.model.User in project matrix-android-sdk by matrix-org.
the class MXFileStore method saveUsers.
// ================================================================================
// users management
// ================================================================================
/**
* Flush users list
*/
private void saveUsers() {
if (!mAreUsersLoaded) {
// please wait
return;
}
// some updated rooms ?
if ((mUserIdsToCommit.size() > 0) && (null != mFileStoreHandler)) {
// get the list
final HashSet<String> fUserIds = mUserIdsToCommit;
mUserIdsToCommit = new HashSet<>();
try {
final HashSet<User> fUsers;
synchronized (mUsers) {
fUsers = new HashSet<>(mUsers.values());
}
Runnable r = new Runnable() {
@Override
public void run() {
mFileStoreHandler.post(new Runnable() {
public void run() {
if (!isKilled()) {
Log.d(LOG_TAG, "saveUsers " + fUserIds.size() + " users (" + fUsers.size() + " known ones)");
long start = System.currentTimeMillis();
// the users are split into groups to save time
HashMap<Integer, ArrayList<User>> usersGroups = new HashMap<>();
// finds the group for each updated user
for (String userId : fUserIds) {
User user;
synchronized (mUsers) {
user = mUsers.get(userId);
}
if (null != user) {
int hashCode = user.getStorageHashKey();
if (!usersGroups.containsKey(hashCode)) {
usersGroups.put(hashCode, new ArrayList<User>());
}
}
}
// gather the user to the dedicated group if they need to be updated
for (User user : fUsers) {
if (usersGroups.containsKey(user.getStorageHashKey())) {
usersGroups.get(user.getStorageHashKey()).add(user);
}
}
// save the groups
for (int hashKey : usersGroups.keySet()) {
writeObject("saveUser " + hashKey, new File(mStoreUserFolderFile, hashKey + ""), usersGroups.get(hashKey));
}
Log.d(LOG_TAG, "saveUsers done in " + (System.currentTimeMillis() - start) + " ms");
}
}
});
}
};
Thread t = new Thread(r);
t.start();
} catch (OutOfMemoryError oom) {
Log.e(LOG_TAG, "saveUser : cannot clone the users list" + oom.getMessage());
}
}
}
Aggregations