implemented fanfou trends

This commit is contained in:
Mariotaku Lee 2017-02-05 20:42:18 +08:00
parent d38073b944
commit 7d7ea93241
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
9 changed files with 69 additions and 15 deletions

View File

@ -1,17 +1,19 @@
package org.mariotaku.microblog.library.fanfou;
import org.mariotaku.microblog.library.fanfou.api.BlocksResources;
import org.mariotaku.microblog.library.fanfou.api.DirectMessagesResources;
import org.mariotaku.microblog.library.fanfou.api.FavoritesResources;
import org.mariotaku.microblog.library.fanfou.api.FriendshipsResources;
import org.mariotaku.microblog.library.fanfou.api.PhotosResources;
import org.mariotaku.microblog.library.fanfou.api.SearchResources;
import org.mariotaku.microblog.library.fanfou.api.StatusesResources;
import org.mariotaku.microblog.library.fanfou.api.TrendsResources;
import org.mariotaku.microblog.library.fanfou.api.UsersResources;
import org.mariotaku.microblog.library.fanfou.api.DirectMessagesResources;
/**
* Created by mariotaku on 16/3/10.
*/
public interface Fanfou extends StatusesResources, SearchResources, UsersResources, PhotosResources,
FriendshipsResources, BlocksResources, FavoritesResources, DirectMessagesResources {
FriendshipsResources, BlocksResources, FavoritesResources, DirectMessagesResources,
TrendsResources {
}

View File

@ -0,0 +1,16 @@
package org.mariotaku.microblog.library.fanfou.api;
import org.mariotaku.microblog.library.MicroBlogException;
import org.mariotaku.microblog.library.twitter.model.Trends;
import org.mariotaku.restfu.annotation.method.GET;
/**
* Created by mariotaku on 2017/2/5.
*/
@SuppressWarnings("RedundantThrows")
public interface TrendsResources {
@GET("/trends/list.json")
Trends getFanfouTrends() throws MicroBlogException;
}

View File

@ -7,7 +7,7 @@ import org.mariotaku.microblog.library.twitter.api.HelpResources;
import org.mariotaku.microblog.library.twitter.api.ListResources;
import org.mariotaku.microblog.library.twitter.api.PlacesGeoResources;
import org.mariotaku.microblog.library.twitter.api.SavedSearchesResources;
import org.mariotaku.microblog.library.twitter.api.SearchResource;
import org.mariotaku.microblog.library.twitter.api.SearchResources;
import org.mariotaku.microblog.library.twitter.api.SpamReportingResources;
import org.mariotaku.microblog.library.twitter.api.TimelineResources;
import org.mariotaku.microblog.library.twitter.api.TrendsResources;
@ -17,7 +17,7 @@ import org.mariotaku.microblog.library.twitter.api.UsersResources;
/**
* Created by mariotaku on 16/5/13.
*/
public interface Twitter extends SearchResource, TimelineResources, TweetResources, UsersResources,
public interface Twitter extends SearchResources, TimelineResources, TweetResources, UsersResources,
ListResources, DirectMessagesResources, FriendsFollowersResources, FavoritesResources,
SpamReportingResources, SavedSearchesResources, TrendsResources, PlacesGeoResources,
HelpResources, TwitterPrivate {

View File

@ -29,7 +29,7 @@ import org.mariotaku.restfu.annotation.param.Query;
@SuppressWarnings("RedundantThrows")
@Queries(template = StatusAnnotationTemplate.class)
public interface SearchResource {
public interface SearchResources {
@GET("/search/tweets.json")
QueryResult search(@Query SearchQuery query) throws MicroBlogException;
}

View File

@ -45,6 +45,4 @@ public interface TrendsResources {
@GET("/trends/place.json")
ResponseList<Trends> getLocationTrends(@Query("id") int woeid) throws MicroBlogException;
@GET("/trends/place.json")
Trends getPlaceTrends(@Query("id") int woeid) throws MicroBlogException;
}

View File

@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@ -15,6 +16,7 @@ public class TwitterTrendsDateConverter implements TypeConverter<Date> {
private static final SimpleDateFormat DATE_FORMAT_1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH);
private static final SimpleDateFormat DATE_FORMAT_2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.ENGLISH);
private static final SimpleDateFormat DATE_FORMAT_3 = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.ENGLISH);
@Override
public Date parse(JsonParser jsonParser) throws IOException {
@ -28,7 +30,7 @@ public class TwitterTrendsDateConverter implements TypeConverter<Date> {
case 20:
return DATE_FORMAT_1.parse(dateString);
default:
return DATE_FORMAT_2.parse(dateString);
return parse(dateString, new DateFormat[]{DATE_FORMAT_2, DATE_FORMAT_3});
}
}
} catch (ParseException e) {
@ -40,4 +42,15 @@ public class TwitterTrendsDateConverter implements TypeConverter<Date> {
public void serialize(Date object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) {
throw new UnsupportedOperationException();
}
private static Date parse(String dateString, DateFormat[] formats) throws ParseException {
for (final DateFormat format : formats) {
try {
return format.parse(dateString);
} catch (ParseException e) {
// Ignore
}
}
throw new ParseException("Unrecognized date " + dateString, 0);
}
}

View File

@ -59,7 +59,8 @@ public class TrendsTabConfiguration extends TabConfiguration {
extras.setWoeId(place.getWoeId());
extras.setPlaceName(place.getName());
} else {
return false;
extras.setWoeId(0);
extras.setPlaceName(null);
}
break;
}

