JlSonic/JlSonic/types.jl

114 lines
2.7 KiB
Julia
Raw Normal View History

2019-05-19 22:24:18 +02:00
import Random
2019-05-21 11:05:53 +02:00
import Dates
2019-05-17 20:22:01 +02:00
mutable struct User
name::String
2019-05-19 22:24:18 +02:00
password::String
2019-05-17 20:22:01 +02:00
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
2020-01-22 18:42:29 +01:00
# FIXME: add uuid format check
abstract type BeetUUID end
struct SongUUID <: BeetUUID
uuid::String
end
struct ArtistUUID <: BeetUUID
2019-05-19 22:24:18 +02:00
uuid::String
2020-01-22 18:42:29 +01:00
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
2019-05-19 22:24:18 +02:00
name::String
comment::String
owner::String
public::Bool
2020-01-22 18:42:29 +01:00
songs::Vector{SongUUID}
2019-05-19 22:24:18 +02:00
cover::String
allowed::Vector{String}
2019-05-21 11:05:53 +02:00
created::Dates.DateTime
2019-05-19 22:24:18 +02:00
end
2019-05-17 20:22:01 +02:00
function Playlist(owner::String
; uuid = string(UUIDs.uuid4()),
name = "New Playlist",
comment = "",
public = false,
2020-01-22 18:42:29 +01:00
songs = SongUUID[],
2019-05-19 22:24:18 +02:00
cover = "",
2019-05-21 11:05:53 +02:00
allowed = String[],
creation = Dates.now())
Playlist(uuid,
name, comment, owner, public,
songs, cover,
allowed, creation)
2019-05-17 20:22:01 +02:00
end
function User(name::String)
2019-05-19 22:24:18 +02:00
User(name, Random.randstring(30),
string(name, "@", domain),
2019-05-17 20:22:01 +02:00
false, false, false, false, false, false, false, false, false)
end
2020-01-22 18:42:29 +01:00
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, "")