Split metadata into format and content metadata.
[sonitus.git] / src / main / java / net / pterodactylus / sonitus / io / OggVorbisIdentifier.java
index 769acf2..9d38452 100644 (file)
@@ -20,6 +20,8 @@ package net.pterodactylus.sonitus.io;
 import java.io.IOException;
 import java.io.InputStream;
 
+import net.pterodactylus.sonitus.data.ContentMetadata;
+import net.pterodactylus.sonitus.data.FormatMetadata;
 import net.pterodactylus.sonitus.data.Metadata;
 
 import com.google.common.base.Optional;
@@ -115,7 +117,40 @@ public class OggVorbisIdentifier {
                        buffer = syncState.data;
                }
 
-               return Optional.of(new Metadata(info.channels, info.rate, "Vorbis"));
+               FormatMetadata formatMetadata = new FormatMetadata(info.channels, info.rate, "Vorbis");
+               ContentMetadata contentMetadata = new ContentMetadata("");
+               for (int c = 0; c < comment.comments; ++c) {
+                       String field = comment.getComment(c);
+                       Optional<String> extractedField = extractField(field, "ARTIST");
+                       if (extractedField.isPresent()) {
+                               contentMetadata = contentMetadata.artist(extractedField.get());
+                               continue;
+                       }
+                       extractedField = extractField(field, "TITLE");
+                       if (extractedField.isPresent()) {
+                               contentMetadata = contentMetadata.name(extractedField.get());
+                               continue;
+                       }
+               }
+               return Optional.of(new Metadata(formatMetadata, contentMetadata));
+       }
+
+       /**
+        * Extracts the content of the field from the comment if the comment contains
+        * the given field.
+        *
+        * @param comment
+        *              The comment to extract the value from
+        * @param fieldName
+        *              The name of the field to extract
+        * @return The extracted field, or {@link Optional#absent()} if the comment
+        *         does not contain the given field
+        */
+       private static Optional<String> extractField(String comment, String fieldName) {
+               if (comment.startsWith(fieldName + "=")) {
+                       return Optional.of(comment.substring(fieldName.length() + 1));
+               }
+               return Optional.absent();
        }
 
 }