View File

@ -10,9 +10,11 @@ import android.widget.TextView
import org.mariotaku.microblog.library.twitter.model.Location
import org.mariotaku.twidere.R
import org.mariotaku.twidere.activity.TrendsLocationSelectorActivity
import org.mariotaku.twidere.annotation.AccountType
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_LOCATION
import org.mariotaku.twidere.fragment.CustomTabsFragment
import org.mariotaku.twidere.model.AccountDetails
import org.mariotaku.twidere.model.tab.TabConfiguration
/**
@ -34,6 +36,7 @@ open class TrendsLocationExtraConfiguration(
}
private lateinit var summaryView: TextView
override fun onCreateView(context: Context, parent: ViewGroup): View {
return LayoutInflater.from(context).inflate(R.layout.layout_extra_config_checkbox, parent, false)
}
@ -64,5 +67,18 @@ open class TrendsLocationExtraConfiguration(
}
}
override fun onAccountSelectionChanged(account: AccountDetails?) {
super.onAccountSelectionChanged(account)
val titleView = view.findViewById(android.R.id.title) as TextView
val summaryView = view.findViewById(android.R.id.summary) as TextView
val canSelectLocation = account?.type == AccountType.TWITTER
view.isEnabled = canSelectLocation
titleView.isEnabled = canSelectLocation
summaryView.isEnabled = canSelectLocation
if (!canSelectLocation) {
value = null
}
}
data class Place(var woeId: Int, var name: String)
}

View File

@ -1,5 +1,6 @@
package org.mariotaku.twidere.task
import android.accounts.AccountManager
import android.content.ContentResolver
import android.content.ContentValues
import android.content.Context
@ -7,16 +8,21 @@ import android.net.Uri
import android.support.v4.util.ArraySet
import com.squareup.otto.Bus
import org.mariotaku.abstask.library.AbstractTask
import org.mariotaku.microblog.library.MicroBlog
import org.mariotaku.microblog.library.MicroBlogException
import org.mariotaku.microblog.library.twitter.model.Trends
import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.TwidereConstants.LOGTAG
import org.mariotaku.twidere.annotation.AccountType
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
import org.mariotaku.twidere.model.ParcelableTrend
import org.mariotaku.twidere.model.ParcelableTrendValuesCreator
import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.message.TrendsRefreshedEvent
import org.mariotaku.twidere.model.util.AccountUtils
import org.mariotaku.twidere.provider.TwidereDataStore.CachedHashtags
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends
import org.mariotaku.twidere.util.MicroBlogAPIFactory
import org.mariotaku.twidere.util.DebugLog
import org.mariotaku.twidere.util.content.ContentResolverUtils
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
import java.util.*
@ -39,15 +45,17 @@ class GetTrendsTask(
}
override fun doLongOperation(param: Any?) {
val twitter = MicroBlogAPIFactory.getInstance(context, accountKey) ?: return
val details = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey, true) ?: return
val twitter = details.newMicroBlogInstance(context, cls = MicroBlog::class.java)
try {
val trends = twitter.getLocationTrends(woeId)
val trends = when {
details.type == AccountType.FANFOU -> listOf(twitter.fanfouTrends)
else -> twitter.getLocationTrends(woeId)
}
storeTrends(context.contentResolver, CachedTrends.Local.CONTENT_URI, trends)
return
} catch (e: MicroBlogException) {
return
DebugLog.w(LOGTAG, tr = e)
}
}
override fun afterExecute(handler: Any?, result: Unit) {