114 lines
2.7 KiB
Julia
114 lines
2.7 KiB
Julia
import Random
|
|
import Dates
|
|
mutable struct User
|
|
name::String
|
|
password::String
|
|
email::String
|
|
# scrobbling::Bool
|
|
admin::Bool
|
|
settings::Bool
|
|
download::Bool
|
|
upload::Bool
|
|
cover::Bool
|
|
playlist::Bool
|
|
comment::Bool
|
|
# podcast::Bool
|
|
stream::Bool
|
|
# jukebox::Bool
|
|
share::Bool
|
|
end
|
|
|
|
# FIXME: add uuid format check
|
|
abstract type BeetUUID end
|
|
struct SongUUID <: BeetUUID
|
|
uuid::String
|
|
end
|
|
struct ArtistUUID <: BeetUUID
|
|
uuid::String
|
|
end
|
|
struct AlbumUUID <: BeetUUID
|
|
uuid::String
|
|
end
|
|
struct PlaylistUUID <: BeetUUID
|
|
uuid::String
|
|
end
|
|
|
|
convert(::Type{SongUUID}, s::String) = SongUUID(s)
|
|
convert(::Type{ArtistUUID}, s::String) = ArtistUUID(s)
|
|
convert(::Type{AlbumUUID}, s::String) = AlbumUUID(s)
|
|
convert(::Type{PlaylistUUID}, s::String) = PlaylistUUID(s)
|
|
convert(::Type{String}, s::BeetUUID) = s.uuid
|
|
|
|
import Beets.songbyid
|
|
songbyid(id::SongUUID) = songbyid(convert(String, id))
|
|
|
|
mutable struct Playlist
|
|
uuid::PlaylistUUID
|
|
name::String
|
|
comment::String
|
|
owner::String
|
|
public::Bool
|
|
songs::Vector{SongUUID}
|
|
cover::String
|
|
allowed::Vector{String}
|
|
created::Dates.DateTime
|
|
end
|
|
|
|
function Playlist(owner::String
|
|
; uuid = string(UUIDs.uuid4()),
|
|
name = "New Playlist",
|
|
comment = "",
|
|
public = false,
|
|
songs = SongUUID[],
|
|
cover = "",
|
|
allowed = String[],
|
|
creation = Dates.now())
|
|
Playlist(uuid,
|
|
name, comment, owner, public,
|
|
songs, cover,
|
|
allowed, creation)
|
|
end
|
|
|
|
function User(name::String)
|
|
User(name, Random.randstring(30),
|
|
string(name, "@", domain),
|
|
false, false, false, false, false, false, false, false, false)
|
|
end
|
|
|
|
mutable struct Rating
|
|
item::Union{Artist,Album,Song}
|
|
rating::Int
|
|
end
|
|
|
|
mutable struct Star
|
|
item::Union{Artist,Album,Song}
|
|
starred::Dates.DateTime
|
|
end
|
|
|
|
mutable struct Share
|
|
id::UInt32
|
|
uuid::String
|
|
item::BeetUUID
|
|
username::String
|
|
description::String
|
|
created::Dates.DateTime
|
|
expires::Dates.DateTime
|
|
lastvisit::Union{Missing,Dates.DateTime}
|
|
count::Int
|
|
end
|
|
|
|
function Share(item::BeetUUID,
|
|
username::AbstractString,
|
|
description::AbstractString;
|
|
expires = Dates.now() + Dates.Day(7))
|
|
Share(Random.rand(UInt32),
|
|
Random.randstring(8),
|
|
item,
|
|
username, description,
|
|
# FIXME: do not hardcode
|
|
Dates.now(), expires,
|
|
missing, 0)
|
|
end
|
|
Share(i::BeetUUID, u::AbstractString, e::Dates.DateTime) = Share(i, u, ""; expires = e)
|
|
Share(i::BeetUUID, u::AbstractString) = Share(i, u, "")
|