diff --git a/src/metadataID3v2.ml b/src/metadataID3v2.ml index 76cef03..040d2a6 100644 --- a/src/metadataID3v2.ml +++ b/src/metadataID3v2.ml @@ -147,41 +147,35 @@ let parse ?recode f : metadata = raise Exit); let tag = R.read_tag ~label:id ~length:size f in len := !len - (size + 10); - match tag with - | None -> () - | Some data -> - let len = String.length data in - if List.mem id ["SEEK"] then () - else if id = "TXXX" then ( - let encoding = int_of_char data.[0] in - let data = String.sub data 1 (len - 1) in - let recode = recode encoding in - let id, data = - let n = next_substring encoding data in - ( String.sub data 0 n, - String.sub data n (String.length data - n) ) - in - let id = recode id in - let data = recode data in - tags := (id, data) :: !tags) - else if id = "COMM" then ( - let encoding = int_of_char data.[0] in - let recode = recode encoding in - let data = String.sub data 1 (len - 1) in - (* We ignore the language description of the comment. *) - let n = - try next_substring encoding data with Not_found -> 0 - in - let data = - String.sub data n (String.length data - n) |> recode - in - tags := ("comment", data) :: !tags) - else if id.[0] = 'T' then ( - let encoding = int_of_char data.[0] in - let recode = recode encoding in - let data = String.sub data 1 (len - 1) |> recode in - tags := (normalize_id id, data) :: !tags) - else tags := (normalize_id id, data) :: !tags) + if tag = None then raise Exit; + let data = Option.get tag in + let len = String.length data in + if List.mem id ["SEEK"] then () + else if id = "TXXX" then ( + let encoding = int_of_char data.[0] in + let data = String.sub data 1 (len - 1) in + let recode = recode encoding in + let id, data = + let n = next_substring encoding data in + (String.sub data 0 n, String.sub data n (String.length data - n)) + in + let id = recode id in + let data = recode data in + tags := (id, data) :: !tags) + else if id = "COMM" then ( + let encoding = int_of_char data.[0] in + let recode = recode encoding in + let data = String.sub data 1 (len - 1) in + (* We ignore the language description of the comment. *) + let n = try next_substring encoding data with Not_found -> 0 in + let data = String.sub data n (String.length data - n) |> recode in + tags := ("comment", data) :: !tags) + else if id.[0] = 'T' then ( + let encoding = int_of_char data.[0] in + let recode = recode encoding in + let data = String.sub data 1 (len - 1) |> recode in + tags := (normalize_id id, data) :: !tags) + else tags := (normalize_id id, data) :: !tags) with Exit -> () done; List.rev !tags