content: /*
   * Copyright (C) 2013 Adrian Ulrich <adrian@blinkenlights.ch>
   *
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation, either version 3 of the License, or
   * (at your option) any later version.
   *
   * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
   */
  
  
  package net.nullsum.audinaut.util.tags;
  
  import java.io.IOException;
  import java.io.RandomAccessFile;
  import java.util.HashMap;
  
  
  class Bastp {
  
      public Bastp() {
      }
  
      public HashMap getTags(String fname) {
          HashMap tags = new HashMap();
          try {
              RandomAccessFile ra = new RandomAccessFile(fname, "r");
              tags = getTags(ra);
              ra.close();
          } catch (Exception e) {
              /* we dont' care much: SOMETHING went wrong. d'oh! */
          }
  
          return tags;
      }
  
      private HashMap getTags(RandomAccessFile s) {
          HashMap tags = new HashMap();
          byte[] file_ff = new byte[4];
  
          try {
              s.read(file_ff);
              String magic = new String(file_ff);
              if (magic.equals("fLaC")) {
                  tags = (new FlacFile()).getTags(s);
              } else if (magic.equals("OggS")) {
                  tags = (new OggFile()).getTags(s);
              } else if (file_ff[0] == -1 && file_ff[1] == -5) { /* aka 0xfffb in real languages */
                  tags = (new LameHeader()).getTags(s);
              } else if (magic.substring(0, 3).equals("ID3")) {
                  tags = (new ID3v2File()).getTags(s);
                  if (tags.containsKey("_hdrlen")) {
                      Long hlen = Long.parseLong(tags.get("_hdrlen").toString(), 10);
                      HashMap lameInfo = (new LameHeader()).parseLameHeader(s, hlen);
                      /* add gain tags if not already present */
                      inheritTag("REPLAYGAIN_TRACK_GAIN", lameInfo, tags);
                      inheritTag("REPLAYGAIN_ALBUM_GAIN", lameInfo, tags);
                  }
              }
              tags.put("_magic", magic);
          } catch (IOException ignored) {
          }
          return tags;
      }
  
      private void inheritTag(String key, HashMap from, HashMap to) {
          if (!to.containsKey(key) && from.containsKey(key)) {
              to.put(key, from.get(key));
          }
      }
  
  }
  
  