JlSonic/consistency.jl

35 lines
1.4 KiB
Julia

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)