mirror of
https://github.com/bspeice/UNCCGameDay
synced 2024-11-04 23:28:12 -05:00
Fetch University and UNCC alerts correctly
This commit is contained in:
parent
90f149b51a
commit
b9de3ac529
@ -16,125 +16,131 @@ import com.uncc.gameday.twitter.TwitterClient;
|
|||||||
* The Class AlertFetcher.
|
* The Class AlertFetcher.
|
||||||
*/
|
*/
|
||||||
public class AlertFetcher {
|
public class AlertFetcher {
|
||||||
// Class responsible for fetching all alerts as necessary.
|
// Class responsible for fetching all alerts as necessary.
|
||||||
|
|
||||||
/** The max tweets. */
|
|
||||||
private int maxTweets = 5;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch all alerts - Twitter, timed, etc.
|
|
||||||
*
|
|
||||||
* @param ctx the ctx
|
|
||||||
*/
|
|
||||||
public void fetchAlerts(Context ctx) {
|
|
||||||
// Fetch all alerts. Responsible for discovering what sources need to be fetched.
|
|
||||||
try {
|
|
||||||
// Note we have to use the SharedPreferences so that we have preferences no matter what activity
|
|
||||||
// sent us this context
|
|
||||||
SharedPreferences settings = ctx.getSharedPreferences(ctx.getString(R.string.preferences_file), 0); // MODE_PRIVATE
|
|
||||||
|
|
||||||
if (settings.getBoolean("ALERT_ORGANIZATION", false))
|
|
||||||
// Fetch organization alerts
|
|
||||||
this.fetchOrganizationAlerts(ctx);
|
|
||||||
if (settings.getBoolean("ALERT_UNIVERSITY", false))
|
|
||||||
// Fetch university alerts
|
|
||||||
this.fetchUniversityAlerts(ctx);
|
|
||||||
|
|
||||||
// And always fetch alerts made by us. Period.
|
|
||||||
this.fetchGamedayAlerts(ctx);
|
|
||||||
} catch (TwitterException e) {
|
|
||||||
Log.w("AlertFetcher", "Unable to fetch alerts from Twitter...", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch all Organization alerts from Twitter
|
|
||||||
*
|
|
||||||
* @param ctx - The Context needed to access the Internet
|
|
||||||
* @throws TwitterException - Error in using the Twitter API
|
|
||||||
*/
|
|
||||||
private void fetchOrganizationAlerts(Context ctx) throws TwitterException {
|
|
||||||
// Process fetching organization alerts (alerts retweeted by us)
|
|
||||||
// Guaranteed to return <= maxTweets
|
|
||||||
String handle = ctx.getString(R.string.gameday_handle);
|
|
||||||
TwitterClient tc = new TwitterClient();
|
|
||||||
List<Status> statuses = tc.fetchTweets(handle, maxTweets);
|
|
||||||
|
|
||||||
// Filter for anything created by us (retweet)
|
|
||||||
for (Iterator<Status> it = statuses.iterator(); it.hasNext();){
|
|
||||||
// May need to switch to isRetweetByMe, not sure if
|
|
||||||
// We're using the right function (documentation is awful)
|
|
||||||
if (!it.next().isRetweet())
|
|
||||||
it.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
String type = AlertType.getValue(AlertType.ORGANIZATION);
|
|
||||||
pushToDatabase(statuses, type, ctx);
|
|
||||||
|
|
||||||
|
|
||||||
// List contains all valid alerts now
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch alerts from the University Twitter
|
|
||||||
*
|
|
||||||
* @param ctx - The Context for accessing the Internet
|
|
||||||
* @throws TwitterException - Throws an exception for misuse of Twitter API
|
|
||||||
*/
|
|
||||||
private void fetchUniversityAlerts(Context ctx) throws TwitterException {
|
|
||||||
// Process fetching university alerts
|
|
||||||
// Guaranteed to get `maxTweets` tweets
|
|
||||||
|
|
||||||
String handle = ctx.getString(R.string.university_handle);
|
|
||||||
TwitterClient tc = new TwitterClient();
|
|
||||||
List<Status> statuses = tc.fetchTweets(handle, maxTweets);
|
|
||||||
|
|
||||||
String type = AlertType.getValue(AlertType.UNIVERSITY);
|
|
||||||
pushToDatabase(statuses, type, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch gameday alerts.
|
|
||||||
*
|
|
||||||
* @param ctx the ctx
|
|
||||||
* @throws TwitterException the twitter exception
|
|
||||||
*/
|
|
||||||
private void fetchGamedayAlerts(Context ctx) throws TwitterException {
|
|
||||||
// Process fetching alerts generated by staff of UNCCGameDay
|
|
||||||
// Not guaranteed to get `maxTweets` tweets
|
|
||||||
|
|
||||||
String handle = ctx.getString(R.string.gameday_handle);
|
|
||||||
TwitterClient tc = new TwitterClient();
|
|
||||||
List<Status> statuses = tc.fetchTweets(handle, maxTweets);
|
|
||||||
|
|
||||||
// Filter out anything not from us
|
|
||||||
for (Iterator<Status> it = statuses.iterator(); it.hasNext();){
|
|
||||||
// May need to switch to isRetweetByMe (documentation is awful)
|
|
||||||
if (it.next().isRetweet())
|
|
||||||
it.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
String type = AlertType.getValue(AlertType.GAMEDAY);
|
|
||||||
pushToDatabase(statuses, type, ctx);
|
|
||||||
|
|
||||||
// List contains all valid alerts now.
|
/** The max tweets. */
|
||||||
|
private int maxTweets = 5;
|
||||||
|
|
||||||
}
|
/**
|
||||||
|
* Fetch all alerts - Twitter, timed, etc.
|
||||||
//takes list of statuses
|
*
|
||||||
//converts it to Alert object type
|
* @param ctx
|
||||||
//and persists to database
|
* the ctx
|
||||||
public void pushToDatabase(List<Status> statuses, String type, Context ctx)
|
*/
|
||||||
{
|
public void fetchAlerts(Context ctx) {
|
||||||
GregorianCalendar todayDate = new GregorianCalendar();
|
// Fetch all alerts. Responsible for discovering what sources need to be
|
||||||
long currentDate = todayDate.getTimeInMillis();
|
// fetched.
|
||||||
|
try {
|
||||||
AlertDB db = new AlertDB(ctx);
|
// Note we have to use the SharedPreferences so that we have
|
||||||
|
// preferences no matter what activity
|
||||||
for(int i = 0; i < statuses.size(); i++)
|
// sent us this context
|
||||||
{
|
SharedPreferences settings = ctx.getSharedPreferences(
|
||||||
Alert temp = new Alert(currentDate, statuses.get(i).getText(), 0, type);
|
ctx.getString(R.string.preferences_file), 0); // MODE_PRIVATE
|
||||||
db.persist(temp);
|
|
||||||
}
|
// Fetch organization alerts
|
||||||
}
|
this.fetchOrganizationAlerts(ctx);
|
||||||
|
// Fetch university alerts
|
||||||
|
this.fetchUniversityAlerts(ctx);
|
||||||
|
// And always fetch alerts made by us. Period.
|
||||||
|
|
||||||
|
this.fetchGamedayAlerts(ctx);
|
||||||
|
} catch (TwitterException e) {
|
||||||
|
Log.w("AlertFetcher", "Unable to fetch alerts from Twitter...", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch all Organization alerts from Twitter
|
||||||
|
*
|
||||||
|
* @param ctx
|
||||||
|
* - The Context needed to access the Internet
|
||||||
|
* @throws TwitterException
|
||||||
|
* - Error in using the Twitter API
|
||||||
|
*/
|
||||||
|
private void fetchOrganizationAlerts(Context ctx) throws TwitterException {
|
||||||
|
// Process fetching organization alerts (alerts retweeted by us)
|
||||||
|
// Guaranteed to return <= maxTweets
|
||||||
|
String handle = ctx.getString(R.string.gameday_handle);
|
||||||
|
TwitterClient tc = new TwitterClient();
|
||||||
|
List<Status> statuses = tc.fetchTweets(handle, maxTweets);
|
||||||
|
|
||||||
|
// Filter for anything created by us (retweet)
|
||||||
|
for (Iterator<Status> it = statuses.iterator(); it.hasNext();) {
|
||||||
|
// May need to switch to isRetweetByMe, not sure if
|
||||||
|
// We're using the right function (documentation is awful)
|
||||||
|
if (!it.next().isRetweet())
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
String type = AlertType.getValue(AlertType.ORGANIZATION);
|
||||||
|
pushToDatabase(statuses, type, ctx);
|
||||||
|
|
||||||
|
// List contains all valid alerts now
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch alerts from the University Twitter
|
||||||
|
*
|
||||||
|
* @param ctx
|
||||||
|
* - The Context for accessing the Internet
|
||||||
|
* @throws TwitterException
|
||||||
|
* - Throws an exception for misuse of Twitter API
|
||||||
|
*/
|
||||||
|
private void fetchUniversityAlerts(Context ctx) throws TwitterException {
|
||||||
|
// Process fetching university alerts
|
||||||
|
// Guaranteed to get `maxTweets` tweets
|
||||||
|
|
||||||
|
String handle = ctx.getString(R.string.university_handle);
|
||||||
|
TwitterClient tc = new TwitterClient();
|
||||||
|
List<Status> statuses = tc.fetchTweets(handle, maxTweets);
|
||||||
|
|
||||||
|
String type = AlertType.getValue(AlertType.UNIVERSITY);
|
||||||
|
pushToDatabase(statuses, type, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch gameday alerts.
|
||||||
|
*
|
||||||
|
* @param ctx
|
||||||
|
* the ctx
|
||||||
|
* @throws TwitterException
|
||||||
|
* the twitter exception
|
||||||
|
*/
|
||||||
|
private void fetchGamedayAlerts(Context ctx) throws TwitterException {
|
||||||
|
// Process fetching alerts generated by staff of UNCCGameDay
|
||||||
|
// Not guaranteed to get `maxTweets` tweets
|
||||||
|
|
||||||
|
String handle = ctx.getString(R.string.gameday_handle);
|
||||||
|
TwitterClient tc = new TwitterClient();
|
||||||
|
List<Status> statuses = tc.fetchTweets(handle, maxTweets);
|
||||||
|
|
||||||
|
// Filter out anything not from us
|
||||||
|
for (Iterator<Status> it = statuses.iterator(); it.hasNext();) {
|
||||||
|
// May need to switch to isRetweetByMe (documentation is awful)
|
||||||
|
if (it.next().isRetweet())
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
String type = AlertType.getValue(AlertType.GAMEDAY);
|
||||||
|
pushToDatabase(statuses, type, ctx);
|
||||||
|
|
||||||
|
// List contains all valid alerts now.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// takes list of statuses
|
||||||
|
// converts it to Alert object type
|
||||||
|
// and persists to database
|
||||||
|
public void pushToDatabase(List<Status> statuses, String type, Context ctx) {
|
||||||
|
GregorianCalendar todayDate = new GregorianCalendar();
|
||||||
|
long currentDate = todayDate.getTimeInMillis();
|
||||||
|
|
||||||
|
AlertDB db = new AlertDB(ctx);
|
||||||
|
|
||||||
|
for (int i = 0; i < statuses.size(); i++) {
|
||||||
|
Alert temp = new Alert(currentDate, statuses.get(i).getText(), 0,
|
||||||
|
type);
|
||||||
|
db.persist(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user