Skip to content

Commit

Permalink
Better implementation.
Browse files Browse the repository at this point in the history
  • Loading branch information
toots committed Dec 14, 2023
1 parent 91eb588 commit 3c5b2f5
Showing 1 changed file with 29 additions and 35 deletions.
64 changes: 29 additions & 35 deletions src/metadataID3v2.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 3c5b2f5

Please sign in to comment.