an idea I'm working on, I can't skin pretty but it's not a bad idea, it's horrible mouse work but some people just can't give it up.
Just the 4 tags that express what the track is about, genre, user1 & 2, comment.
20-30 boxes to just append a tag.
when browser focused I can show off some scrolling tricks to do several tracks in a batch.
Inviato Thu 23 Feb 23 @ 4:53 pm
no prizes for prettiness, but with text inserts filled it will be functional. Just need to make some decisions on the custom button scripts, then I can finish the scroller
Inviato Thu 23 Feb 23 @ 9:40 pm
Hey Locodog,
I want to add tags too in a fast way. So (actually before User 1 field handled tags) I created a PAD-mapping with multiple pages, that contains all tags that I need. Pressing on a tag appends the tag to the user 1 field if it's not there already.
Like this I was able to tag very fast. But it was not easy to create the scripts. At least for me ;-). I ended up to create a little program that takes an 2-dimensional 2x8 array of tags and multiple pages to create the XML for the pad-page. Here is the outcome of the pad-page for my tags:
I want to add tags too in a fast way. So (actually before User 1 field handled tags) I created a PAD-mapping with multiple pages, that contains all tags that I need. Pressing on a tag appends the tag to the user 1 field if it's not there already.
Like this I was able to tag very fast. But it was not easy to create the scripts. At least for me ;-). I ended up to create a little program that takes an 2-dimensional 2x8 array of tags and multiple pages to create the XML for the pad-page. Here is the outcome of the pad-page for my tags:
<?xml version="1.0" encoding="UTF-8"?>
<page name="Tagging">
<pad1 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'GG' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'GG' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Trancy' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Trancy' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Weird' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Weird' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'SambaBeat' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'SambaBeat' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'GG' : var '$tagmode' 1 ? get_text 'Trancy' : var '$tagmode' 2 ? get_text 'Weird' : var '$tagmode' 3 ? get_text 'SambaBeat' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#GG' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#GG' : get_browsed_song 'User 1' & param_add ' #GG' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#Trancy' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Trancy' : get_browsed_song 'User 1' & param_add ' #Trancy' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#Weird' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Weird' : get_browsed_song 'User 1' & param_add ' #Weird' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#SambaBeat' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#SambaBeat' : get_browsed_song 'User 1' & param_add ' #SambaBeat' & browsed_song 'User 1' :
nothing
</pad1>
<pad2 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Famous' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Famous' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Top' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Top' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Housy' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Housy' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Ballade' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Ballade' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'Famous' : var '$tagmode' 1 ? get_text 'Top' : var '$tagmode' 2 ? get_text 'Housy' : var '$tagmode' 3 ? get_text 'Ballade' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#Famous' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Famous' : get_browsed_song 'User 1' & param_add ' #Famous' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#Top' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Top' : get_browsed_song 'User 1' & param_add ' #Top' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#Housy' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Housy' : get_browsed_song 'User 1' & param_add ' #Housy' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#Ballade' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Ballade' : get_browsed_song 'User 1' & param_add ' #Ballade' & browsed_song 'User 1' :
nothing
</pad2>
<pad3 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Hard' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Hard' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Intro' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Intro' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Outro' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Outro' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'GG' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'GG' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'Hard' : var '$tagmode' 1 ? get_text 'Intro' : var '$tagmode' 2 ? get_text 'Outro' : var '$tagmode' 3 ? get_text 'GG' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#Hard' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Hard' : get_browsed_song 'User 1' & param_add ' #Hard' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#Intro' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Intro' : get_browsed_song 'User 1' & param_add ' #Intro' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#Outro' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Outro' : get_browsed_song 'User 1' & param_add ' #Outro' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#GG' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#GG' : get_browsed_song 'User 1' & param_add ' #GG' & browsed_song 'User 1' :
nothing
</pad3>
<pad4 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Dark' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Dark' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains '303' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains '303' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Funky' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Funky' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'HandsUp' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'HandsUp' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'Dark' : var '$tagmode' 1 ? get_text '303' : var '$tagmode' 2 ? get_text 'Funky' : var '$tagmode' 3 ? get_text 'HandsUp' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#Dark' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Dark' : get_browsed_song 'User 1' & param_add ' #Dark' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#303' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#303' : get_browsed_song 'User 1' & param_add ' #303' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#Funky' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Funky' : get_browsed_song 'User 1' & param_add ' #Funky' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#HandsUp' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#HandsUp' : get_browsed_song 'User 1' & param_add ' #HandsUp' & browsed_song 'User 1' :
nothing
</pad4>
<pad5 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Relaxed' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Relaxed' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Organic' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Organic' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'African' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'African' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Remix' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Remix' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'Relaxed' : var '$tagmode' 1 ? get_text 'Organic' : var '$tagmode' 2 ? get_text 'African' : var '$tagmode' 3 ? get_text 'Remix' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#Relaxed' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Relaxed' : get_browsed_song 'User 1' & param_add ' #Relaxed' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#Organic' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Organic' : get_browsed_song 'User 1' & param_add ' #Organic' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#African' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#African' : get_browsed_song 'User 1' & param_add ' #African' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#Remix' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Remix' : get_browsed_song 'User 1' & param_add ' #Remix' & browsed_song 'User 1' :
nothing
</pad5>
<pad6 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'GVocal' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'GVocal' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Dreaming' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Dreaming' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Lok' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Lok' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Schnulz' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Schnulz' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'GVocal' : var '$tagmode' 1 ? get_text 'Dreaming' : var '$tagmode' 2 ? get_text 'Lok' : var '$tagmode' 3 ? get_text 'Schnulz' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#GVocal' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#GVocal' : get_browsed_song 'User 1' & param_add ' #GVocal' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#Dreaming' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Dreaming' : get_browsed_song 'User 1' & param_add ' #Dreaming' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#Lok' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Lok' : get_browsed_song 'User 1' & param_add ' #Lok' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#Schnulz' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Schnulz' : get_browsed_song 'User 1' & param_add ' #Schnulz' & browsed_song 'User 1' :
nothing
</pad6>
<pad7 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'GBrass' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'GBrass' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Monoton' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Monoton' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Minimal' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Minimal' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'RB' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'RB' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'GBrass' : var '$tagmode' 1 ? get_text 'Monoton' : var '$tagmode' 2 ? get_text 'Minimal' : var '$tagmode' 3 ? get_text 'RB' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#GBrass' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#GBrass' : get_browsed_song 'User 1' & param_add ' #GBrass' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#Monoton' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Monoton' : get_browsed_song 'User 1' & param_add ' #Monoton' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#Minimal' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Minimal' : get_browsed_song 'User 1' & param_add ' #Minimal' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#RB' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#RB' : get_browsed_song 'User 1' & param_add ' #RB' & browsed_song 'User 1' :
nothing
</pad7>
<pad8 color="var '$tagmode' 0 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'GMellow' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'GMellow' ? color 'orange' : off :
var '$tagmode' 1 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'Lifting' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'Lifting' ? color 'orange' : off :
var '$tagmode' 2 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'SpeedChange' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'SpeedChange' ? color 'orange' : off :
var '$tagmode' 3 ? param_equal '`get_filepath`' '`get_browsed_filepath`' ? get_browsed_song 'User 1' & param_contains 'BB' ? color 'cyan' : off : get_browsed_song 'User 1' & param_contains 'BB' ? color 'orange' : off :
off" name="`var '$tagmode' 0 ? get_text 'GMellow' : var '$tagmode' 1 ? get_text 'Lifting' : var '$tagmode' 2 ? get_text 'SpeedChange' : var '$tagmode' 3 ? get_text 'BB' : nothing`">
var '$tagmode' 0 ? get_browsed_song 'User 1' & param_contains '#GMellow' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#GMellow' : get_browsed_song 'User 1' & param_add ' #GMellow' & browsed_song 'User 1' :
var '$tagmode' 1 ? get_browsed_song 'User 1' & param_contains '#Lifting' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#Lifting' : get_browsed_song 'User 1' & param_add ' #Lifting' & browsed_song 'User 1' :
var '$tagmode' 2 ? get_browsed_song 'User 1' & param_contains '#SpeedChange' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#SpeedChange' : get_browsed_song 'User 1' & param_add ' #SpeedChange' & browsed_song 'User 1' :
var '$tagmode' 3 ? get_browsed_song 'User 1' & param_contains '#BB' ? nothing : get_browsed_song 'User 1' & param_equal '' ? browsed_song 'User 1' '#BB' : get_browsed_song 'User 1' & param_add ' #BB' & browsed_song 'User 1' :
nothing
</pad8>
</page>
Inviato Tue 28 Feb 23 @ 7:36 pm
Thanks, I thought of a pad, but I didn't like it. It would do the job, but not quite the way I want to do the job. [fussy I suppose, but I'm catering to myself]
I went the custom_button route and the scripts are very functional but kind of long to type out. so many conditionals, marking; deck or browser focused, part of a batch marking. There's also a thing to write quick_filter 0.
Quick filters as is never sat right with me*, I'm more into more fuzzy filters, eg;
thing && ( other thing || third thing )
and quick filters, as is default, don't really do || with dynamic stuff
plus; I know there's no hard reason to have marking and filtering in the same interface, one is a down time task, the other has to be optimised for performance.
Even still there's a clarity, an efficiency, to make filters live in the same format you marked tracks.
my next iteration, is super simple custom buttons, just
set_var $string "String"
then clickthru to a button that uses var $string and my script
thinking about it out loud, I'll use 1 multibutton element instead, WAAAAAY easier.
* = I'm not saying atomix got quick filters wrong, they made it accessible for the most people [that's the main job] , but quick_filter 0 is atomix all over, it's not really documented. Either you worked it out, or you asked a question that needed it, or you didn't need to think about it because you weren't doing that kind of thing.
I went the custom_button route and the scripts are very functional but kind of long to type out. so many conditionals, marking; deck or browser focused, part of a batch marking. There's also a thing to write quick_filter 0.
Quick filters as is never sat right with me*, I'm more into more fuzzy filters, eg;
thing && ( other thing || third thing )
and quick filters, as is default, don't really do || with dynamic stuff
plus; I know there's no hard reason to have marking and filtering in the same interface, one is a down time task, the other has to be optimised for performance.
Even still there's a clarity, an efficiency, to make filters live in the same format you marked tracks.
my next iteration, is super simple custom buttons, just
set_var $string "String"
thinking about it out loud, I'll use 1 multibutton element instead, WAAAAAY easier.
* = I'm not saying atomix got quick filters wrong, they made it accessible for the most people [that's the main job] , but quick_filter 0 is atomix all over, it's not really documented. Either you worked it out, or you asked a question that needed it, or you didn't need to think about it because you weren't doing that kind of thing.
Inviato Tue 28 Feb 23 @ 9:12 pm
Got something working, genre function is in use and finding me results.
Still to decide on the "Feeling" tag params.
30 options for genre and feeling doesn't quite do it [almost enough] but user 1 & user 2 I only use for flags so I can use those buttons as overspill.
the script for custom buttons aren't quite as short as I like [having the button led logic came at a cost] but not that bad.
having dynamic exact key filtering and bpm range for 0.5* | 1* | 2* is nice
Inviato Sat 04 Mar 23 @ 8:19 pm
Inviato Tue 07 Mar 23 @ 2:10 pm