mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Initial decouple of feed story sync from sync service. Buggy.
This commit is contained in:
parent
e84428a58a
commit
7367d9cad0
8 changed files with 69 additions and 54 deletions
|
@ -22,6 +22,7 @@ import com.newsblur.fragment.SyncUpdateFragment;
|
|||
import com.newsblur.network.APIManager;
|
||||
import com.newsblur.network.MarkFeedAsReadTask;
|
||||
import com.newsblur.service.SyncService;
|
||||
import com.newsblur.util.FeedUtils;
|
||||
import com.newsblur.util.PrefsUtils;
|
||||
import com.newsblur.util.ReadFilter;
|
||||
import com.newsblur.util.StoryOrder;
|
||||
|
@ -122,14 +123,7 @@ public class FeedItemsList extends ItemsList {
|
|||
public void triggerRefresh(int page) {
|
||||
if (!stopLoading) {
|
||||
setSupportProgressBarIndeterminateVisibility(true);
|
||||
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, SyncService.class);
|
||||
intent.putExtra(SyncService.EXTRA_STATUS_RECEIVER, syncFragment.receiver);
|
||||
intent.putExtra(SyncService.EXTRA_TASK_TYPE, SyncService.TaskType.FEED_UPDATE);
|
||||
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
|
||||
intent.putExtra(SyncService.EXTRA_TASK_FEED_ID, feedId);
|
||||
intent.putExtra(SyncService.EXTRA_TASK_ORDER, getStoryOrder());
|
||||
intent.putExtra(SyncService.EXTRA_TASK_READ_FILTER, PrefsUtils.getReadFilterForFeed(this, feedId));
|
||||
startService(intent);
|
||||
FeedUtils.updateFeed(this, this, feedId, page, getStoryOrder(), PrefsUtils.getReadFilterForFeed(this, feedId));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,16 +56,7 @@ public class FeedReading extends Reading {
|
|||
@Override
|
||||
public void triggerRefresh(int page) {
|
||||
updateSyncStatus(true);
|
||||
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, SyncService.class);
|
||||
intent.putExtra(SyncService.EXTRA_STATUS_RECEIVER, syncFragment.receiver);
|
||||
intent.putExtra(SyncService.EXTRA_TASK_TYPE, SyncService.TaskType.FEED_UPDATE);
|
||||
intent.putExtra(SyncService.EXTRA_TASK_FEED_ID, feedId);
|
||||
if (page > 1) {
|
||||
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
|
||||
}
|
||||
intent.putExtra(SyncService.EXTRA_TASK_ORDER, PrefsUtils.getStoryOrderForFeed(this, feedId));
|
||||
intent.putExtra(SyncService.EXTRA_TASK_READ_FILTER, PrefsUtils.getReadFilterForFeed(this, feedId));
|
||||
startService(intent);
|
||||
FeedUtils.updateFeed(this, this, feedId, page, PrefsUtils.getStoryOrderForFeed(this, feedId), PrefsUtils.getReadFilterForFeed(this, feedId));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,13 +13,15 @@ import com.newsblur.fragment.ItemListFragment;
|
|||
import com.newsblur.fragment.ReadFilterDialogFragment;
|
||||
import com.newsblur.fragment.StoryOrderDialogFragment;
|
||||
import com.newsblur.fragment.SyncUpdateFragment;
|
||||
import com.newsblur.util.FeedUtils;
|
||||
import com.newsblur.util.FeedUtils.ActionCompletionListener;
|
||||
import com.newsblur.util.ReadFilter;
|
||||
import com.newsblur.util.ReadFilterChangedListener;
|
||||
import com.newsblur.util.StoryOrder;
|
||||
import com.newsblur.util.StoryOrderChangedListener;
|
||||
import com.newsblur.view.StateToggleButton.StateChangedListener;
|
||||
|
||||
public abstract class ItemsList extends NbFragmentActivity implements SyncUpdateFragment.SyncUpdateFragmentInterface, StateChangedListener, StoryOrderChangedListener, ReadFilterChangedListener {
|
||||
public abstract class ItemsList extends NbFragmentActivity implements SyncUpdateFragment.SyncUpdateFragmentInterface, ActionCompletionListener, StateChangedListener, StoryOrderChangedListener, ReadFilterChangedListener {
|
||||
|
||||
public static final String EXTRA_STATE = "currentIntelligenceState";
|
||||
public static final String EXTRA_BLURBLOG_USERNAME = "blurblogName";
|
||||
|
@ -120,6 +122,17 @@ public abstract class ItemsList extends NbFragmentActivity implements SyncUpdate
|
|||
stopLoading = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionCompleteCallback(boolean noMoreData) {
|
||||
if (itemListFragment != null) {
|
||||
itemListFragment.hasUpdated();
|
||||
}
|
||||
setSupportProgressBarIndeterminateVisibility(false);
|
||||
if (noMoreData) {
|
||||
stopLoading = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changedState(int state) {
|
||||
itemListFragment.changeState(state);
|
||||
|
|
|
@ -219,11 +219,24 @@ public abstract class Reading extends NbFragmentActivity implements OnPageChange
|
|||
}
|
||||
|
||||
@Override
|
||||
public void actionCompleteCallback() {
|
||||
stories.requery();
|
||||
public void actionCompleteCallback(boolean noMoreData) {
|
||||
this.requestedPage = false;
|
||||
updateSyncStatus(false);
|
||||
if (noMoreData) {
|
||||
this.noMoreApiPages = true;
|
||||
}
|
||||
stories.requery();
|
||||
readingAdapter.notifyDataSetChanged();
|
||||
this.enableOverlays();
|
||||
checkStoryCount(pager.getCurrentItem());
|
||||
if (this.unreadSearchLatch != null) {
|
||||
this.unreadSearchLatch.countDown();
|
||||
}
|
||||
ReadingItemFragment fragment = getReadingFragment();
|
||||
fragment.updateStory(readingAdapter.getStory(pager.getCurrentItem()));
|
||||
fragment.updateSaveButton();
|
||||
if (fragment != null ) {
|
||||
fragment.updateStory(readingAdapter.getStory(pager.getCurrentItem()));
|
||||
fragment.updateSaveButton();
|
||||
}
|
||||
}
|
||||
|
||||
// interface OnPageChangeListener
|
||||
|
|
|
@ -191,7 +191,9 @@ public class ReadingItemFragment extends Fragment implements ClassifierDialogFra
|
|||
}
|
||||
|
||||
public void updateStory(Story story) {
|
||||
this.story = story;
|
||||
if (story != null ) {
|
||||
this.story = story;
|
||||
}
|
||||
}
|
||||
|
||||
private void setupShareButton() {
|
||||
|
|
|
@ -193,25 +193,24 @@ public class APIManager {
|
|||
}
|
||||
}
|
||||
|
||||
public StoriesResponse getStoriesForFeed(String feedId, String pageNumber, StoryOrder order, ReadFilter filter) {
|
||||
public StoriesResponse getStoriesForFeed(String feedId, int pageNumber, StoryOrder order, ReadFilter filter) {
|
||||
final ContentValues values = new ContentValues();
|
||||
Uri feedUri = Uri.parse(APIConstants.URL_FEED_STORIES).buildUpon().appendPath(feedId).build();
|
||||
values.put(APIConstants.PARAMETER_FEEDS, feedId);
|
||||
values.put(APIConstants.PARAMETER_PAGE_NUMBER, pageNumber);
|
||||
values.put(APIConstants.PARAMETER_PAGE_NUMBER, Integer.toString(pageNumber));
|
||||
values.put(APIConstants.PARAMETER_ORDER, order.getParameterValue());
|
||||
values.put(APIConstants.PARAMETER_READ_FILTER, filter.getParameterValue());
|
||||
|
||||
final APIResponse response = get(feedUri.toString(), values);
|
||||
Uri storyUri = FeedProvider.FEED_STORIES_URI.buildUpon().appendPath(feedId).build();
|
||||
APIResponse response = get(feedUri.toString(), values);
|
||||
StoriesResponse storiesResponse = (StoriesResponse) response.getResponse(gson, StoriesResponse.class);
|
||||
|
||||
if (!response.isError()) {
|
||||
if (TextUtils.equals(pageNumber, "1")) {
|
||||
contentResolver.delete(storyUri, null, null);
|
||||
}
|
||||
StoriesResponse storiesResponse = (StoriesResponse) response.getResponse(gson, StoriesResponse.class);
|
||||
|
||||
Uri storyUri = FeedProvider.FEED_STORIES_URI.buildUpon().appendPath(feedId).build();
|
||||
Uri classifierUri = FeedProvider.CLASSIFIER_URI.buildUpon().appendPath(feedId).build();
|
||||
|
||||
if (pageNumber == 1) {
|
||||
contentResolver.delete(storyUri, null, null);
|
||||
}
|
||||
contentResolver.delete(classifierUri, null, null);
|
||||
|
||||
for (ContentValues classifierValues : storiesResponse.classifiers.getContentValues()) {
|
||||
|
@ -226,11 +225,8 @@ public class APIManager {
|
|||
for (UserProfile user : storiesResponse.users) {
|
||||
contentResolver.insert(FeedProvider.USERS_URI, user.getValues());
|
||||
}
|
||||
|
||||
return storiesResponse;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return storiesResponse;
|
||||
}
|
||||
|
||||
public StoriesResponse getStoriesForFeeds(String[] feedIds, String pageNumber, StoryOrder order, ReadFilter filter) {
|
||||
|
|
|
@ -57,7 +57,6 @@ public class SyncService extends IntentService {
|
|||
public enum TaskType {
|
||||
FOLDER_UPDATE_TWO_STEP,
|
||||
FOLDER_UPDATE_WITH_COUNT,
|
||||
FEED_UPDATE,
|
||||
SOCIALFEED_UPDATE,
|
||||
MULTIFEED_UPDATE,
|
||||
MULTISOCIALFEED_UPDATE,
|
||||
|
@ -110,17 +109,6 @@ public class SyncService extends IntentService {
|
|||
apiManager.getFolderFeedMapping(true);
|
||||
break;
|
||||
|
||||
case FEED_UPDATE:
|
||||
if (!TextUtils.isEmpty(intent.getStringExtra(EXTRA_TASK_FEED_ID))) {
|
||||
StoriesResponse storiesForFeed = apiManager.getStoriesForFeed(intent.getStringExtra(EXTRA_TASK_FEED_ID), intent.getStringExtra(EXTRA_TASK_PAGE_NUMBER), (StoryOrder) intent.getSerializableExtra(EXTRA_TASK_ORDER), (ReadFilter) intent.getSerializableExtra(EXTRA_TASK_READ_FILTER));
|
||||
if (storiesForFeed == null || storiesForFeed.stories.length == 0) {
|
||||
resultStatus = SyncStatus.STATUS_NO_MORE_UPDATES;
|
||||
}
|
||||
} else {
|
||||
Log.e(this.getClass().getName(), "No feed to refresh included in SyncRequest");
|
||||
}
|
||||
break;
|
||||
|
||||
case MULTIFEED_UPDATE:
|
||||
if (intent.getStringArrayExtra(EXTRA_TASK_MULTIFEED_IDS) != null) {
|
||||
StoriesResponse storiesForFeeds = apiManager.getStoriesForFeeds(intent.getStringArrayExtra(EXTRA_TASK_MULTIFEED_IDS), intent.getStringExtra(EXTRA_TASK_PAGE_NUMBER), (StoryOrder) intent.getSerializableExtra(EXTRA_TASK_ORDER), (ReadFilter) intent.getSerializableExtra(EXTRA_TASK_READ_FILTER));
|
||||
|
|
|
@ -20,7 +20,6 @@ import android.text.TextUtils;
|
|||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.newsblur.R;
|
||||
import com.newsblur.database.DatabaseConstants;
|
||||
import com.newsblur.database.FeedProvider;
|
||||
|
@ -31,12 +30,31 @@ import com.newsblur.domain.Story;
|
|||
import com.newsblur.domain.ValueMultimap;
|
||||
import com.newsblur.network.APIManager;
|
||||
import com.newsblur.network.domain.NewsBlurResponse;
|
||||
import com.newsblur.network.domain.StoriesResponse;
|
||||
import com.newsblur.service.SyncService;
|
||||
import com.newsblur.util.AppConstants;
|
||||
|
||||
public class FeedUtils {
|
||||
|
||||
private static Gson gson = new Gson();
|
||||
public static void updateFeed(final Context context, final ActionCompletionListener receiver, final String feedId, final int pageNumber, final StoryOrder order, final ReadFilter filter) {
|
||||
new AsyncTask<Void, Void, StoriesResponse>() {
|
||||
@Override
|
||||
protected StoriesResponse doInBackground(Void... arg) {
|
||||
APIManager apiManager = new APIManager(context);
|
||||
return apiManager.getStoriesForFeed(feedId, pageNumber, order, filter);
|
||||
}
|
||||
@Override
|
||||
protected void onPostExecute(StoriesResponse result) {
|
||||
if (result.isError()) {
|
||||
// TODO: we have always silently ignored feed fetch errors, but probably shouldn't
|
||||
return;
|
||||
}
|
||||
if (receiver != null) {
|
||||
receiver.actionCompleteCallback(result.stories.length == 0);
|
||||
}
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
private static void setStorySaved(final Story story, final boolean saved, final Context context, final APIManager apiManager, final ActionCompletionListener receiver) {
|
||||
new AsyncTask<Void, Void, NewsBlurResponse>() {
|
||||
|
@ -62,7 +80,7 @@ public class FeedUtils {
|
|||
}
|
||||
|
||||
if (receiver != null) {
|
||||
receiver.actionCompleteCallback();
|
||||
receiver.actionCompleteCallback(false);
|
||||
}
|
||||
}
|
||||
}.execute();
|
||||
|
@ -291,6 +309,6 @@ public class FeedUtils {
|
|||
* as a result.
|
||||
*/
|
||||
public interface ActionCompletionListener {
|
||||
public abstract void actionCompleteCallback();
|
||||
public abstract void actionCompleteCallback(boolean noMoreData);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue