we will need to find a way to inform the user that their daily-jams for this week is playlist mbid XXX.
2020-11-20 32507, 2020
alastairp
so, we need a way of saying that a user is a bot (and therefore they can create playlists on behalf of someone else)
2020-11-20 32520, 2020
ruaok
or, we have a field that says "generated for user X" and then we can query that.
2020-11-20 32541, 2020
ruaok
yes, but I suspect that that is beyond the scope of this weekend.
2020-11-20 32544, 2020
alastairp
so the owner (db column) of a bot playlist would be the bot?
2020-11-20 32502, 2020
ruaok
yes
2020-11-20 32513, 2020
alastairp
I would say db column owner -> user it was made for; column `bot_data` -> jsonb of interesting information about the bot
2020-11-20 32525, 2020
ruaok
what do you think about the "created_for" field in the playlist?
2020-11-20 32543, 2020
alastairp
if you want owner to be the bot, then we definitely need created_for
2020-11-20 32512, 2020
ruaok
my reservation here is that I feel that bots should never meddle with users' playlists.
2020-11-20 32517, 2020
ruaok
there be dragons.
2020-11-20 32535, 2020
alastairp
mm, right. I see the problems there
2020-11-20 32557, 2020
ruaok
so I would prefer a created_for field in the playlist table.
2020-11-20 32505, 2020
alastairp
yeah, one thing that we didn't really consider is subscribing to a "playlist concept"
2020-11-20 32533, 2020
alastairp
I mean, as a user you want to say "I want to see a thing called daily jams, which updates each day"
2020-11-20 32535, 2020
ruaok
I was kinda working on the the concept that generated playlists are treated as immutable.
2020-11-20 32549, 2020
alastairp
yeah, agreed. so it's kind of like a view
2020-11-20 32506, 2020
ruaok
and that if we had a created_for field then we can query for the playlists that are available for the user currently.
2020-11-20 32540, 2020
ruaok
but I think that there is space for a "follow this playlist" concept -- likely more for user generated playlists that may evolve over time.
2020-11-20 32552, 2020
ruaok
but I feel that we're getting in the weeds on this for the hackday.
2020-11-20 32501, 2020
ruaok
not a core function needed right away.
2020-11-20 32555, 2020
ruaok
alastairp: > Should we allow items in the playlist to be identified by external ids (e.g. spotify) or only MBIDs? If only mbid, we’ll need to map the ids
2020-11-20 32502, 2020
ruaok
this is a big question.
2020-11-20 32511, 2020
ruaok
I am leaning towards playlists only with mbids.
2020-11-20 32538, 2020
ruaok
and I am saying this because the acrp nee arcm nee MB Mapping is something we need.
2020-11-20 32548, 2020
ruaok
and I am committed to working on it.
2020-11-20 32532, 2020
ruaok
and I'll finish debugging the typesense demo tonight so we can use it tomorrow.
2020-11-20 32549, 2020
alastairp
so that means that round-trip spotify->lb->spotify _may_ be buggy for some time
2020-11-20 32537, 2020
ruaok
well, given that we have no mb<->spotify mapping to use instead means yes, it may be buggy.
2020-11-20 32503, 2020
ruaok
after the MB mapping is a done project, I want to start mining spotify ids from our own DB>
2020-11-20 32545, 2020
ruaok
also, everything gets much more complicated if we allow other IDs.
2020-11-20 32516, 2020
ruaok
I feel that if that is a use case we need to support, it will become clear later to us. for right now I would like to leave it off.
2020-11-20 32503, 2020
ruaok
Mr_Monkey: you have "Implement JSPF parser"
2020-11-20 32507, 2020
ruaok
is that really needed?
2020-11-20 32520, 2020
ruaok
I was hoping the the python layer could do that.
2020-11-20 32556, 2020
Mr_Monkey
Parser might not be the right word, but we need to be aware of JSPF format
2020-11-20 32503, 2020
_lucifer
whilr we are it what about some integration with mb collections
2020-11-20 32533, 2020
Mr_Monkey
That'll be for a later date, but surely something we'll wanna do
2020-11-20 32540, 2020
ruaok
_lucifer: lets leave that for now. we have a lot on our plate for this weekend.
2020-11-20 32501, 2020
ruaok
alastairp: Mr_Monkey and I will be at the office tomorrow.
2020-11-20 32509, 2020
ruaok
I'll turn up here at 11ish, is my guess.
2020-11-20 32522, 2020
alastairp
OK, great, Mr_Monkey was mentioning that as an option
2020-11-20 32537, 2020
ruaok
it would be nice to have you hear for initial discussion. I have thousand question for you right now, but IRC makes things slower.
2020-11-20 32506, 2020
alastairp
yeah, I can definitely plan to be there 11ish
2020-11-20 32510, 2020
ruaok
great.
2020-11-20 32537, 2020
ruaok
I plan to make a prioritized list of python tasks and whenever someone needs a new task, pick from near the top and go.
2020-11-20 32507, 2020
ruaok
lets try and minimize jumping around from contexts, but I want to avoid one person getting stuck with a load of stuff that they may not finish.
2020-11-20 32502, 2020
ruaok
alastairp: spotify's API has a separate endpoint for get playlist and get playlist items.
2020-11-20 32525, 2020
alastairp
I was just looking at their endpoints for create too, you don't specify items
2020-11-20 32541, 2020
alastairp
are we setting a max number of items in a playlist?
2020-11-20 32551, 2020
alastairp
remember the whole ?inc vs browse thing in ws2
2020-11-20 32503, 2020
ruaok
I think we should set a max, yes.
2020-11-20 32531, 2020
ruaok
our APi is looking to be more fine-grained, which I am ok with. this translates to simple steps that should be easy to push via webscockets.
2020-11-20 32517, 2020
ruaok
alastairp: > (do we include the artist/release/recording name as it was at add stage, or do we lookup in musicbrainz when we need it?)
2020-11-20 32528, 2020
ruaok
I think we should only store MBIDs.
2020-11-20 32523, 2020
alastairp
ok. and will the endpoints also return just mbids?
2020-11-20 32536, 2020
alastairp
up to the displayer to resolve them
2020-11-20 32549, 2020
ruaok
for now, yes, I think.
2020-11-20 32533, 2020
alastairp
I guess we have our mbid lookuper in the ds hoster for this
2020-11-20 32544, 2020
ruaok
and the normal API too.
2020-11-20 32511, 2020
alastairp
we ran into this in the AB dataset editor
2020-11-20 32518, 2020
alastairp
it takes _ages_ to resolve a large list
2020-11-20 32550, 2020
ruaok
which is why I constructed the bono recording_mbid lookup as I did.
2020-11-20 32508, 2020
ruaok
hopefully playlists are going to be smaller than ML datasets.
2020-11-20 32515, 2020
alastairp
hopefully
2020-11-20 32516, 2020
ruaok
and resolvable in one call.
2020-11-20 32544, 2020
alastairp
for collaborative lists: should we say who added an item?
2020-11-20 32558, 2020
ruaok
Probably a good idea.
2020-11-20 32505, 2020
ruaok
git playlist blame ?
2020-11-20 32515, 2020
ruaok
heh, yes, please.
2020-11-20 32539, 2020
ruaok
"who's the fuck who added the HIV song after each legit song in this playlist?"
2020-11-20 32542, 2020
ruaok
should we be able to specify the playlist collaborators as part of the create call?
2020-11-20 32512, 2020
ruaok
that means either HTTP args or we extend the JSPF again.
2020-11-20 32539, 2020
ruaok
I would be more inclined to have an endpoint: "Set playlist collaborators: [user1, user2, ... ]
2020-11-20 32542, 2020
ruaok
+"
2020-11-20 32510, 2020
ruaok
alastairp: I'd be in favor of an additional endpoint /edit
Hang on, we never added a license that I can remember. I'll look into it
2020-11-20 32549, 2020
alastairp
ruaok: how rest-y do you want to be?
2020-11-20 32503, 2020
alastairp
POST /{id}/delete, or DELETE /{id} ?
2020-11-20 32522, 2020
alastairp
note that we're currently conflicted with "delete playlist" and "delete item" endpoints
2020-11-20 32535, 2020
Mr_Monkey
Looks like search is working on bookbrainz and test.bookbrainz
2020-11-20 32544, 2020
ruaok
alastairp: ah, good catch.
2020-11-20 32556, 2020
ruaok
Not super RESTy. I can skip using DELETE.
2020-11-20 32500, 2020
ruaok
but I don't feel strongly.
2020-11-20 32507, 2020
alastairp
fine by me
2020-11-20 32512, 2020
zas
it might be a false alrt
2020-11-20 32515, 2020
Mr_Monkey
What alerts are you getting zas ?
2020-11-20 32518, 2020
ruaok
I'm happy to change the delete playlist item delete endpoint.
2020-11-20 32543, 2020
alastairp
/1/playlist/{id}/{offset}/delete for delete track?
2020-11-20 32504, 2020
ruaok
I wonder if we should have a clear indication for the playlist item endpoints.
2020-11-20 32522, 2020
ruaok
/1/playlist/{id}/item/{offset}/delete
2020-11-20 32523, 2020
ruaok
?
2020-11-20 32554, 2020
ruaok
/1/playlist/{id}/item/{offset}/move
2020-11-20 32539, 2020
ruaok
I'm more or less ambivalent about the DELETE thing. if you want to do it, fine.
2020-11-20 32554, 2020
alastairp
sorry, I was just pointing out that they do it too
2020-11-20 32512, 2020
alastairp
have /tracks/ to separate the playlist id and the track action
2020-11-20 32524, 2020
ruaok
sure on /tracks/
2020-11-20 32533, 2020
ruaok
track?
2020-11-20 32535, 2020
ruaok
singular?
2020-11-20 32543, 2020
alastairp
whereas you suggested /item/, which is fine too
2020-11-20 32556, 2020
ruaok
well, track is bad for us. we're adding recordings.
2020-11-20 32508, 2020
alastairp
I'm just thinking about bulk editing. if you want to delete 10 items, is that 10 requests?
2020-11-20 32511, 2020
ruaok
and recordings is too long, so item might be a decent compromise.
2020-11-20 32524, 2020
alastairp
spotify has a delete endpoint,and you specify items in the request body
2020-11-20 32537, 2020
ruaok
that's probably better.
2020-11-20 32511, 2020
ruaok
how do we deal with conflicts in a batch delete?
2020-11-20 32559, 2020
ruaok
if we are specifying index, mbid as a key for deletion, what if you ask to remove 5 tracks and one is no longer in the list or at the index passed in the call?
2020-11-20 32544, 2020
alastairp
with spotify you have to specify (id, offset) pairs
2020-11-20 32559, 2020
ruaok
I'm suggesting we do that same.
2020-11-20 32502, 2020
alastairp
then you can just 412 Precondition Failed
2020-11-20 32521, 2020
ruaok
do you fail all edits then if even one precondition is failed?
2020-11-20 32527, 2020
alastairp
yes
2020-11-20 32532, 2020
ruaok
make sense.
2020-11-20 32506, 2020
ruaok
should move get the same treatment as delete, in that we pass a list of (source mbid, index, destination index)?
2020-11-20 32513, 2020
alastairp
I think that makes sense
2020-11-20 32532, 2020
alastairp
though keep in mind what we were discussing about insertion in collaborative playlists
2020-11-20 32545, 2020
alastairp
and we kind of decided to just "do what they say" and hope for the best
2020-11-20 32506, 2020
alastairp
what about moving or deleteing in a collaborative list? should we have these precondition checks?
2020-11-20 32541, 2020
ruaok
good point. the 412 is in direct conflict with that.
2020-11-20 32507, 2020
ruaok
what if we soften it up and say "carry out what you can, but report failures"?
2020-11-20 32555, 2020
ruaok
202 Accepted? its not quite what we want, but may be ok.
2020-11-20 32512, 2020
ruaok
200 if it was perfect, 202 is some parts failed. 400 is all parts failed?
2020-11-20 32518, 2020
alastairp
mmm, that's a good question
2020-11-20 32539, 2020
alastairp
I guess we could just do 200 anyway, maybe report statues in the response?
2020-11-20 32547, 2020
alastairp
> In a POST request, the response will contain an entity describing or containing the result of the action.
2020-11-20 32515, 2020
ruaok
"Move one or more recordings in the playlist, specifying mbids and indices to indicate the recordings to move, and indices where to move the recordings. If some parts of the request were successful return 200 and if some parts where unsuccessful, report the unsuccessful moves in the error message."
2020-11-20 32550, 2020
ruaok
ok, item move/delete updated. heading home, but will be back online in less than an hour.
on a modern linux system, how does one add domains to the DNS search path? It used to be laughably simple, but now? And the correct answer seems to change every two week. halp?