1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-15 11:10:38 +01:00

updated RestFu

improved filter
This commit is contained in:
Mariotaku Lee 2016-01-25 22:11:10 +08:00
parent 2d50404a79
commit d742d2b697
14 changed files with 51 additions and 41 deletions

@ -43,7 +43,7 @@ dependencies {
compile 'com.android.support:support-v4:23.1.1'
compile 'com.bluelinelabs:logansquare:1.3.4'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'com.github.mariotaku.RestFu:library:0.9.11'
compile 'com.github.mariotaku.RestFu:library:0.9.12'
compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.2'
compile 'com.github.mariotaku.SQLiteQB:library:0.9.3'
compile 'com.github.mariotaku.ObjectCursor:core:0.9.3'

@ -34,7 +34,7 @@ import org.mariotaku.twidere.api.twitter.api.PrivateTweetResources;
import org.mariotaku.twidere.api.twitter.api.SavedSearchesResources;
import org.mariotaku.twidere.api.twitter.api.SearchResource;
import org.mariotaku.twidere.api.twitter.api.SpamReportingResources;
import org.mariotaku.twidere.api.twitter.api.TimelinesResources;
import org.mariotaku.twidere.api.twitter.api.TimelineResources;
import org.mariotaku.twidere.api.twitter.api.TrendsResources;
import org.mariotaku.twidere.api.twitter.api.TweetResources;
import org.mariotaku.twidere.api.twitter.api.UsersResources;
@ -43,7 +43,7 @@ import org.mariotaku.twidere.api.twitter.api.UsersResources;
* @author Yusuke Yamamoto - yusuke at mac.com
* @since Twitter4J 2.2.0
*/
public interface Twitter extends SearchResource, TimelinesResources,
public interface Twitter extends SearchResource, TimelineResources,
TweetResources, UsersResources, ListsResources, DirectMessagesResources, FriendsFollowersResources,
FavoritesResources, SpamReportingResources, SavedSearchesResources, TrendsResources, PlacesGeoResources,
HelpResources, PrivateActivityResources, PrivateTweetResources, PrivateTimelinesResources,

@ -37,7 +37,7 @@ import org.mariotaku.twidere.api.twitter.model.Status;
@KeyValue(key = "cards_platform", valueKey = "cards_platform"),
@KeyValue(key = "include_reply_count", valueKey = "include_reply_count"),
@KeyValue(key = "include_descendent_reply_count", valueKey = "include_descendent_reply_count")})
public interface TimelinesResources {
public interface TimelineResources {
@GET("/statuses/home_timeline.json")
ResponseList<Status> getHomeTimeline(@Query Paging paging) throws TwitterException;

@ -87,7 +87,7 @@ public class TwitterConverterFactory extends RestConverter.SimpleFactory<Twitter
}
@Override
public RestConverter<HttpResponse, ?, TwitterException> fromResponse(Type type) {
public RestConverter<HttpResponse, ?, TwitterException> forResponse(Type type) {
RestConverter<HttpResponse, ?, TwitterException> converter = sResponseConverters.get(type);
if (converter != null) {
return converter;
@ -96,12 +96,12 @@ public class TwitterConverterFactory extends RestConverter.SimpleFactory<Twitter
}
@Override
public RestConverter<?, Body, TwitterException> toParam(Type type) {
public RestConverter<?, Body, TwitterException> forRequest(Type type) {
final RestConverter<?, Body, TwitterException> converter = sBodyConverters.get(type);
if (converter != null) {
return converter;
}
return super.toParam(type);
return super.forRequest(type);
}
public static class UnsupportedTypeException extends UnsupportedOperationException {

@ -108,8 +108,8 @@ dependencies {
compile 'com.soundcloud.android:android-crop:1.0.1@aar'
compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.2'
compile 'com.github.mariotaku:PickNCrop:0.9.2'
compile 'com.github.mariotaku.RestFu:library:0.9.11'
compile 'com.github.mariotaku.RestFu:okhttp:0.9.11'
compile 'com.github.mariotaku.RestFu:library:0.9.12'
compile 'com.github.mariotaku.RestFu:okhttp:0.9.12'
compile 'com.github.mariotaku:InetAddressJni:0.9.1'
compile 'com.diogobernardino:williamchart:2.1'
compile 'com.lnikkila:extendedtouchview:0.1.0'

@ -30,10 +30,10 @@ import org.mariotaku.twidere.api.twitter.model.ResponseList;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.DataStoreUtils;
import org.mariotaku.twidere.util.Utils;
import java.util.List;
import static org.mariotaku.twidere.util.Utils.isFiltered;
public class MediaTimelineLoader extends TwitterAPIStatusesLoader {
@ -62,6 +62,8 @@ public class MediaTimelineLoader extends TwitterAPIStatusesLoader {
@Override
protected boolean shouldFilterStatus(final SQLiteDatabase database, final ParcelableStatus status) {
return !mIsMyTimeline && isFiltered(database, -1, status.text_plain, status.text_html, status.source, -1);
final long retweetUserId = status.is_retweet ? status.user_id : -1;
return !mIsMyTimeline && Utils.isFiltered(database, retweetUserId, status.text_plain,
status.text_html, status.source, -1, status.quoted_user_id);
}
}

@ -29,10 +29,10 @@ import org.mariotaku.twidere.api.twitter.model.Paging;
import org.mariotaku.twidere.api.twitter.model.ResponseList;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.Utils;
import java.util.List;
import static org.mariotaku.twidere.util.Utils.isFiltered;
public class RetweetsOfMeLoader extends TwitterAPIStatusesLoader {
@ -50,6 +50,7 @@ public class RetweetsOfMeLoader extends TwitterAPIStatusesLoader {
@Override
protected boolean shouldFilterStatus(final SQLiteDatabase database, final ParcelableStatus status) {
return isFiltered(database, -1, status.text_plain, status.text_html, status.source, -1);
return Utils.isFiltered(database, -1, status.text_plain, status.text_html, status.source,
status.retweeted_by_user_id, status.quoted_user_id);
}
}

@ -29,11 +29,10 @@ import org.mariotaku.twidere.api.twitter.model.Paging;
import org.mariotaku.twidere.api.twitter.model.SearchQuery;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.Utils;
import java.util.List;
import static org.mariotaku.twidere.util.Utils.isFiltered;
public class TweetSearchLoader extends TwitterAPIStatusesLoader {
private final String mQuery;
@ -67,7 +66,7 @@ public class TweetSearchLoader extends TwitterAPIStatusesLoader {
@Override
protected boolean shouldFilterStatus(final SQLiteDatabase database, final ParcelableStatus status) {
return isFiltered(database, status, true);
return Utils.isFiltered(database, status, true);
}
@Override

@ -32,8 +32,7 @@ import org.mariotaku.twidere.api.twitter.model.ResponseList;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import static org.mariotaku.twidere.util.Utils.isFiltered;
import org.mariotaku.twidere.util.Utils;
public class UserListTimelineLoader extends TwitterAPIStatusesLoader {
@ -68,7 +67,7 @@ public class UserListTimelineLoader extends TwitterAPIStatusesLoader {
@Override
protected boolean shouldFilterStatus(final SQLiteDatabase database, final ParcelableStatus status) {
return isFiltered(database, status, true);
return Utils.isFiltered(database, status, true);
}
}

@ -23,19 +23,16 @@ import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.Paging;
import org.mariotaku.twidere.api.twitter.model.ResponseList;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.DataStoreUtils;
import org.mariotaku.twidere.util.Utils;
import static org.mariotaku.twidere.util.Utils.isFiltered;
import java.util.List;
public class UserTimelineLoader extends TwitterAPIStatusesLoader {
@ -66,6 +63,8 @@ public class UserTimelineLoader extends TwitterAPIStatusesLoader {
@Override
protected boolean shouldFilterStatus(final SQLiteDatabase database, final ParcelableStatus status) {
return !mIsMyTimeline && isFiltered(database, -1, status.text_plain, status.text_html, status.source, -1);
final long retweetUserId = status.is_retweet ? status.user_id : -1;
return !mIsMyTimeline && Utils.isFiltered(database, retweetUserId, status.text_plain,
status.text_html, status.source, -1, status.quoted_user_id);
}
}

@ -58,6 +58,7 @@ public abstract class GetStatusesTask extends ManagedAsyncTask<Object, TwitterWr
this.twitterWrapper = twitterWrapper;
}
@NonNull
public abstract ResponseList<org.mariotaku.twidere.api.twitter.model.Status> getStatuses(Twitter twitter, Paging paging)
throws TwitterException;

@ -2029,6 +2029,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
this.twitterWrapper = asyncTwitterWrapper;
}
@NonNull
@Override
public ResponseList<org.mariotaku.twidere.api.twitter.model.Status> getStatuses(final Twitter twitter, final Paging paging)
throws TwitterException {

@ -1742,41 +1742,48 @@ public final class Utils implements Constants {
}
public static boolean isFiltered(final SQLiteDatabase database, final long user_id, final String text_plain,
final String text_html, final String source, final long retweeted_by_id) {
return isFiltered(database, user_id, text_plain, text_html, source, retweeted_by_id, true);
final String text_html, final String source, final long retweeted_by_id, final long quotedUserId) {
return isFiltered(database, user_id, text_plain, text_html, source, retweeted_by_id, quotedUserId, true);
}
public static boolean isFiltered(final SQLiteDatabase database, final long user_id, final String text_plain,
final String text_html, final String source, final long retweeted_by_id, final boolean filter_rts) {
public static boolean isFiltered(final SQLiteDatabase database, final long userId,
final String textPlain, final String textHtml, final String source,
final long retweetedById, final long quotedUserId, final boolean filterRts) {
if (database == null) return false;
if (text_plain == null && text_html == null && user_id <= 0 && source == null) return false;
if (textPlain == null && textHtml == null && userId <= 0 && source == null) return false;
final StringBuilder builder = new StringBuilder();
final List<String> selection_args = new ArrayList<>();
builder.append("SELECT NULL WHERE");
if (text_plain != null) {
selection_args.add(text_plain);
if (textPlain != null) {
selection_args.add(textPlain);
builder.append("(SELECT 1 IN (SELECT ? LIKE '%'||" + Filters.Keywords.TABLE_NAME + "." + Filters.VALUE
+ "||'%' FROM " + Filters.Keywords.TABLE_NAME + "))");
}
if (text_html != null) {
if (textHtml != null) {
if (!selection_args.isEmpty()) {
builder.append(" OR ");
}
selection_args.add(text_html);
selection_args.add(textHtml);
builder.append("(SELECT 1 IN (SELECT ? LIKE '%<a href=\"%'||" + Filters.Links.TABLE_NAME + "."
+ Filters.VALUE + "||'%\">%' FROM " + Filters.Links.TABLE_NAME + "))");
}
if (user_id > 0) {
if (userId > 0) {
if (!selection_args.isEmpty()) {
builder.append(" OR ");
}
builder.append("(SELECT ").append(user_id).append(" IN (SELECT ").append(Users.USER_ID).append(" FROM ").append(Users.TABLE_NAME).append("))");
builder.append("(SELECT ").append(userId).append(" IN (SELECT ").append(Users.USER_ID).append(" FROM ").append(Users.TABLE_NAME).append("))");
}
if (retweeted_by_id > 0) {
if (retweetedById > 0) {
if (!selection_args.isEmpty()) {
builder.append(" OR ");
}
builder.append("(SELECT ").append(retweeted_by_id).append(" IN (SELECT ").append(Users.USER_ID).append(" FROM ").append(Users.TABLE_NAME).append("))");
builder.append("(SELECT ").append(retweetedById).append(" IN (SELECT ").append(Users.USER_ID).append(" FROM ").append(Users.TABLE_NAME).append("))");
}
if (quotedUserId > 0) {
if (!selection_args.isEmpty()) {
builder.append(" OR ");
}
builder.append("(SELECT ").append(quotedUserId).append(" IN (SELECT ").append(Users.USER_ID).append(" FROM ").append(Users.TABLE_NAME).append("))");
}
if (source != null) {
if (!selection_args.isEmpty()) {
@ -1800,7 +1807,7 @@ public final class Utils implements Constants {
final boolean filter_rts) {
if (database == null || status == null) return false;
return isFiltered(database, status.user_id, status.text_plain, status.text_html, status.source,
status.retweeted_by_user_id, filter_rts);
status.retweeted_by_user_id, status.quoted_user_id, filter_rts);
}
public static boolean isMyAccount(final Context context, final long accountId) {

@ -58,6 +58,7 @@ import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
import javax.inject.Singleton;
import javax.net.SocketFactory;
@Singleton
public class TwidereDns implements Constants, Dns {