Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
metadata.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
module CharEncoding = MetadataCharEncoding module Make (E : CharEncoding.T) = struct include MetadataBase module ID3v1 = MetadataID3v1 module ID3v2 = MetadataID3v2 module OGG = MetadataOGG module JPEG = MetadataJPEG module PNG = MetadataPNG module AVI = MetadataAVI module MP4 = MetadataMP4 let recode = E.convert module ID3 = struct let parse f = let failure, v2 = try (false, ID3v2.parse ~recode f) with _ -> (true, []) in let v1 = try Reader.reset f; ID3v1.parse ~recode f with _ -> if failure then raise Invalid else [] in v2 @ v1 let parse_file = Reader.with_file parse end (** Return the first application which does not raise invalid. *) let rec first_valid l file = match l with | f :: l -> ( try f file with Invalid -> Reader.reset file; first_valid l file) | [] -> raise Invalid module Audio = struct let parsers = [ID3.parse; OGG.parse] let parse = first_valid parsers let parse_file = Reader.with_file parse end module Image = struct let parsers = [JPEG.parse; PNG.parse] let parse = first_valid parsers let parse_file = Reader.with_file parse end module Video = struct let parsers = [AVI.parse; MP4.parse] let parse = first_valid parsers let parse_file = Reader.with_file parse end module Any = struct let parsers = Audio.parsers @ Image.parsers @ Video.parsers let parse = first_valid parsers let parse_file = Reader.with_file parse end include Any end include Make (CharEncoding.Naive)