Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ public static DefaultPOI fromCursorStatic(@NonNull Cursor c, @NonNull String aut
authority,
getIdFromCursor(c),
getDataSourceTypeIdFromCursor(c),
c.getInt(c.getColumnIndexOrThrow(POIProviderContract.Columns.T_POI_K_TYPE)),
getTypeFromCursor(c),
c.getInt(c.getColumnIndexOrThrow(POIProviderContract.Columns.T_POI_K_STATUS_TYPE)),
CursorExtKt.optIntNN(c, POIProviderContract.Columns.T_POI_K_ACTIONS_TYPE, POI.ITEM_ACTION_TYPE_NONE)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
import org.mtransit.android.commons.UriUtils;
import org.mtransit.android.commons.data.News;
import org.mtransit.android.commons.helpers.MTDefaultHandler;
import org.mtransit.android.commons.provider.config.news.DefaultNewsProviderConfig;
import org.mtransit.android.commons.provider.config.news.NewsProviderConfig;
import org.mtransit.android.commons.provider.config.news.NewsType;
import org.mtransit.android.commons.provider.news.NewsTextFormatter;
import org.mtransit.commons.SourceUtils;
import org.xml.sax.Attributes;
Expand Down Expand Up @@ -160,6 +163,12 @@ private static String getNEWS_TARGET_AUTHORITY(@NonNull Context context) {
return newsTargetAuthority;
}

@NonNull
@Override
public NewsProviderConfig getNewsConfig() {
return new DefaultNewsProviderConfig(NewsType.CA_STO);
}

/**
* Override if multiple {@link CaSTOProvider} implementations in same app.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,7 @@ public final class ContentProviderConstants {
//
public static final int NEWS = 115;
//
public static final int CONFIG = 555;
//
public static final int ALL = 999;
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import org.mtransit.android.commons.data.News
import org.mtransit.android.commons.provider.InstagramNewsProvider.InstagramApi.JEdgeOwnerToTimelineMediaNode
import org.mtransit.android.commons.provider.InstagramNewsProvider.InstagramApi.JProfileUser
import org.mtransit.android.commons.provider.agency.AgencyUtils
import org.mtransit.android.commons.provider.config.news.instagram.InstagramNewsFeedConfig
import org.mtransit.android.commons.provider.config.news.instagram.InstagramNewsProviderConfig
import retrofit2.Call
import retrofit2.create
import retrofit2.http.GET
Expand Down Expand Up @@ -140,6 +142,20 @@ class InstagramNewsProvider : NewsProvider() {
)
}

override fun getNewsConfig() = InstagramNewsProviderConfig(
newsFeedConfigs = _userNames.mapIndexed { i, username ->
InstagramNewsFeedConfig(
username = username,
lang = _userNamesLang.getOrNull(i) ?: LocaleUtils.UNKNOWN,
color = _userNamesColors.getOrNull(i) ?: _color.takeIf { it.isNotBlank() }, // optional (fallback: agency color)
target = _userNamesTarget.getOrNull(i)?.takeIf { it.isNotBlank() }
?: _targetAuthority.takeIf { it.isNotBlank() }, // optional (fallback: agency UUID)
severity = _userNamesSeverity.getOrNull(i) ?: InstagramNewsFeedConfig.SEVERITY_DEFAULT,
noteworthy = _userNamesNoteworthy.getOrNull(i) ?: InstagramNewsFeedConfig.NOTEWORTHY_DEFAULT,
)
}
)

override fun getLogTag() = LOG_TAG

override fun getURI_MATCHER() = _uriMatcher
Expand Down Expand Up @@ -318,7 +334,7 @@ class InstagramNewsProvider : NewsProvider() {
val newNews = ArrayList<News>()
val maxValidityInMs = newsMaxValidityInMs
val authority = _authority
for ((i, userName) in _userNames.withIndex()) {
_userNames.forEachIndexed { i, userName ->
loadUserTimeline(
context,
getInstagramApi(context),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.mtransit.android.commons.StringUtils;
import org.mtransit.android.commons.TimeUtils;
import org.mtransit.android.commons.data.News;
import org.mtransit.android.commons.provider.config.news.NewsProviderConfig;
import org.mtransit.commons.CollectionUtils;
import org.mtransit.commons.sql.SQLCreateBuilder;
import org.mtransit.commons.sql.SQLInsertBuilder;
Expand Down Expand Up @@ -52,6 +53,7 @@ public static UriMatcher getNewUriMatcher(@NonNull String authority) {
public static void append(@NonNull UriMatcher uriMatcher, @NonNull String authority) {
uriMatcher.addURI(authority, NewsProviderContract.PING_PATH, ContentProviderConstants.PING);
uriMatcher.addURI(authority, NewsProviderContract.NEWS_PATH, ContentProviderConstants.NEWS);
uriMatcher.addURI(authority, NewsProviderContract.CONFIG_PATH, ContentProviderConstants.CONFIG);
}

@Nullable
Expand Down Expand Up @@ -142,11 +144,19 @@ public static Cursor queryS(@NonNull NewsProviderContract provider, @NonNull Uri
return ContentProviderConstants.EMPTY_CURSOR; // empty cursor = processed
case ContentProviderConstants.NEWS:
return getNews(provider, selection);
case ContentProviderConstants.CONFIG:
return getNewsConfig(provider);
default:
return null; // not processed
}
}

@NonNull
private static Cursor getNewsConfig(@NonNull NewsProviderContract provider) {
final NewsProviderConfig providerNewsConfig = provider.getNewsConfig();
return providerNewsConfig.toCursor();
}

@Nullable
private static Cursor getNews(@NonNull NewsProviderContract provider, @Nullable String selection) {
NewsProviderContract.Filter newsFilter = NewsProviderContract.Filter.fromJSONString(selection);
Expand Down Expand Up @@ -318,7 +328,9 @@ public String getTypeMT(@NonNull Uri uri) {
@Nullable
public static String getTypeS(@NonNull NewsProviderContract provider, @NonNull Uri uri) {
switch (provider.getURI_MATCHER().match(uri)) {
case ContentProviderConstants.PING:
case ContentProviderConstants.NEWS:
case ContentProviderConstants.CONFIG:
return StringUtils.EMPTY; // empty string = processed
default:
return null; // not processed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.mtransit.android.commons.data.News;
import org.mtransit.android.commons.data.POI;
import org.mtransit.android.commons.data.RouteDirectionStop;
import org.mtransit.android.commons.provider.config.news.NewsProviderConfig;
import org.mtransit.commons.CollectionUtils;

import java.util.ArrayList;
Expand All @@ -30,6 +31,7 @@
public interface NewsProviderContract extends ProviderContract {

String NEWS_PATH = "news";
String CONFIG_PATH = "config"; // TODO move to ProviderContract once implemented everywhere

boolean REMOVE_IMAGE_FROM_TEXT = false; // TODO later

Expand Down Expand Up @@ -74,6 +76,9 @@ public interface NewsProviderContract extends ProviderContract {
@NonNull
Collection<String> getNewsLanguages();

@NonNull
NewsProviderConfig getNewsConfig();

interface Columns {
String T_NEWS_K_ID = BaseColumns._ID;
String T_NEWS_K_AUTHORITY_META = "authority";
Expand Down Expand Up @@ -133,6 +138,29 @@ interface Columns {
Columns.T_NEWS_K_IMAGE_URL_INDEX + 9, //
};

interface FeedConfigColumns {
String T_NEWS_FEED_CONFIG_K_TYPE = "type";
String T_NEWS_FEED_CONFIG_K_TARGET = "target";
String T_NEWS_FEED_CONFIG_K_LANG = "lang";
String T_NEWS_FEED_CONFIG_K_COLOR = "color";
String T_NEWS_FEED_CONFIG_K_SEVERITY = "severity";
String T_NEWS_FEED_CONFIG_K_NOTEWORTHY = "noteworthy";

String T_NEWS_FEED_CONFIG_K_EXTRA = "extra";

}

String[] PROJECTION_NEWS_FEED_CONFIG = new String[]{
FeedConfigColumns.T_NEWS_FEED_CONFIG_K_TYPE,
FeedConfigColumns.T_NEWS_FEED_CONFIG_K_TARGET,
FeedConfigColumns.T_NEWS_FEED_CONFIG_K_LANG,
FeedConfigColumns.T_NEWS_FEED_CONFIG_K_COLOR,
FeedConfigColumns.T_NEWS_FEED_CONFIG_K_SEVERITY,
FeedConfigColumns.T_NEWS_FEED_CONFIG_K_NOTEWORTHY,

FeedConfigColumns.T_NEWS_FEED_CONFIG_K_EXTRA,
};

@SuppressWarnings("WeakerAccess")
class Filter implements MTLog.Loggable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.mtransit.android.commons.UriUtils;
import org.mtransit.android.commons.data.News;
import org.mtransit.android.commons.helpers.MTDefaultHandler;
import org.mtransit.android.commons.provider.config.news.NewsProviderConfig;
import org.mtransit.android.commons.provider.news.NewsTextFormatter;
import org.mtransit.android.commons.provider.news.rss.RssNewProviderUtils;
import org.mtransit.commons.CleanUtils;
Expand Down Expand Up @@ -234,6 +235,12 @@ private static java.util.List<String> getFEEDS_LABEL(@NonNull Context context) {
return feedsLabel;
}

@NonNull
@Override
public NewsProviderConfig getNewsConfig() {
return RssNewProviderUtils.getNewsConfig(requireContextCompat());
}

@NonNull
@Override
public UriMatcher getURI_MATCHER() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import org.mtransit.android.commons.TimeUtils
import org.mtransit.android.commons.UriUtils
import org.mtransit.android.commons.data.News
import org.mtransit.android.commons.provider.agency.AgencyUtils
import org.mtransit.android.commons.provider.config.news.twitter.TwitterNewsFeedConfig
import org.mtransit.android.commons.provider.config.news.twitter.TwitterNewsProviderConfig
import org.mtransit.android.commons.provider.news.NewsTextFormatter
import org.mtransit.android.commons.provider.news.twitter.model.Tweet
import org.mtransit.android.commons.provider.news.twitter.model.TweetMediaType
Expand Down Expand Up @@ -221,6 +223,21 @@ class TwitterNewsProvider : NewsProvider() {
)
}

override fun getNewsConfig() = TwitterNewsProviderConfig(
newsFeedConfigs = _userNames.mapIndexed { i, username ->
TwitterNewsFeedConfig(
username = username,
userId = _userNamesId.getOrNull(i), // optional (saved 1 request)
lang = _userNamesLang.getOrNull(i) ?: LocaleUtils.UNKNOWN,
color = _userNamesColors.getOrNull(i) ?: _color.takeIf { it.isNotBlank() }, // optional (fallback: agency color)
target = _userNamesTarget.getOrNull(i)?.takeIf { it.isNotBlank() }
?: _targetAuthority.takeIf { it.isNotBlank() }, // optional (fallback: agency UUID)
severity = _userNamesSeverity.getOrNull(i) ?: TwitterNewsFeedConfig.SEVERITY_DEFAULT,
noteworthy = _userNamesNoteworthy.getOrNull(i) ?: TwitterNewsFeedConfig.NOTEWORTHY_DEFAULT,
)
}
)

override fun getLogTag() = LOG_TAG

override fun getURI_MATCHER() = _uriMatcher
Expand Down Expand Up @@ -414,7 +431,7 @@ class TwitterNewsProvider : NewsProvider() {
val newNews = ArrayList<News>()
val maxValidityInMs = newsMaxValidityInMs
val authority = _authority
for ((i, userName) in _userNames.withIndex()) {
_userNames.forEachIndexed { i, userName ->
loadUserTimeline(
context,
twitterApi,
Expand Down Expand Up @@ -527,10 +544,16 @@ class TwitterNewsProvider : NewsProvider() {
val tweetsResp = response.data
val tweetsRespIncludedExpansions = response.includes
var newSinceId: String? = null
val colorString = _userNamesColors.getOrNull(i)?.takeIf { it.isNotBlank() }
?: _color.takeIf { it.isNotBlank() }
?: AgencyUtils.getAgencyColor(context)
?: ColorUtils.BLACK
.also {
MTLog.w(this, "No color found for '$username'! (used fallback)")
}
tweetsResp
?.forEach { tweet ->
readNews(
context,
tweet,
tweetsRespIncludedExpansions,
authority,
Expand All @@ -541,7 +564,8 @@ class TwitterNewsProvider : NewsProvider() {
targetUUID,
userId,
username,
userLang
userLang,
colorString,
)?.apply {
if (newSinceId == null) {
newSinceId = tweet.id
Expand Down Expand Up @@ -571,7 +595,6 @@ class TwitterNewsProvider : NewsProvider() {

@RequiresApi(Build.VERSION_CODES.O)
private fun readNews(
context: Context,
tweet: Tweet,
includedExpansions: TweetIncludes?,
authority: String,
Expand All @@ -583,6 +606,7 @@ class TwitterNewsProvider : NewsProvider() {
userId: String,
userName: String,
userLang: String,
colorString: String,
): News? {
if (tweet.inReplyToUserId != null && tweet.inReplyToUserId != userId) {
MTLog.d(this, "readNews() > SKIP (in reply to screen name: '%s').", tweet.inReplyToUserId)
Expand Down Expand Up @@ -615,13 +639,6 @@ class TwitterNewsProvider : NewsProvider() {
val lang: String = getLang(tweet, userLang)
val createdAtInMs = tweet.createdAt?.time
?: newLastUpdateInMs // should never happen
val colorString = _userNamesColors.getOrNull(_userNames.indexOf(authorUserName))?.takeIf { it.isNotBlank() }
?: _color.takeIf { it.isNotBlank() }
?: AgencyUtils.getAgencyColor(context)
?: ColorUtils.BLACK
.also {
MTLog.w(this, "No color found for '$userName'! (used fallback)")
}
return News(
null,
authority,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@
import org.mtransit.android.commons.data.POIStatus;
import org.mtransit.android.commons.data.RouteDirectionStop;
import org.mtransit.android.commons.data.Schedule;
import org.mtransit.android.commons.provider.config.news.DefaultNewsProviderConfig;
import org.mtransit.android.commons.provider.config.news.NewsProviderConfig;
import org.mtransit.android.commons.provider.config.news.NewsType;
import org.mtransit.commons.CleanUtils;
import org.mtransit.commons.SourceUtils;
import org.mtransit.commons.provider.WinnipegTransitProviderCommons;
Expand Down Expand Up @@ -180,6 +183,12 @@ private static String getNEWS_TARGET_AUTHORITY(@NonNull Context context) {
return newsTargetAuthority;
}

@NonNull
@Override
public NewsProviderConfig getNewsConfig() {
return new DefaultNewsProviderConfig(NewsType.CA_WINNIPEG);
}

private static final long WEB_SERVICE_STATUS_MAX_VALIDITY_IN_MS = TimeUnit.HOURS.toMillis(1L);
private static final long WEB_SERVICE_STATUS_VALIDITY_IN_MS = TimeUnit.MINUTES.toMillis(10L);
private static final long WEB_SERVICE_STATUS_VALIDITY_IN_FOCUS_IN_MS = TimeUnit.MINUTES.toMillis(1L);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import org.mtransit.android.commons.UriUtils
import org.mtransit.android.commons.data.News
import org.mtransit.android.commons.linkifyAllURLs
import org.mtransit.android.commons.provider.agency.AgencyUtils
import org.mtransit.android.commons.provider.config.news.youtube.YouTubeNewsFeedConfig
import org.mtransit.android.commons.provider.config.news.youtube.YouTubeNewsProviderConfig
import org.mtransit.android.commons.provider.news.NewsTextFormatter
import org.mtransit.android.commons.provider.news.youtube.YouTubeDateAdapter
import org.mtransit.android.commons.provider.news.youtube.YouTubeV3Api
Expand Down Expand Up @@ -179,6 +181,22 @@ class YouTubeNewsProvider : NewsProvider() {
)
}

override fun getNewsConfig() = YouTubeNewsProviderConfig(
newsFeedConfigs = _authorUrls.mapIndexed { i, authorUrl ->
YouTubeNewsFeedConfig(
authorUrl = authorUrl,
username = _userNames.getOrNull(i),
userHandle = _userNamesHandles.getOrNull(i),
channelId = _userNamesChannelsId.getOrNull(i),
lang = _userNamesLang.getOrNull(i) ?: LocaleUtils.UNKNOWN,
color = _userNamesColors.getOrNull(i),
target = _userNamesTarget.getOrNull(i),
severity = _userNamesSeverity.getOrNull(i) ?: YouTubeNewsFeedConfig.SEVERITY_DEFAULT,
noteworthy = _userNamesNoteworthy.getOrNull(i) ?: YouTubeNewsFeedConfig.NOTEWORTHY_DEFAULT,
)
}
)

override fun getLogTag() = LOG_TAG

override fun getURI_MATCHER() = _uriMatcher
Expand Down Expand Up @@ -353,7 +371,7 @@ class YouTubeNewsProvider : NewsProvider() {
val newNews = ArrayList<News>()
val maxValidityInMs = newsMaxValidityInMs
val authority = _authority
for ((i, authorUrl) in _authorUrls.withIndex()) {
_authorUrls.forEachIndexed { i, authorUrl ->
loadUserUploadsPlaylist(
context,
youTubeApi,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package org.mtransit.android.commons.provider.config

interface ProviderConfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.mtransit.android.commons.provider.config.news

import android.database.Cursor

data class DefaultNewsProviderConfig @JvmOverloads constructor(
override val type: NewsType,
override val newsFeedConfigs: List<NewsFeedConfig> = emptyList()
) : NewsProviderConfig {
companion object {
fun getTypeFromCursor(cursor: Cursor): NewsType? = NewsType.fromId(
NewsFeedConfig.getTypeIdFromCursorRow(cursor)
)

fun fromCursor(newsType: NewsType): NewsProviderConfig = DefaultNewsProviderConfig(newsType,)
}
}
Loading