package net.ggelardi.flucso.serv;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import retrofit.RetrofitError;
import retrofit.client.Response;
import retrofit.mime.TypedByteArray;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.util.Patterns;
import com.squareup.picasso.Picasso;
public class Commons {
// we better don't tell FF and other sites we are a phone, if we want to receive all images as supposed:
public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0";
public static class PK {
public static final String USERNAME = "Username";
public static final String REMOTEKEY = "RemoteKey";
public static final String STARTUP = "pk_startup";
public static final String LOCALE = "pk_locale";
public static final String PROXY_USED = "pk_proxy_active";
public static final String PROXY_HOST = "pk_proxy_host";
public static final String PROXY_PORT = "pk_proxy_port";
public static final String PROF_INFO = "pk_prof_info";
public static final String PROF_LIST = "pk_prof_list";
public static final String FEED_UPD = "pk_feed_upd";
public static final String FEED_FOF = "pk_feed_fof";
public static final String FEED_HID = "pk_feed_hid";
public static final String FEED_ELC = "pk_feed_elc";
public static final String FEED_HBK = "pk_feed_hbk";
public static final String FEED_HBF = "pk_feed_hbf";
public static final String FEED_SPO = "pk_feed_spo";
public static final String ENTR_IMCO = "pk_entry_imco";
public static final String SERV_PROF = "pk_serv_prof";
public static final String SERV_NOTF = "pk_serv_notf";
public static final String SERV_MSGS = "pk_serv_msgs";
public static final String SERV_MSGS_TIME = "pk_serv_msgs_time";
public static final String SERV_MSGS_CURS = "pk_serv_msgs_cursor";
}
public static ArrayList<String> bFeeds = new ArrayList<String>();
public static ArrayList<String> bWords = new ArrayList<String>();
public static boolean bSpoilers = false;
public static boolean isConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
return ni != null && ni.isConnectedOrConnecting();
}
public static boolean isOnWIFI(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
return ni != null && ni.isConnectedOrConnecting() && ni.getType() == ConnectivityManager.TYPE_WIFI;
}
public static Picasso picasso(Context ctx) {
/*
* FOR DEBUG ONLY!
*
Picasso.Builder builder = new Picasso.Builder(ctx);
builder.downloader(new UrlConnectionDownloader(ctx) {
@Override
protected HttpURLConnection openConnection(Uri uri) throws IOException {
HttpURLConnection connection = super.openConnection(uri);
connection.setRequestProperty("User-Agent", USER_AGENT);
return connection;
}
});
builder.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception error) {
Log.v("picasso", error.getLocalizedMessage() + " -- " + uri.toString());
}});
return builder.build();
*/
return Picasso.with(ctx);
}
public static long convertTime(long timestamp, String fromTimeZone, String toTimeZone) {
Calendar fromCal = new GregorianCalendar(TimeZone.getTimeZone(fromTimeZone));
fromCal.setTimeInMillis(timestamp);
Calendar toCal = new GregorianCalendar(TimeZone.getTimeZone(toTimeZone));
toCal.setTimeInMillis(fromCal.getTimeInMillis());
return toCal.getTimeInMillis();
}
public static int retrofitErrorCode(RetrofitError error) {
Response r = error.getResponse();
if (r != null)
return r.getStatus();
return -1;
}
public static String retrofitErrorText(RetrofitError error) {
String msg;
Response r = error.getResponse();
if (r != null) {
if (r.getBody() instanceof TypedByteArray) {
TypedByteArray b = (TypedByteArray) r.getBody();
msg = new String(b.getBytes());
} else
msg = r.getReason();
} else
msg = error.getLocalizedMessage();
if (msg == null && error.getCause() != null) {
msg = error.getCause().getLocalizedMessage();
if (msg == null)
msg = error.getCause().getClass().getName();
}
Log.v("RPC", msg);
Log.v("RPC", error.getUrl());
return msg;
}
public static String firstUrl(String text) {
if (!TextUtils.isEmpty(text))
for (String s : text.split("\\s+"))
if (Patterns.WEB_URL.matcher(s).matches())
return s;
return null;
}
public static String firstImage(String text) {
if (!TextUtils.isEmpty(text)) {
String chk;
String[] words = text.split("\\s+");
for (String s : words)
if (Patterns.WEB_URL.matcher(s).matches()) {
if (YouTube.isVideoUrl(s))
return YouTube.getPreview(s);
chk = s.toLowerCase(Locale.getDefault());
if (chk.indexOf("/m.friendfeed-media.com/") > 0 || (chk.endsWith(".jpg") || chk.endsWith(".jpeg") ||
chk.endsWith(".png") || chk.endsWith(".gif")))
return s;
}
}
return null;
}
public static class YouTube {
public static boolean isVideoUrl(String url) {
return url.contains("www.youtube.com") || url.contains("://youtu.be/");
}
public static String getId(String url) {
if (url.startsWith("http://youtu.be/"))
return url.substring(16);
if (url.startsWith("https://youtu.be/"))
return url.substring(17);
if (url.contains("www.youtube.com/watch"))
return Uri.parse(url).getQueryParameter("v");
if (url.contains("www.youtube.com/v/")) {
String id = Uri.parse(url).getLastPathSegment();
return id.contains("&") ? id.substring(0, id.indexOf("&")) : id;
}
return null;
}
public static String getPreview(String url) {
String id = getId(url);
if (id != null)
return "http://img.youtube.com/vi/" + id + "/0.jpg";
return null;
}
public static String getFriendlyUrl(String url) {
return !isVideoUrl(url) ? url : "http://www.youtube.com/watch?v=" + getId(url);
}
}
}