@@ -134,21 +134,36 @@ public void handleError(GeneralError generalError) {
134134        if  (Check .isEmpty (response )) return ;
135135        Observable .just (response )
136136                .compose (rx (null ))
137-                 .map (s  -> APIService .fruit ().fromHtml (s , AppendTopicPageInfo .class ))
138-                 .subscribe (new  GeneralConsumer <AppendTopicPageInfo >() {
137+                 .map (s  -> {
138+                     // First, check if this is actually a successful append 
139+                     // (V2EX may return the topic page on success, which triggers error handler due to redirects) 
140+                     BaseInfo  resultInfo  = APIService .fruit ().fromHtml (s , TopicInfo .class );
141+                     if  (resultInfo .isValid ()) {
142+                         return  resultInfo ;
143+                     }
144+                     // If not a valid topic, try parsing as error page 
145+                     return  APIService .fruit ().fromHtml (s , AppendTopicPageInfo .class );
146+                 })
147+                 .subscribe (new  GeneralConsumer <BaseInfo >() {
139148                    @ Override 
140-                     public  void  onConsume (AppendTopicPageInfo  pageInfo ) {
141-                         AppendTopicPageInfo .Problem  problem  = pageInfo .getProblem ();
142-                         if  (problem  != null ) {
143-                             StringBuilder  msg  = new  StringBuilder ();
144-                             for  (int  i  = 0 ; i  < problem .getTips ().size (); i ++) {
145-                                 msg .append (i  + 1 ).append (". " ).append (problem .getTips ().get (i )).append ("\n " );
149+                     public  void  onConsume (BaseInfo  baseInfo ) {
150+                         if  (baseInfo  instanceof  TopicInfo ) {
151+                             // Actually a success! Treat it as such 
152+                             onAfterAppendTopic ((TopicInfo ) baseInfo );
153+                         } else  if  (baseInfo  instanceof  AppendTopicPageInfo ) {
154+                             AppendTopicPageInfo  pageInfo  = (AppendTopicPageInfo ) baseInfo ;
155+                             AppendTopicPageInfo .Problem  problem  = pageInfo .getProblem ();
156+                             if  (problem  != null ) {
157+                                 StringBuilder  msg  = new  StringBuilder ();
158+                                 for  (int  i  = 0 ; i  < problem .getTips ().size (); i ++) {
159+                                     msg .append (i  + 1 ).append (". " ).append (problem .getTips ().get (i )).append ("\n " );
160+                                 }
161+                                 new  ConfirmDialog .Builder (getActivity ())
162+                                         .title (problem .getTitle ())
163+                                         .msg (msg .toString ())
164+                                         .positiveText (R .string .ok )
165+                                         .build ().show ();
146166                            }
147-                             new  ConfirmDialog .Builder (getActivity ())
148-                                     .title (problem .getTitle ())
149-                                     .msg (msg .toString ())
150-                                     .positiveText (R .string .ok )
151-                                     .build ().show ();
152167                        }
153168                    }
154169                });
0 commit comments