示例#1
0
  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()]);
  }
示例#2
0
  /**
   * 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;
  }