public XMCD[] getDiscInformation(AudioFile[] audioFiles) throws Exception { /* Vorbereiten: */ ArrayList<XMCD> xmcds = new ArrayList<XMCD>(); if (audioFiles.length > 0) { /* DiscInfo genereieren: */ DiscInfo discInfo = DiscInfo.generateDiscInfo(audioFiles); /* CDDB Query: */ // Per Query nach zur DiscInfo passenden EintrŠgen in der CDDB // suchen. QueryResult[] queryResults = query(discInfo); /* CDDB Read: */ // Ermittelte QueryResults verwenden, um per Read nŠhere Informationen // zu holen. for (QueryResult q : queryResults) { XMCD buf = read(q); if (buf != null) xmcds.add(buf); } } /* RŸckgabe: */ return xmcds.toArray(new XMCD[xmcds.size()]); }
/** * FŸhrt mit einer {@link DiscInfo}-Instanz das Query-Kommando auf der CDDB- Datenbank aus.<br> * Das Query-Kommando liefert <em>0-n</em> Resultate welche jeweils Informationen zur * Disc-Kategorie, DiscID sowie Disc-Titel ([Artist] / [Album]) enthalten. Diese Informationen * kšnnen anschliessend fŸr das Read-Kommando verwendet werden, um genauere Informationen fŸr eine * Disc/ein Album abzufragen.<br> * <br> * Genau diese Infromationen werden in einem {@link QueryResult}-Array zurŸckgegeben.<br> * Wurde nichts gefunden, wird ein leeres Array zurŸckgegeben. * * @return QueryResult[] * @see DiscInfo * @see QueryResult * @see #COMMAND_QUERY * @see #callCDDBServer(String, String) * @see #read(String, String) */ private QueryResult[] query(DiscInfo discInfo) throws Exception { /* Vorbereiten: */ QueryResult[] queryResult = new QueryResult[0]; /* Query-Kommando zusammenstellen: */ int[] frames = discInfo.getFrames(); StringBuilder command = new StringBuilder(); command.append(COMMAND_QUERY + " "); command.append(discInfo.getDiscId() + " "); command.append(discInfo.getTracks() + " "); for (int i = 0, l = frames.length - 1; i < l; i++) command.append(Integer.toString(frames[i]) + " "); command.append(Integer.toString(discInfo.getTotalLength())); /* CDDB-Server aufrufen: */ String[] resultLines = callCDDBServer(cddbHttpServerUrl, command.toString()); /* Resultat parsen: */ if (resultLines.length > 0) { // Erste Zeile enthŠlt Statuscode zu Beginn: if (resultLines[0].startsWith("200")) { // Genau ein Resultat gefunden: queryResult = new QueryResult[1]; queryResult[0] = QueryResult.parseQueryResult(resultLines[1]); } else if (resultLines[0].startsWith("211")) { // Mehrere Resultate gefunden: queryResult = new QueryResult [resultLines.length - 2]; // -2 = minus Statuszeile minus Termination Zeile for (int i = 1, l = resultLines.length - 1; i < l; i++) { queryResult[i - 1] = QueryResult.parseQueryResult(resultLines[i]); } } else { // TODO error oder nichts gefunden } } /* RŸckgabe: */ return queryResult; }