Skip to content

Commit 30dad0e

Browse files
committed
Skip invalid post objects instead of failing the entire request
fixes #1048
1 parent 976de42 commit 30dad0e

10 files changed

Lines changed: 23 additions & 16 deletions

File tree

mastodon/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ android {
1313
applicationId "org.joinmastodon.android"
1414
minSdk 23
1515
targetSdk 35
16-
versionCode 153
17-
versionName "2.12.0"
16+
versionCode 154
17+
versionName "2.11.5"
1818
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1919
}
2020

mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -177,29 +177,29 @@ public void validateAndPostprocessResponse(T respObj, Response httpResponse) thr
177177
throw new ObjectValidationException("Server response is empty");
178178
}else if(respObj instanceof BaseModel){
179179
((BaseModel) respObj).postprocess();
180-
}else if(respObj instanceof List){
180+
}else if(respObj instanceof List<?> respList){
181181
if(removeUnsupportedItems){
182-
Iterator<?> itr=((List<?>) respObj).iterator();
182+
Iterator<?> itr=respList.iterator();
183183
while(itr.hasNext()){
184184
Object item=itr.next();
185-
if(item instanceof BaseModel){
185+
if(item instanceof BaseModel bm){
186186
try{
187-
((BaseModel) item).postprocess();
187+
bm.postprocess();
188188
}catch(ObjectValidationException x){
189189
Log.w(TAG, "Removing invalid object from list", x);
190190
itr.remove();
191191
}
192-
}
193-
}
194-
for(Object item:((List<?>) respObj)){
195-
if(item instanceof BaseModel){
196-
((BaseModel) item).postprocess();
192+
}else if(item==null){
193+
Log.w(TAG, "Removing null object from list");
194+
itr.remove();
197195
}
198196
}
199197
}else{
200-
for(Object item:((List<?>) respObj)){
201-
if(item instanceof BaseModel)
202-
((BaseModel) item).postprocess();
198+
for(Object item:respList){
199+
if(item instanceof BaseModel bm)
200+
bm.postprocess();
201+
else if(item==null)
202+
throw new ObjectValidationException("null item in list");
203203
}
204204
}
205205
}

mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public GetAccountStatuses(String id, String maxID, String minID, int limit, @Non
3333
}
3434
if(!TextUtils.isEmpty(hashtag))
3535
addQueryParameter("tagged", hashtag);
36+
removeUnsupportedItems=true;
3637
}
3738

3839
public enum Filter{

mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/GetStatusEditHistory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
public class GetStatusEditHistory extends MastodonAPIRequest<List<Status>>{
1616
public GetStatusEditHistory(String id){
1717
super(HttpMethod.GET, "/statuses/"+id+"/history", new TypeToken<>(){});
18+
removeUnsupportedItems=true;
1819
}
1920

2021
@Override

mastodon/src/main/java/org/joinmastodon/android/api/requests/timelines/GetHashtagTimeline.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ public GetHashtagTimeline(String hashtag, String maxID, String minID, int limit)
1616
addQueryParameter("min_id", minID);
1717
if(limit>0)
1818
addQueryParameter("limit", ""+limit);
19+
removeUnsupportedItems=true;
1920
}
2021
}

mastodon/src/main/java/org/joinmastodon/android/api/requests/timelines/GetHomeTimeline.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ public GetHomeTimeline(String maxID, String minID, int limit, String sinceID){
1818
addQueryParameter("since_id", sinceID);
1919
if(limit>0)
2020
addQueryParameter("limit", ""+limit);
21+
removeUnsupportedItems=true;
2122
}
2223
}

mastodon/src/main/java/org/joinmastodon/android/api/requests/timelines/GetListTimeline.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ public GetListTimeline(String listID, String maxID, String minID, int limit, Str
1818
addQueryParameter("limit", ""+limit);
1919
if(sinceID!=null)
2020
addQueryParameter("since_id", sinceID);
21+
removeUnsupportedItems=true;
2122
}
2223
}

mastodon/src/main/java/org/joinmastodon/android/api/requests/timelines/GetPublicTimeline.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ public GetPublicTimeline(boolean local, boolean remote, String maxID, String min
2424
addQueryParameter("since_id", sinceID);
2525
if(limit>0)
2626
addQueryParameter("limit", limit+"");
27+
removeUnsupportedItems=true;
2728
}
2829
}

mastodon/src/main/java/org/joinmastodon/android/api/requests/trends/GetTrendingStatuses.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ public GetTrendingStatuses(int offset, int limit){
1414
addQueryParameter("limit", ""+limit);
1515
if(offset>0)
1616
addQueryParameter("offset", ""+offset);
17+
removeUnsupportedItems=true;
1718
}
1819
}

mastodon/src/main/java/org/joinmastodon/android/model/Quote.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
import com.google.gson.annotations.SerializedName;
44

55
import org.joinmastodon.android.api.ObjectValidationException;
6-
import org.joinmastodon.android.api.RequiredField;
76
import org.parceler.Parcel;
87

98
@Parcel
109
public class Quote extends BaseModel{
11-
@RequiredField
1210
public State state=State.UNAUTHORIZED;
1311
public Status quotedStatus;
1412
public String quotedStatusId;
1513

1614
@Override
1715
public void postprocess() throws ObjectValidationException{
16+
if(state==null)
17+
state=State.UNAUTHORIZED;
1818
super.postprocess();
1919
if(quotedStatus!=null)
2020
quotedStatus.postprocess();

0 commit comments

Comments
 (0)