/** 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.data; import android.support.v4.app.Fragment; import org.json.JSONException; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.SortedMap; import java.util.TreeMap; import dk.dr.radio.diverse.App; import dk.dr.radio.diverse.Log; public class Kanal extends Lydkilde { private static final long serialVersionUID = 1L; public String kode; // P3 public static final String P4kode = "P4F"; public String navn; public transient int kanallogo_resid; public boolean p4underkanal; public transient ArrayList<Udsendelse> udsendelser = new ArrayList<Udsendelse>(); public transient SortedMap<String, ArrayList<Udsendelse>> udsendelserPerDag = new TreeMap<String, ArrayList<Udsendelse>>(); /** P1 har ingen senest spillet og der er aldrig playlister på denne kanal */ public boolean ingenPlaylister; @Override public String toString() { return kode;// + "/" + navn + "/" + logoUrl; } public boolean harUdsendelserForDag(String dato) { return udsendelserPerDag.containsKey(dato); } public void setUdsendelserForDag(ArrayList<Udsendelse> uliste, String dato) throws JSONException, ParseException { udsendelserPerDag.put(dato, uliste); udsendelser.clear(); for (ArrayList<Udsendelse> ul : udsendelserPerDag.values()) udsendelser.addAll(ul); } @Override public String getStreamsUrl() { return DRData.getKanalStreamsUrlFraSlug(slug); } @Override public Kanal getKanal() { return this; } @Override public boolean erDirekte() { return true; } /** Finder den aktuelle udsendelse på kanalen */ @Override public Udsendelse getUdsendelse() { if (udsendelser==null || udsendelser.size() == 0) return null; Date nu = new Date(App.serverCurrentTimeMillis()); // Kompenseret for forskelle mellem telefonens ur og serverens ur // Nicolai: "jeg løber listen igennem fra bunden og op, // og så finder jeg den første der har starttid >= nuværende tid + sluttid <= nuværende tid." for (int n = udsendelser.size() - 1; n >= 0; n--) { Udsendelse u = udsendelser.get(n); //Log.d(n + " " + nu.after(u.startTid) + u.slutTid.before(nu) + " " + u); if (u.startTid.before(nu)) { // && nu.before(u.slutTid)) { return u; } } Log.e(new IllegalStateException("Ingen aktuel udsendelse fundet!")); Log.d("nu = " + nu + " - " + nu.getTime() + " " + DRBackendTidsformater.servertidsformat.format(nu)); for (int n = 0; n < udsendelser.size(); n++) { Udsendelse u = udsendelser.get(n); Log.d(n + " " + u.startTid.before(nu) + nu.before(u.slutTid) + " " + u + " " + DRBackendTidsformater.servertidsformat.format(u.startTid) + " - " + DRBackendTidsformater.servertidsformat.format(u.slutTid)); } if (nu.before(udsendelser.get(0).slutTid)) return udsendelser.get(0); return null; } @Override public String getNavn() { return navn; } }