fixed status link filter
This commit is contained in:
parent
bf2311d5c9
commit
ba9518ec22
|
@ -733,13 +733,6 @@ public interface TwidereDataStore {
|
|||
|
||||
Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH);
|
||||
|
||||
/**
|
||||
* Status content, in HTML. Please note, this is not actually original
|
||||
* text.<br>
|
||||
* Type: TEXT
|
||||
*/
|
||||
String TEXT_HTML = "text_html";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -866,7 +859,6 @@ public interface TwidereDataStore {
|
|||
+ " DESC";
|
||||
|
||||
String QUOTED_ID = "quoted_id";
|
||||
String QUOTED_TEXT_HTML = "quoted_text_html";
|
||||
String QUOTED_TEXT_PLAIN = "quoted_text_plain";
|
||||
String QUOTED_TEXT_UNESCAPED = "quoted_text_unescaped";
|
||||
String QUOTED_MEDIA_JSON = "quoted_media_json";
|
||||
|
@ -900,32 +892,32 @@ public interface TwidereDataStore {
|
|||
String IN_REPLY_TO_USER_NICKNAME = "in_reply_to_user_nickname";
|
||||
|
||||
String[] COLUMNS = {_ID, ACCOUNT_KEY, STATUS_ID, SORT_ID, USER_KEY, STATUS_TIMESTAMP,
|
||||
TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED, USER_NAME, USER_SCREEN_NAME,
|
||||
USER_PROFILE_IMAGE_URL, IN_REPLY_TO_STATUS_ID, IN_REPLY_TO_USER_ID, IN_REPLY_TO_USER_NAME,
|
||||
IN_REPLY_TO_USER_SCREEN_NAME, SOURCE, LOCATION, RETWEET_COUNT, FAVORITE_COUNT, REPLY_COUNT,
|
||||
TEXT_PLAIN, TEXT_UNESCAPED, USER_NAME, USER_SCREEN_NAME, USER_PROFILE_IMAGE_URL,
|
||||
IN_REPLY_TO_STATUS_ID, IN_REPLY_TO_USER_ID, IN_REPLY_TO_USER_NAME, IN_REPLY_TO_USER_SCREEN_NAME,
|
||||
SOURCE, LOCATION, RETWEET_COUNT, FAVORITE_COUNT, REPLY_COUNT,
|
||||
RETWEET_ID, RETWEET_TIMESTAMP, RETWEETED_BY_USER_KEY, RETWEETED_BY_USER_NAME,
|
||||
RETWEETED_BY_USER_SCREEN_NAME, RETWEETED_BY_USER_PROFILE_IMAGE, QUOTED_ID, QUOTED_TEXT_HTML,
|
||||
QUOTED_TEXT_PLAIN, QUOTED_TEXT_UNESCAPED, QUOTED_TIMESTAMP, QUOTED_SOURCE, QUOTED_USER_KEY,
|
||||
QUOTED_USER_NAME, QUOTED_USER_SCREEN_NAME, QUOTED_USER_PROFILE_IMAGE,
|
||||
RETWEETED_BY_USER_SCREEN_NAME, RETWEETED_BY_USER_PROFILE_IMAGE, QUOTED_ID,
|
||||
QUOTED_TEXT_PLAIN, QUOTED_TEXT_UNESCAPED, QUOTED_TIMESTAMP, QUOTED_SOURCE,
|
||||
QUOTED_USER_KEY, QUOTED_USER_NAME, QUOTED_USER_SCREEN_NAME, QUOTED_USER_PROFILE_IMAGE,
|
||||
QUOTED_USER_IS_VERIFIED, QUOTED_USER_IS_PROTECTED, MY_RETWEET_ID, IS_RETWEET,
|
||||
IS_QUOTE, IS_FAVORITE, IS_PROTECTED, IS_VERIFIED, IS_FOLLOWING, IS_GAP,
|
||||
IS_POSSIBLY_SENSITIVE, MEDIA_JSON, MENTIONS_JSON, QUOTED_MEDIA_JSON, CARD_NAME, CARD,
|
||||
PLACE_FULL_NAME, LANG, RETWEETED, QUOTED_LOCATION, QUOTED_PLACE_FULL_NAME, INSERTED_DATE,
|
||||
EXTRAS, POSITION_KEY, SPANS, QUOTED_SPANS, ACCOUNT_COLOR, USER_COLOR, QUOTED_USER_COLOR,
|
||||
RETWEET_USER_COLOR, USER_NICKNAME, QUOTED_USER_NICKNAME, RETWEET_USER_NICKNAME,
|
||||
IN_REPLY_TO_USER_NICKNAME};
|
||||
EXTRAS, POSITION_KEY, /*spans*/ SPANS, QUOTED_SPANS, /*colors*/ ACCOUNT_COLOR, USER_COLOR,
|
||||
QUOTED_USER_COLOR, RETWEET_USER_COLOR, /*nicknames*/ USER_NICKNAME,
|
||||
QUOTED_USER_NICKNAME, RETWEET_USER_NICKNAME, IN_REPLY_TO_USER_NICKNAME};
|
||||
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL, TYPE_INT,
|
||||
TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT,
|
||||
TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_TEXT, TYPE_BOOLEAN,
|
||||
TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_TEXT, TYPE_BOOLEAN,
|
||||
TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN,
|
||||
TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, INSERTED_DATE_TYPE,
|
||||
TYPE_TEXT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT};
|
||||
TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, INSERTED_DATE_TYPE, TYPE_TEXT,
|
||||
TYPE_INT, /*spans*/ TYPE_TEXT, TYPE_TEXT, /*colors*/ TYPE_INT, TYPE_INT, TYPE_INT,
|
||||
TYPE_INT, /*nicknames*/TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT};
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ import static org.mariotaku.twidere.annotation.PreferenceType.STRING;
|
|||
public interface Constants extends TwidereConstants {
|
||||
|
||||
String DATABASES_NAME = "twidere.sqlite";
|
||||
int DATABASES_VERSION = 139;
|
||||
int DATABASES_VERSION = 140;
|
||||
|
||||
int MENU_GROUP_STATUS_EXTENSION = 10;
|
||||
int MENU_GROUP_COMPOSE_EXTENSION = 11;
|
||||
|
|
|
@ -91,6 +91,7 @@ import org.mariotaku.twidere.model.ParcelableActivity;
|
|||
import org.mariotaku.twidere.model.ParcelableActivityCursorIndices;
|
||||
import org.mariotaku.twidere.model.ParcelableDirectMessageCursorIndices;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.SpanItem;
|
||||
import org.mariotaku.twidere.model.StringLongPair;
|
||||
import org.mariotaku.twidere.model.UnreadItem;
|
||||
import org.mariotaku.twidere.model.UserKey;
|
||||
|
@ -121,6 +122,7 @@ import org.mariotaku.twidere.util.ActivityTracker;
|
|||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.DataStoreUtils;
|
||||
import org.mariotaku.twidere.util.ImagePreloader;
|
||||
import org.mariotaku.twidere.util.JsonSerializer;
|
||||
import org.mariotaku.twidere.util.NotificationManagerWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.PermissionsManager;
|
||||
|
@ -1232,7 +1234,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
|||
final Context context = getContext();
|
||||
if (uri == null || valuesArray == null || valuesArray.length == 0 || context == null)
|
||||
return;
|
||||
preloadImages(valuesArray);
|
||||
preloadMedia(valuesArray);
|
||||
switch (tableId) {
|
||||
case TABLE_ID_STATUSES: {
|
||||
mBackgroundExecutor.execute(new Runnable() {
|
||||
|
@ -1639,19 +1641,29 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
|||
}
|
||||
}
|
||||
|
||||
private void preloadImages(final ContentValues... values) {
|
||||
private void preloadMedia(final ContentValues... values) {
|
||||
if (values == null) return;
|
||||
final boolean preloadProfileImages = mPreferences.getBoolean(KEY_PRELOAD_PROFILE_IMAGES, false);
|
||||
final boolean preloadPreviewMedia = mPreferences.getBoolean(KEY_PRELOAD_PREVIEW_IMAGES, false);
|
||||
for (final ContentValues v : values) {
|
||||
if (mPreferences.getBoolean(KEY_PRELOAD_PROFILE_IMAGES, false)) {
|
||||
if (preloadProfileImages) {
|
||||
mImagePreloader.preloadImage(v.getAsString(Statuses.USER_PROFILE_IMAGE_URL));
|
||||
mImagePreloader.preloadImage(v.getAsString(DirectMessages.SENDER_PROFILE_IMAGE_URL));
|
||||
mImagePreloader.preloadImage(v.getAsString(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL));
|
||||
}
|
||||
if (mPreferences.getBoolean(KEY_PRELOAD_PREVIEW_IMAGES, false)) {
|
||||
final String textHtml = v.getAsString(Statuses.TEXT_HTML);
|
||||
for (final String link : PreviewMediaExtractor.getSupportedLinksInStatus(textHtml)) {
|
||||
mImagePreloader.preloadImage(link);
|
||||
}
|
||||
if (preloadPreviewMedia) {
|
||||
preloadSpans(JsonSerializer.parseList(v.getAsString(Statuses.SPANS), SpanItem.class));
|
||||
preloadSpans(JsonSerializer.parseList(v.getAsString(Statuses.QUOTED_SPANS), SpanItem.class));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void preloadSpans(List<SpanItem> spans) {
|
||||
if (spans == null) return;
|
||||
for (SpanItem span : spans) {
|
||||
if (span.link == null) continue;
|
||||
if (PreviewMediaExtractor.isSupported(span.link)) {
|
||||
mImagePreloader.preloadImage(span.link);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -344,10 +344,10 @@ public class DataStoreUtils implements Constants {
|
|||
.select(new Columns(new Column(new Table(table), Statuses._ID)))
|
||||
.from(new Tables(table, Filters.Links.TABLE_NAME))
|
||||
.where(Expression.or(
|
||||
Expression.likeRaw(new Column(new Table(table), Statuses.TEXT_HTML),
|
||||
"'%>%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%</a>%'"),
|
||||
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTED_TEXT_HTML),
|
||||
"'%>%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%</a>%'")
|
||||
Expression.likeRaw(new Column(new Table(table), Statuses.SPANS),
|
||||
"'%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%'"),
|
||||
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTED_SPANS),
|
||||
"'%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%'")
|
||||
));
|
||||
final Expression filterExpression = Expression.or(
|
||||
Expression.notIn(new Column(new Table(table), Statuses._ID), filteredIdsQueryBuilder.build()),
|
||||
|
|
|
@ -20,13 +20,9 @@
|
|||
package org.mariotaku.twidere.util;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
|
||||
import com.bluelinelabs.logansquare.JsonMapper;
|
||||
|
||||
import org.mariotaku.twidere.BuildConfig;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
@ -46,9 +42,6 @@ public class JsonSerializer {
|
|||
try {
|
||||
return LoganSquareMapperFinder.mapperFor(cls).serialize(list);
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -59,9 +52,6 @@ public class JsonSerializer {
|
|||
try {
|
||||
return LoganSquareMapperFinder.mapperFor(cls).serialize(list);
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -72,9 +62,6 @@ public class JsonSerializer {
|
|||
try {
|
||||
return LoganSquareMapperFinder.mapperFor(cls).serialize(Arrays.asList(array));
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -85,9 +72,6 @@ public class JsonSerializer {
|
|||
try {
|
||||
return LoganSquareMapperFinder.mapperFor(cls).serialize(object);
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -101,9 +85,6 @@ public class JsonSerializer {
|
|||
LoganSquareMapperFinder.mapperFor(object.getClass());
|
||||
return mapper.serialize(object);
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -116,9 +97,6 @@ public class JsonSerializer {
|
|||
//noinspection unchecked
|
||||
return list.toArray((T[]) Array.newInstance(cls, list.size()));
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -129,9 +107,6 @@ public class JsonSerializer {
|
|||
try {
|
||||
return LoganSquareMapperFinder.mapperFor(cls).parse(string);
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -143,13 +118,21 @@ public class JsonSerializer {
|
|||
is = new FileInputStream(file);
|
||||
return LoganSquareMapperFinder.mapperFor(cls).parseList(is);
|
||||
} catch (IOException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(Constants.LOGTAG, e);
|
||||
}
|
||||
return null;
|
||||
} finally {
|
||||
Utils.closeSilently(is);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static <E> List<E> parseList(String json, Class<E> cls) {
|
||||
FileInputStream is = null;
|
||||
//noinspection TryFinallyCanBeTryWithResources
|
||||
try {
|
||||
return LoganSquareMapperFinder.mapperFor(cls).parseList(json);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue