package com.instructure.canvasapi.api; import android.content.Context; import com.instructure.canvasapi.model.CanvasContext; import com.instructure.canvasapi.model.HiddenStreamItem; import com.instructure.canvasapi.model.StreamItem; import com.instructure.canvasapi.utilities.APIHelpers; import com.instructure.canvasapi.utilities.CanvasCallback; import com.instructure.canvasapi.utilities.CanvasRestAdapter; import retrofit.Callback; import retrofit.RestAdapter; import retrofit.http.DELETE; import retrofit.http.Path; import retrofit.http.GET; import retrofit.http.Query; /** * * Copyright (c) 2014 Instructure. All rights reserved. */ public class StreamAPI extends BuildInterfaceAPI { interface StreamInterface { @GET("/users/self/activity_stream") void getUserStream(Callback<StreamItem[]> callback); @DELETE("/users/self/activity_stream/{streamID}") void hideStreamItem(@Path("streamID")long streamID, Callback<HiddenStreamItem> callback); @GET("/{context_id}/activity_stream") void getContextStream(@Path("context_id") long context_id, Callback<StreamItem[]> callback); @GET("/{next}") void getNextPageStream(@Path(value = "next", encode = false) String nextURL, Callback<StreamItem[]> callback); ///////////////////////////////////////////////////////////////////////////// // Synchronous ///////////////////////////////////////////////////////////////////////////// @GET("/users/self/activity_stream") StreamItem[] getUserStreamSynchronous(@Query("per_page") int number); } ///////////////////////////////////////////////////////////////////////// // API Calls ///////////////////////////////////////////////////////////////////////// public static void getFirstPageUserStream(CanvasCallback<StreamItem[]> callback) { if (APIHelpers.paramIsNull(callback)) { return; } buildCacheInterface(StreamInterface.class, callback, null).getUserStream(callback); buildInterface(StreamInterface.class, callback, null).getUserStream(callback); } public static void getFirstPageCourseStream(CanvasContext canvasContext, CanvasCallback<StreamItem[]> callback) { if (APIHelpers.paramIsNull(callback ,canvasContext)) { return; } buildCacheInterface(StreamInterface.class, callback, canvasContext).getContextStream(canvasContext.getId(), callback); buildInterface(StreamInterface.class, callback, canvasContext).getContextStream(canvasContext.getId(), callback); } public static void getNextPageStream(String nextUrl, CanvasCallback<StreamItem[]> callback) { if (APIHelpers.paramIsNull(callback, nextUrl)) { return; } callback.setIsNextPage(true); buildCacheInterface(StreamInterface.class, callback, false).getNextPageStream(nextUrl, callback); buildInterface(StreamInterface.class, callback, false).getNextPageStream(nextUrl, callback); } public static void hideStreamItem(long streamId, final CanvasCallback<HiddenStreamItem> callback) { if (APIHelpers.paramIsNull(callback)) { return; } buildInterface(StreamInterface.class, callback, null).hideStreamItem(streamId,callback); } ///////////////////////////////////////////////////////////////////////////// // Synchronous // // If Retrofit is unable to parse (no network for example) Synchronous calls // will throw a nullPointer exception. All synchronous calls need to be in a // try catch block. ///////////////////////////////////////////////////////////////////////////// public static StreamItem[] getUserStreamSynchronous(Context context, int numberToReturn) { try { RestAdapter restAdapter = CanvasRestAdapter.buildAdapter(context); return restAdapter.create(StreamInterface.class).getUserStreamSynchronous(numberToReturn); } catch (Exception E){ return null; } } }