/** DR Radio 2 is developed by Jacob Nordfalk, Hanafi Mughrabi and Frederik Aagaard. Some parts of the code are loosely based on Sveriges Radio Play for Android. DR Radio 2 for Android is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. DR Radio 2 for Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with DR Radio 2 for Android. If not, see <http://www.gnu.org/licenses/>. */ package dk.dr.radio.net; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; import dk.dr.radio.diverse.Log; public class Diverse { /** * Tjek for om vi er på et netværk der kræver login eller lignende. * Se 'Handling Network Sign-On' i http://developer.android.com/reference/java/net/HttpHttpURLConnection.html */ private static void tjekOmdirigering(URL u, HttpURLConnection urlConnection) throws IOException { URL u2 = urlConnection.getURL(); if (!u.getHost().equals(u2.getHost())) { // Vi blev omdirigeret Log.d("tjekOmdirigering " + u); Log.d("tjekOmdirigering " + u2); //Log.rapporterFejl(omdirigeringsfejl); throw new UnknownHostException("Der blev omdirigeret fra " + u.getHost() + " til " + u2.getHost()); } } public static String læsStreng(InputStream is) throws IOException, UnsupportedEncodingException { // Det kan være nødvendigt at hoppe over BOM mark - se http://android.forums.wordpress.org/topic/xml-pull-error?replies=2 //is.read(); is.read(); is.read(); // - dette virker kun hvis der ALTID er en BOM // Hop over BOM - hvis den er der! is = new BufferedInputStream(is); // bl.a. FileInputStream understøtter ikke mark, så brug BufferedInputStream is.mark(1); // vi har faktisk kun brug for at søge én byte tilbage if (is.read() == 0xef) { is.read(); is.read(); } // Der var en BOM! Læs de sidste 2 byte else is.reset(); // Der var ingen BOM - hop tilbage til start final char[] buffer = new char[0x3000]; StringBuilder out = new StringBuilder(); Reader in = new InputStreamReader(is, "UTF-8"); int read; do { read = in.read(buffer, 0, buffer.length); if (read > 0) { out.append(buffer, 0, read); } } while (read >= 0); in.close(); return out.toString(); } public static ArrayList<String> jsonArrayTilArrayListString(JSONArray j) throws JSONException { int n = j.length(); ArrayList<String> res = new ArrayList<String>(n); for (int i = 0; i < n; i++) { res.add(j.getString(i)); } return res; } public static String hentUrlSomStreng(String url) throws IOException { Log.d("hentUrlSomStreng lgd=" + url.length() + " " + url); URL u = new URL(url); HttpURLConnection urlConnection = (HttpURLConnection) u.openConnection(); urlConnection.setConnectTimeout(15000); urlConnection.setReadTimeout(90 * 1000); // 1 1/2 minut urlConnection.connect(); // http://stackoverflow.com/questions/8179658/urlconnection-getcontent-return-null InputStream is = urlConnection.getInputStream(); Log.d("åbnGETURLConnection url.length()=" + url.length() + " is=" + is + " is.available()=" + is.available()); if (urlConnection.getResponseCode() != 200) throw new IOException("HTTP-svar var " + urlConnection.getResponseCode() + " " + urlConnection.getResponseMessage() + " for " + u); tjekOmdirigering(u, urlConnection); return læsStreng(is); } public static JSONObject postJson(String url, String data) throws IOException, JSONException { //Log.d("postJson " + url+" med data="+data); URL u = new URL(url); HttpURLConnection urlConnection = (HttpURLConnection) u.openConnection(); urlConnection.setConnectTimeout(15000); urlConnection.setReadTimeout(90 * 1000); // 1 1/2 minut urlConnection.setRequestProperty("Content-Type", "application/json"); urlConnection.setDoOutput(true); urlConnection.connect(); // http://stackoverflow.com/questions/8179658/urlconnection-getcontent-return-null OutputStream os = urlConnection.getOutputStream(); os.write(data.getBytes()); os.close(); InputStream is = urlConnection.getInputStream(); if (urlConnection.getResponseCode() != 200) throw new IOException("HTTP-svar var " + urlConnection.getResponseCode() + " " + urlConnection.getResponseMessage() + " for " + u); tjekOmdirigering(u, urlConnection); return new JSONObject(læsStreng(is)); } public static int sletFilerÆldreEnd(File mappe, long tidsstempel) { int antalByteDerBlevSlettet = 0; int antalFilerDerBlevSlettet = 0; File[] files = mappe.listFiles(); if (files != null) { for (File file : files) { if (file.lastModified() < tidsstempel) { antalByteDerBlevSlettet += file.length(); antalFilerDerBlevSlettet++; file.delete(); } } } Log.d("sletFilerÆldreEnd: " + mappe.getName() + ": " + antalFilerDerBlevSlettet + " filer blev slettet, og " + antalByteDerBlevSlettet / 1000 + " kb frigivet"); return antalByteDerBlevSlettet; } }