diff --git a/TMessagesProj/src/main/java/org/telegram/group/GroupViewModel.java b/TMessagesProj/src/main/java/org/telegram/group/GroupViewModel.java index 4f58a0d..9291f1a 100644 --- a/TMessagesProj/src/main/java/org/telegram/group/GroupViewModel.java +++ b/TMessagesProj/src/main/java/org/telegram/group/GroupViewModel.java @@ -5,6 +5,9 @@ import android.support.annotation.NonNull; import android.text.TextUtils; +import com.google.gson.reflect.TypeToken; + +import org.reactivestreams.Publisher; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.MessagesController; import org.telegram.messenger.UserConfig; @@ -13,16 +16,22 @@ import org.telegram.network.error.ErrorConsumer; import org.telegram.tgnet.TLRPC; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import io.reactivex.BackpressureStrategy; import io.reactivex.Completable; +import io.reactivex.Flowable; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Action; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; @@ -33,7 +42,17 @@ public class GroupViewModel { private static QueryResponse response = new QueryResponse(); + private static List canches = new ArrayList<>(); + /** + * 创建 + * + * @param groupId group id + * @param title 标题 + * @param a 1:自动,2:自由 + * @param time 3: 时间 + * @return + */ public static Completable create(final String groupId, final String title, final int a, final String time) { return Observable.create(new ObservableOnSubscribe>() { @Override @@ -45,7 +64,10 @@ map.put("gn", title); map.put("uid", user.id + ""); map.put("up", user.phone);//手机号码 - map.put("ed", time);//时间 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date date = dateFormat.parse(time); + date.setTime(date.getTime() + 24L * 60L * 60L * 1000L); + map.put("ed", dateFormat.format(date));//时间 map.put("dt", a == 1 ? "1" : "2");//1:自动解散,2:自由退出 observableEmitter.onNext(map); observableEmitter.onComplete(); @@ -213,12 +235,82 @@ SharedPreferences.Editor editor = ApplicationLoader.applicationContext .getSharedPreferences("group_from_cctv", Activity.MODE_PRIVATE).edit(); editor.putString("info", GsonUtils.modeToJsonStr(o)).apply(); + //更新完毕要检查一次 + checkCanche(); return ""; } }).ignoreElements().observeOn(AndroidSchedulers.mainThread()); } /** + * 检查缓存,如果没成功则一直上传 + */ + public static void checkCanche() { + if (canches.size() == 0) return; + Flowable.just("").map(new Function() { + @Override + public Object apply(String s) throws Exception { + String cancheStr = ApplicationLoader.applicationContext + .getSharedPreferences("group_from_cctv", Activity.MODE_PRIVATE).getString("canche", ""); + canches = GsonUtils.getsGson().fromJson(cancheStr, new TypeToken>() { + }.getType()); + List listBeans = response.getAttributes().getList(); + for (int i = 0; i < listBeans.size(); i++) { + for (int j = 0; j < canches.size(); j++) { + if (listBeans.get(i).getGroupId().equals(canches.get(j).getGroupId())) { + canches.remove(j); + break; + } + } + } + //更新要缓存 + SharedPreferences.Editor editor = ApplicationLoader.applicationContext + .getSharedPreferences("group_from_cctv", Activity.MODE_PRIVATE).edit(); + editor.putString("canche", GsonUtils.modeToJsonStr(canches)).apply(); + + return ""; + } + }).subscribeOn(Schedulers.io()).flatMap(new Function>() { + @Override + public Publisher apply(Object o) throws Exception { + List copyList = new ArrayList<>(); + copyList.addAll(canches); + return Flowable.fromIterable(copyList); + } + }).concatMapDelayError(new Function>() { + @Override + public Publisher apply(LocalCanche localCanche) throws Exception { + return create(localCanche.getGroupId(), localCanche.getTitle(), localCanche.getType(), localCanche.getTime()) + .andThen(Observable.just(localCanche)).toFlowable(BackpressureStrategy.BUFFER); + } + }).subscribe(new Consumer() { + @Override + public void accept(LocalCanche s) throws Exception { + for (int i = 0; i < canches.size(); i++) { + if (canches.get(i).getGroupId().equals(s.getGroupId())) { + canches.remove(i); + //更新要缓存 + SharedPreferences.Editor editor = ApplicationLoader.applicationContext + .getSharedPreferences("group_from_cctv", Activity.MODE_PRIVATE).edit(); + editor.putString("canche", GsonUtils.modeToJsonStr(canches)).apply(); + } + } + } + }, new ErrorConsumer() { + @Override + public void error(Throwable throwable, @NonNull String message) { + throwable.printStackTrace(); + checkCanche(); + } + }, new Action() { + @Override + public void run() throws Exception { + checkCanche(); + } + }); + } + + /** * 检查一个群组是否能退出
* 1.自动解散,需要等到时间到了才能退出
* 2.自由退出,需要等到时间到了才能退出