/*
* ServeStream: A HTTP stream browser/player for Android
* Copyright 2013 William Seemann
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package pontezit.android.tilos.com.media;
import flexjson.JSONDeserializer;
import pontezit.android.tilos.com.R;
import pontezit.android.tilos.com.modell.Episode;
import pontezit.android.tilos.com.modell.Show;
import pontezit.android.tilos.com.provider.Media;
import pontezit.android.tilos.com.utils.ArchiveUrl;
import pontezit.android.tilos.com.utils.Finals;
import pontezit.android.tilos.com.utils.LogHelper;
import pontezit.android.tilos.com.utils.PreferenceConstants;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.util.Log;
import android.util.SparseArray;
import com.androidquery.AQuery;
import com.androidquery.callback.AjaxCallback;
import com.androidquery.callback.AjaxStatus;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
public class MetadataRetriever{
private boolean mIsCancelled;
private Context mContext = null;
private String path;
private Metadata metadata;
private MetadataRetrieverListener mListener;
private AQuery aq;
public boolean finished = true;
public MetadataRetriever(Context context, String path) {
mIsCancelled = false;
this.path = path;
mContext = context;
// Verify that the host activity implements the callback interface
try {
// Instantiate the MetadataRetrieverListener so we can send events to the host
mListener = (MetadataRetrieverListener) context;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(context.toString()
+ " must implement MetadataRetrieverListener");
}
}
public void getMetadata(){
LogHelper.Log("MetadataRetriever; getMetadata run", 1);
metadata = new Metadata();
mListener.onMetadataParsed(metadata);
aq = new AQuery(mContext);
finished = false;
int before = (int) getCurrentPlayUnixTime()-(60*60*4);
String url = Finals.API_BASE_URL + "episode?start=" + before;
aq.ajax(url, String.class, new AjaxCallback<String>(){
@Override
public void callback(String url, String episodesString, AjaxStatus status){
LogHelper.Log("MetadataRetriever; ajaxQuery callback", 1);
if(episodesString != null){
ArrayList<Episode> episodeList = new JSONDeserializer<ArrayList<Episode>>().use(null, ArrayList.class)
.use("values", Episode.class)
.use("values.show", Show.class)
.deserialize(episodesString);
try{
long unixTime = getCurrentPlayUnixTime();
for(Episode episode : episodeList){
LogHelper.Log(episode.getPlannedFrom() + "<" + unixTime + ";" + episode.getPlannedTo() + ">" + unixTime + ", " + episode.getShow().getName(), 3);
if(episode.getPlannedFrom() < unixTime && episode.getPlannedTo() >= unixTime){
if(path == Finals.getLiveHiUrl()){
LogHelper.Log("MetadataRetriever; ajaxQuery callback; live tree", 1);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
String from = dateFormat.format(episode.getPlannedFromDate());
String to = dateFormat.format(episode.getPlannedToDate());
metadata.setLive(true);
metadata.setReadableTime(from + " - " + to);
metadata.setShowName(episode.getShow().getName());
mListener.onMetadataParsed(metadata);
}else{
LogHelper.Log("MetadataRetriever; ajaxQuery callback; archive tree", 1);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String from = dateFormat.format(getCurrentPlayUnixTime()*1000);
metadata.setLive(false);
metadata.setReadableTime(from);
metadata.setShowName(episode.getShow().getName());
mListener.onMetadataParsed(metadata);
}
}
}
}catch(NullPointerException e){
LogHelper.Log("adásinfo failure; NullpointerException", 1);
}
}else{
LogHelper.Log("adásinfo failure", 1);
}
finished = true;
}
});
return;
}
public long getCurrentPlayUnixTime(){
long unixTime;
LogHelper.Log("MetadataRetriever; getCurrentPlayUnixTime;");
if(path != Finals.getLiveHiUrl()){
unixTime = ArchiveUrl.parseUrlToDate(path).getTime()/1000L;
unixTime += 12L;
}else{
unixTime = System.currentTimeMillis() / 1000L;
}
return unixTime;
}
public void stopRetriever(){
aq.ajaxCancel();
}
}