using DataFrames import FileIO "Check that all songs have the correct format" function format_check(s::Vector{Beets.Song}; format = "FLAC") wrong = filter(s -> s.format != format, s) paths = [x.path for x in wrong] .|> dirname |> unique (success = length(wrong) == 0, howmany = length(wrong), broken = wrong, paths = paths) end "Check that all songs exists" function existing_check(s::Vector{Beets.Song}) paths = getfield.(s, :path) ok = isfile.(paths) (success = all(ok), howmany = count(.!ok), broken = s[.!ok], paths = paths[.!ok]) end "Check that all songs are under the right path" function path_check(s::Vector{Beets.Song}; path = "/mnt/music/") paths = getfield.(s, :path) ok = startswith.(paths, path) (success = all(ok), howmany = count(.!ok), broken = s[.!ok], paths = paths[.!ok]) end brokenartists(r) = map(x -> Beets.artist(x) , r.broken) |> unique brokenalbums(r) = map(x -> Beets.album(x) , r.broken) |> unique l1() = map(a -> (artist = a.artist.name, title = a.title), brokenalbums(format_check(Beets.songs()))) m1() = map(a -> (artist = a.artist.name, title = a.title), brokenalbums(existing_check(Beets.songs()))) n1() = map(a -> (artist = a.artist.name, title = a.title), brokenalbums(path_check(Beets.songs()))) l1() |> DataFrame |> d -> FileIO.save("format.csv", d) m1() |> DataFrame |> d -> FileIO.save("missing.csv", d) n1() |> DataFrame |> d -> FileIO.save("wrong_path.csv", d)