update guild listing

This commit is contained in:
Phillip Thelen 2017-05-05 19:36:25 +02:00
parent 2eacc25cec
commit df393fd42d
7 changed files with 52 additions and 36 deletions

View file

@ -35,7 +35,7 @@ public interface SocialRepository extends BaseRepository {
Observable<Group> joinGroup(String id);
Observable<Void> updateGroup(Group group);
Observable<Void> updateGroup(Group group, String name, String description, String leader, String privacy);
Observable<List<Group>> retrieveGroups(String type);
Observable<RealmResults<Group>> getGroups(String type);
@ -54,4 +54,6 @@ public interface SocialRepository extends BaseRepository {
Observable<User> getMember(String userId);
Observable<Void> markPrivateMessagesRead(User user);
Observable<RealmResults<Group>> getUserGroups();
}

View file

@ -97,14 +97,27 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
}
@Override
public Observable<Void> updateGroup(Group group) {
public Observable<Void> updateGroup(Group group, String name, String description, String leader, String privacy) {
Group copiedGroup = localRepository.getUnmanagedCopy(group);
copiedGroup.name = name;
copiedGroup.description = description;
copiedGroup.leaderID = leader;
copiedGroup.privacy = privacy;
localRepository.saveGroup(copiedGroup);
return apiClient.updateGroup(group.id, group);
}
@Override
public Observable<List<Group>> retrieveGroups(String type) {
return apiClient.listGroups(type)
.doOnNext(localRepository::saveGroups);
.doOnNext(groups -> {
if ("guilds".equals(type)) {
for (Group guild : groups) {
guild.isMember = true;
}
}
localRepository.saveGroups(groups);
});
}
@Override
@ -155,4 +168,9 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
return apiClient.markPrivateMessagesRead()
.doOnNext(aVoid -> localRepository.executeTransaction(realm -> user.getInbox().setNewMessages(0)));
}
@Override
public Observable<RealmResults<Group>> getUserGroups() {
return localRepository.getUserGroups();
}
}

View file

@ -18,4 +18,6 @@ public interface SocialLocalRepository extends BaseLocalRepository {
void saveGroup(Group group);
void saveGroups(List<Group> groups);
Observable<RealmResults<Group>> getUserGroups();
}

View file

@ -49,11 +49,25 @@ public class RealmSocialLocalRepository extends RealmBaseLocalRepository impleme
@Override
public void saveGroup(Group group) {
realm.executeTransactionAsync(realm1 -> realm1.insertOrUpdate(group));
Group existingGroup = realm.where(Group.class).equalTo("id", group.id).findFirst();
boolean isMember = existingGroup.isValid()&& existingGroup.isMember;
realm.executeTransactionAsync(realm1 -> {
group.isMember = isMember;
realm1.insertOrUpdate(group);
});
}
@Override
public void saveGroups(List<Group> groups) {
realm.executeTransactionAsync(realm1 -> realm1.insertOrUpdate(groups));
}
@Override
public Observable<RealmResults<Group>> getUserGroups() {
return realm.where(Group.class)
.equalTo("type", "guild")
.equalTo("isMember", true)
.findAllSorted("memberCount", Sort.DESCENDING)
.asObservable()
.filter(RealmResults::isLoaded); }
}

View file

@ -219,31 +219,13 @@ public class GuildFragment extends BaseMainFragment implements Action1<Group> {
switch (requestCode) {
case (GroupFormActivity.GROUP_FORM_ACTIVITY): {
if (resultCode == Activity.RESULT_OK) {
boolean needsSaving = false;
Bundle bundle = data.getExtras();
if (this.guild.name != null && !this.guild.name.equals(bundle.getString("name"))) {
this.guild.name = bundle.getString("name");
needsSaving = true;
}
if (this.guild.description != null && !this.guild.description.equals(bundle.getString("description"))) {
this.guild.description = bundle.getString("description");
needsSaving = true;
}
if (this.guild.leaderID != null && !this.guild.leaderID.equals(bundle.getString("leader"))) {
this.guild.leaderID = bundle.getString("leader");
needsSaving = true;
}
if (this.guild.privacy != null && !this.guild.privacy.equals(bundle.getString("privacy"))) {
this.guild.privacy = bundle.getString("privacy");
needsSaving = true;
}
if (needsSaving) {
this.socialRepository.updateGroup(this.guild)
.subscribe(aVoid -> {
}, throwable -> {
});
this.guildInformationFragment.setGroup(guild);
}
this.socialRepository.updateGroup(this.guild,
bundle.getString("name"),
bundle.getString("description"),
bundle.getString("leader"),
bundle.getString("privacy"))
.subscribe(aVoid -> {}, throwable -> {});
}
break;
}

View file

@ -14,6 +14,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ChallengeRepository;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -24,6 +25,7 @@ import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.realm.RealmResults;
public class GuildsOverviewFragment extends BaseMainFragment implements View.OnClickListener, SwipeRefreshLayout.OnRefreshListener {
@ -56,9 +58,7 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
unbinder = ButterKnife.bind(this, v);
swipeRefreshLayout.setOnRefreshListener(this);
this.publicGuildsButton.setOnClickListener(this);
if (this.guilds != null) {
this.setGuildsOnListView();
}
compositeSubscription.add(socialRepository.getUserGroups().subscribe(this::setGuilds, RxErrorHandler.handleEmptyError()));
return v;
}
@ -77,7 +77,6 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(true);
fetchGuilds();
}
@ -85,8 +84,6 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
if (this.socialRepository != null) {
this.socialRepository.retrieveGroups("guilds")
.subscribe(groups -> {
GuildsOverviewFragment.this.guilds = groups;
GuildsOverviewFragment.this.setGuildsOnListView();
if (swipeRefreshLayout != null) {
swipeRefreshLayout.setRefreshing(false);
}
@ -94,7 +91,8 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
}
}
private void setGuildsOnListView() {
private void setGuilds(RealmResults<Group> guilds) {
this.guilds = guilds;
if (this.guildsListView == null) {
return;
}

View file

@ -220,7 +220,7 @@ public class PartyFragment extends BaseMainFragment {
needsSaving = true;
}
if (needsSaving) {
this.socialRepository.updateGroup(this.group)
this.socialRepository.updateGroup(this.group, bundle.getString("name"), bundle.getString("description"), bundle.getString("leader"), bundle.getString("privacy"))
.subscribe(aVoid -> {
}, throwable -> {
});