Announcement

Collapse
No announcement yet.

Announce: Material Skin

Collapse
X
 
  • Time
  • Show
Clear All
new posts

  • thank you

    Originally posted by cpd73
    Main changes:
    1. Fix Qobuz search field
    2. On modern browsers, clap title/artist/album test to two lines each in landscape now-playing
    3. For MAI lyrics and biographies, just pass IDs if know - text items otherwise
    4. In mobile layout, colour the active tab icon and label
    5. Fix showing images
    will test tomorrow.
    --
    4 TB Drobo-->FW 800-->mac mini-->Ethernet
    Transporter--> Wireworld Eclipse 6 coax-->Meridian G61
    G61--> Nordost Red Dawn-->Primare 30.3
    Primare-->Ocos--Vienna Acoustics Beethoven/Maestro

    Comment


    • Hi,
      I have edited the NL strings and have attached it in the zip file.
      thanks!
      Attached Files
      Living: EtherRegen -> Ultrarendu -> Benchmark DAC2 HGC -> Benchmark AHB2 -> ATC SCM19 v2 & Sennheiser HD650
      Kitchen: SB Touch -> Audio Pro Addon T10 gen2
      Kids rooms: SB Booms
      Bedroom: SB Boom & SB Radio
      Controls: Material Skin & LMS via internet, iPeng
      Server: Windows 10 Pro with LMS 8.3
      Spare: 2 SB Touch, 1 SB3, 2 SB Radio

      Comment


      • Originally posted by cpd73
        Main changes:
        1. Fix Qobuz search field
        2. On modern browsers, clamp title/artist/album test to two lines each in landscape now-playing
        3. For MAI lyrics and biographies, just pass IDs if know - text items otherwise
        4. In mobile layout, colour the active tab icon and label
        5. Fix showing images
        Release 0.9.2 looks good - I can use Search in Qobuz!

        I have a question regarding the Search function results page generated for Qobuz. After doing a search in Qobuz, we get a page called "Search" with four items: Albums, Artists, Songs, Playlists, but there is no memory of what we just searched for. Would it be possible to put in parens, after the title Search, what we had just used as a search string?

        Example:
        Search (Melody)
        4 Items

        Additionally, after we have selected one of these items and descended further, would it be possible to keep the search term appended to the Search line in the pulldown menu that is available, that serves as breadcrumbs to go back?

        Example:
        Home
        Qobuz
        Search (Melody)
        Artist
        Melody Gardot


        I hope I made sense here.
        Living Room: SB Touch + DIY PSU > CI Audio VDA.2 DAC + VAC.1 PSU > VRX.1 cables > Emotiva XSP-1 Gen 2 preamp + XPA-DR2 amp > Blue Jeans cables > B&W 804 speakers
        Laptop: System76 Galago + Ubuntu 18.04 + Squeezelite + Epiphany/Material Skin > Emotiva Little Ego DAC > Grado PS500 headphones
        Bedroom: RPi Zero W + Squeezelite > miniBOSS DAC HAT > Bose SoundLink Revolve
        Phone: Pixel 6a + Termux/Squeezelite + Material APK > Senn IE80 earbuds
        Server: System76 Meerkat + Pop!_OS 22.04 + LMS 8.4

        Comment


        • Announce: Material Skin

          > I have a question regarding the Search function results page generated
          > for Qobuz. After doing a search in Qobuz, we get a page called "Search"
          > with four items: *Albums, Artists, Songs, Playlists,* but there is no
          > memory of what we just searched for. Would it be possible to put in
          > parens, after the title *Search*, what we had just used as a search
          > string?


          That's not a Material question, but a Qobuz question. (and yes, it could
          be done, but no, I haven't implemented it this way)

          --

          Michael
          Michael

          "It doesn't work - what shall I do?" - "Please check your server.log and/or scanner.log file!"
          (LMS: Settings/Information)

          Comment


          • Originally posted by mherger
            > I have a question regarding the Search function results page generated
            > for Qobuz. After doing a search in Qobuz, we get a page called "Search"
            > with four items: *Albums, Artists, Songs, Playlists,* but there is no
            > memory of what we just searched for. Would it be possible to put in
            > parens, after the title *Search*, what we had just used as a search
            > string?


            That's not a Material question, but a Qobuz question. (and yes, it could
            be done, but no, I haven't implemented it this way)

            --

            Michael
            Then my mistake. I was thinking it might be a Material question, because the Qobuz plugin, or LMS, displays the expected series of breadcrumbs when using the default skin, example:
            Home > Qobuz > Search (melody) > Artists > Melody Gardot > Songs

            -Ron
            Living Room: SB Touch + DIY PSU > CI Audio VDA.2 DAC + VAC.1 PSU > VRX.1 cables > Emotiva XSP-1 Gen 2 preamp + XPA-DR2 amp > Blue Jeans cables > B&W 804 speakers
            Laptop: System76 Galago + Ubuntu 18.04 + Squeezelite + Epiphany/Material Skin > Emotiva Little Ego DAC > Grado PS500 headphones
            Bedroom: RPi Zero W + Squeezelite > miniBOSS DAC HAT > Bose SoundLink Revolve
            Phone: Pixel 6a + Termux/Squeezelite + Material APK > Senn IE80 earbuds
            Server: System76 Meerkat + Pop!_OS 22.04 + LMS 8.4

            Comment


            • Announce: Material Skin

              > Then my mistake. I was thinking it might be a Material question, because
              > the Qobuz plugin, or LMS, displays the expected series of breadcrumbs
              > when using the default skin, example:
              > Home > Qobuz > Search (melody) > Artists > Melody Gardot > Songs


              Oh... I take that back. My bad: I didn't carefully read your posting and
              thought it was another request for search history. The breadcrumb
              definitely is a skin question.

              --

              Michael
              Michael

              "It doesn't work - what shall I do?" - "Please check your server.log and/or scanner.log file!"
              (LMS: Settings/Information)

              Comment


              • Originally posted by Ron F.
                Then my mistake. I was thinking it might be a Material question, because the Qobuz plugin, or LMS, displays the expected series of breadcrumbs when using the default skin, example:
                Home > Qobuz > Search (melody) > Artists > Melody Gardot > Songs

                -Ron
                The same applies to Spotify. Instead of the search term "New Search" appears at the top of the screen. I didn't notice this until you mentioned it.

                Sent from my SM-G900F using Tapatalk
                Living Room: Touch or Squeezelite (Pi3B) > Topping E30 > Audiolab 8000A > Monitor Audio S5 + BK200-XLS DF
                Bedroom: Radio
                Bathroom: Radio

                Comment


                • Originally posted by Blackfiction
                  Hi,
                  I have edited the NL strings and have attached it in the zip file.
                  thanks!
                  Thank you. I'll make sure this is in the next release.
                  Material debug: 1. Launch via http: //SERVER:9000/material/?debug=json (Use http: //SERVER:9000/material/?debug=json,cometd to also see update messages, e.g. play queue) 2. Open browser's developer tools 3. Open console tab in developer tools 4. REQ/RESP messages sent to/from LMS will be logged here.

                  Comment


                  • Originally posted by Ron F.
                    Release 0.9.2 looks good - I can use Search in Qobuz!

                    I have a question regarding the Search function results page generated for Qobuz. After doing a search in Qobuz, we get a page called "Search" with four items: Albums, Artists, Songs, Playlists, but there is no memory of what we just searched for. Would it be possible to put in parens, after the title Search, what we had just used as a search string?
                    Yup, that makes total sense. Kind of an obvious thing to do as well, so should have been there from the start! Will add.
                    Material debug: 1. Launch via http: //SERVER:9000/material/?debug=json (Use http: //SERVER:9000/material/?debug=json,cometd to also see update messages, e.g. play queue) 2. Open browser's developer tools 3. Open console tab in developer tools 4. REQ/RESP messages sent to/from LMS will be logged here.

                    Comment


                    • Originally posted by slartibartfast
                      The same applies to Spotify. Instead of the search term "New Search" appears at the top of the screen. I didn't notice this until you mentioned it.
                      Yeah, the title is always taken from the clicked item. In this case I guess Spotty uses the phrase "New Search". I'll update the code to append the searched term. So, this would then appear as (e.g.) "New Search - ABBA"
                      Material debug: 1. Launch via http: //SERVER:9000/material/?debug=json (Use http: //SERVER:9000/material/?debug=json,cometd to also see update messages, e.g. play queue) 2. Open browser's developer tools 3. Open console tab in developer tools 4. REQ/RESP messages sent to/from LMS will be logged here.

                      Comment


                      • Craig.
                        Just a heads up 0.9.2 isn't giving me Lyrics via i but MAI is providing them via More

                        EDIT
                        The i failure seems instant. Here I am playing a track from Spotify. I have no Lyrics cache on this particular LMS.

                        Click image for larger version

Name:	2019-07-24 11_34_11-Window.jpg
Views:	1
Size:	131.2 KB
ID:	1566700

                        Click image for larger version

Name:	2019-07-24 11_34_41-Window.jpg
Views:	1
Size:	105.2 KB
ID:	1566701
                        Last edited by d6jg; 2019-07-24, 11:37.
                        Jim



                        VB2.4 storage QNAP TS419p (NFS)
                        Living Room Joggler & Pi4/Khadas -> Onkyo TXNR686 -> Celestion F20s
                        Office Joggler & Pi3 -> Denon RCD N8 -> Celestion F10s
                        Dining Room SB Radio
                        Bedroom (Bedside) Pi Zero+DAC ->ToppingTP21 ->AKG Headphones
                        Bedroom (TV) & Bathroom SB Touch ->Denon AVR ->Mordaunt Short M10s + Kef ceiling speakers
                        Guest Room Joggler > Topping Amp -> Wharfedale Modus Cubes

                        Comment


                        • Originally posted by d6jg
                          Craig.
                          Just a heads up 0.9.2 isn't giving me Lyrics via i but MAI is providing them via More
                          Is this a local track, or from a streaming service? Is this for all tracks? If you start Material with debug (http://SERVER:9000/material/desktop?debug=json) do you see ["musicartistinfo", "lyrics", "html:1", "track_id:XXX"] (with XXX replaced by track's ID) logged in your bowser's devloper tools console?
                          Material debug: 1. Launch via http: //SERVER:9000/material/?debug=json (Use http: //SERVER:9000/material/?debug=json,cometd to also see update messages, e.g. play queue) 2. Open browser's developer tools 3. Open console tab in developer tools 4. REQ/RESP messages sent to/from LMS will be logged here.

                          Comment


                          • Originally posted by cpd73
                            Is this a local track, or from a streaming service? Is this for all tracks? If you start Material with debug (http://SERVER:9000/material/desktop?debug=json) do you see ["musicartistinfo", "lyrics", "html:1", "track_id:XXX"] (with XXX replaced by track's ID) logged in your bowser's devloper tools console?
                            This is what I get from i

                            Code:
                            [12:11:24] JSON REQ: ["",["musicartistinfo","lyrics","html:1","track_id:-160755520"]]
                            utils.min.js?r=0.9.2:26 [12:11:24] JSON REQ: ["",["musicartistinfo","biography","html:1","artist:U2"]]
                            utils.min.js?r=0.9.2:26 [12:11:24] JSON REQ: ["",["musicartistinfo","albumreview","html:1","album:War (Deluxe Edition Remastered)","artist:U2"]]
                            rovimusic.rovicorp.com/image.jpg?c=-VnjUlwZXDRxzif9AqzL7R_TZlp6n_cq-Emr2zx15tU=&f=5:1 GET https://rovimusic.rovicorp.com/image.jpg?c=-VnjUlwZXDRxzif9AqzL7R_TZlp6n_cq-Emr2zx15tU=&f=5 net::ERR_SSL_VERSION_INTERFERENCE
                            Image (async)
                            ri @ vue.min.js?r=2.6.10:6
                            x @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            x @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            e._update @ vue.min.js?r=2.6.10:6
                            r @ vue.min.js?r=2.6.10:6
                            fn.get @ vue.min.js?r=2.6.10:6
                            fn.run @ vue.min.js?r=2.6.10:6
                            un @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            qe @ vue.min.js?r=2.6.10:6
                            Promise.then (async)
                            ze @ vue.min.js?r=2.6.10:6
                            Ye @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            fn.update @ vue.min.js?r=2.6.10:6
                            ce.notify @ vue.min.js?r=2.6.10:6
                            set @ vue.min.js?r=2.6.10:6
                            (anonymous) @ nowplaying-page.min.js?r=0.9.2:30
                            Promise.then (async)
                            fetchReview @ nowplaying-page.min.js?r=0.9.2:29
                            showInfo @ nowplaying-page.min.js?r=0.9.2:31
                            info.show @ nowplaying-page.min.js?r=0.9.2:35
                            fn.run @ vue.min.js?r=2.6.10:6
                            un @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            qe @ vue.min.js?r=2.6.10:6
                            Promise.then (async)
                            ze @ vue.min.js?r=2.6.10:6
                            Ye @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            fn.update @ vue.min.js?r=2.6.10:6
                            ce.notify @ vue.min.js?r=2.6.10:6
                            set @ vue.min.js?r=2.6.10:6
                            (anonymous) @ nowplaying-page.min.js?r=0.9.2:14
                            He @ vue.min.js?r=2.6.10:6
                            e.$emit @ vue.min.js?r=2.6.10:6
                            click @ VM59:3
                            He @ vue.min.js?r=2.6.10:6
                            n @ vue.min.js?r=2.6.10:6
                            Yr.o._wrapper @ vue.min.js?r=2.6.10:6
                            rovimusic.rovicorp.com/image.jpg?c=atPlXq2HwbJRI3VlLDz2ON_M69_UI9rrJSVvWL2-yAg=&f=3:1 GET https://rovimusic.rovicorp.com/image.jpg?c=atPlXq2HwbJRI3VlLDz2ON_M69_UI9rrJSVvWL2-yAg=&f=3 net::ERR_SSL_VERSION_INTERFERENCE
                            Image (async)
                            ri @ vue.min.js?r=2.6.10:6
                            x @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            x @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            e._update @ vue.min.js?r=2.6.10:6
                            r @ vue.min.js?r=2.6.10:6
                            fn.get @ vue.min.js?r=2.6.10:6
                            fn.run @ vue.min.js?r=2.6.10:6
                            un @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            qe @ vue.min.js?r=2.6.10:6
                            Promise.then (async)
                            ze @ vue.min.js?r=2.6.10:6
                            Ye @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            fn.update @ vue.min.js?r=2.6.10:6
                            ce.notify @ vue.min.js?r=2.6.10:6
                            set @ vue.min.js?r=2.6.10:6
                            (anonymous) @ nowplaying-page.min.js?r=0.9.2:27
                            Promise.then (async)
                            fetchBio @ nowplaying-page.min.js?r=0.9.2:26
                            showInfo @ nowplaying-page.min.js?r=0.9.2:31
                            info.show @ nowplaying-page.min.js?r=0.9.2:35
                            fn.run @ vue.min.js?r=2.6.10:6
                            un @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            qe @ vue.min.js?r=2.6.10:6
                            Promise.then (async)
                            ze @ vue.min.js?r=2.6.10:6
                            Ye @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            fn.update @ vue.min.js?r=2.6.10:6
                            ce.notify @ vue.min.js?r=2.6.10:6
                            set @ vue.min.js?r=2.6.10:6
                            (anonymous) @ nowplaying-page.min.js?r=0.9.2:14
                            He @ vue.min.js?r=2.6.10:6
                            e.$emit @ vue.min.js?r=2.6.10:6
                            click @ VM59:3
                            He @ vue.min.js?r=2.6.10:6
                            n @ vue.min.js?r=2.6.10:6
                            Yr.o._wrapper @ vue.min.js?r=2.6.10:6
                            rovimusic.rovicorp.com/image.jpg?c=oYl0i99Qj87KpplL__G-eIAf7E_1E-2MlBBPmPAXRBU=&f=3:1 GET https://rovimusic.rovicorp.com/image.jpg?c=oYl0i99Qj87KpplL__G-eIAf7E_1E-2MlBBPmPAXRBU=&f=3 net::ERR_SSL_VERSION_INTERFERENCE
                            Image (async)
                            ri @ vue.min.js?r=2.6.10:6
                            x @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            x @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            e._update @ vue.min.js?r=2.6.10:6
                            r @ vue.min.js?r=2.6.10:6
                            fn.get @ vue.min.js?r=2.6.10:6
                            fn.run @ vue.min.js?r=2.6.10:6
                            un @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            qe @ vue.min.js?r=2.6.10:6
                            Promise.then (async)
                            ze @ vue.min.js?r=2.6.10:6
                            Ye @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            fn.update @ vue.min.js?r=2.6.10:6
                            ce.notify @ vue.min.js?r=2.6.10:6
                            set @ vue.min.js?r=2.6.10:6
                            (anonymous) @ nowplaying-page.min.js?r=0.9.2:27
                            Promise.then (async)
                            fetchBio @ nowplaying-page.min.js?r=0.9.2:26
                            showInfo @ nowplaying-page.min.js?r=0.9.2:31
                            info.show @ nowplaying-page.min.js?r=0.9.2:35
                            fn.run @ vue.min.js?r=2.6.10:6
                            un @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            qe @ vue.min.js?r=2.6.10:6
                            Promise.then (async)
                            ze @ vue.min.js?r=2.6.10:6
                            Ye @ vue.min.js?r=2.6.10:6
                            (anonymous) @ vue.min.js?r=2.6.10:6
                            fn.update @ vue.min.js?r=2.6.10:6
                            ce.notify @ vue.min.js?r=2.6.10:6
                            set @ vue.min.js?r=2.6.10:6
                            (anonymous) @ nowplaying-page.min.js?r=0.9.2:14
                            He @ vue.min.js?r=2.6.10:6
                            e.$emit @ vue.min.js?r=2.6.10:6
                            click @ VM59:3
                            He @ vue.min.js?r=2.6.10:6
                            n @ vue.min.js?r=2.6.10:6
                            Yr.o._wrapper @ vue.min.js?r=2.6.10:6
                            Jim



                            VB2.4 storage QNAP TS419p (NFS)
                            Living Room Joggler & Pi4/Khadas -> Onkyo TXNR686 -> Celestion F20s
                            Office Joggler & Pi3 -> Denon RCD N8 -> Celestion F10s
                            Dining Room SB Radio
                            Bedroom (Bedside) Pi Zero+DAC ->ToppingTP21 ->AKG Headphones
                            Bedroom (TV) & Bathroom SB Touch ->Denon AVR ->Mordaunt Short M10s + Kef ceiling speakers
                            Guest Room Joggler > Topping Amp -> Wharfedale Modus Cubes

                            Comment


                            • Originally posted by cpd73
                              Is this a local track, or from a streaming service? Is this for all tracks? If you start Material with debug (http://SERVER:9000/material/desktop?debug=json) do you see ["musicartistinfo", "lyrics", "html:1", "track_id:XXX"] (with XXX replaced by track's ID) logged in your bowser's devloper tools console?
                              And this from subsequent More / Lyrics

                              Code:
                              [12:13:13] JSON RESP: {"method":"slim.request","id":1,"result":{"item_loop":[{}],"offset":0,"title":"Lyrics","window":{"textarea":"Oh, the city's alight\nWith lovers and lies\nAnd bright blue eyes\n\nOh, the city is bright\nIt's brighter than day tonight\n\n(Surrender, surrender)\n(Surrender, surrender)\n\nSadie said she couldn't work out what it was all about\nAnd so she let go\nNow Sadie's on the street and the people she meets you know\n\nShe tried to be a good girl and a good wife\nRaise a good family\nLead a good life\nIt's not good enough\nShe got herself up on the 48th floor\nGotta find out\nFind out what she's living for\n\n(Surrender, surrender)\n(Surrender, surrender)\n\nOh, the city's a fire\nA passionate flame that knows me by name\nOh, the city's desire to take me for more and more\nIt's in the street gettin' under my feet\nIt's in the air, it's everywhere I look for you\nIt's in the things that I do and say\nAnd it I wanna live I gotta die to myself someday\n\nOh, oh, oh, oh...\n\nPapa sing my sing my song\nPapa sing my sing my song\nPapa sing my sing my song","windowStyle":"text_list"},"base":{"actions":{"add":{"player":0,"cmd":["trackinfo","playlist","add"],"itemsParams":"params","params":{"url":"spotify:track:5O58wd9NOpNe3Y0MKB0r6j","menu":"trackinfo","track_id":"-160755520"}},"more":{"cmd":["trackinfo","items"],"itemsParams":"params","player":0,"params":{"url":"spotify:track:5O58wd9NOpNe3Y0MKB0r6j","menu":"trackinfo","track_id":"-160755520"},"window":{"isContextMenu":1}},"go":{"params":{"url":"spotify:track:5O58wd9NOpNe3Y0MKB0r6j","track_id":"-160755520","menu":"trackinfo","_index":"0","item_id":"15","_quantity":"25000"},"window":{"isContextMenu":1},"itemsParams":"playControlParams","cmd":["trackinfo","items"],"player":0},"add-hold":{"params":{"url":"spotify:track:5O58wd9NOpNe3Y0MKB0r6j","menu":"trackinfo","track_id":"-160755520"},"itemsParams":"params","cmd":["trackinfo","playlist","insert"],"player":0},"playControl":{"params":{"url":"spotify:track:5O58wd9NOpNe3Y0MKB0r6j","track_id":"-160755520","menu":"trackinfo","_index":"0","item_id":"15","_quantity":"25000"},"window":{"isContextMenu":1},"itemsParams":"playControlParams","cmd":["trackinfo","items"],"player":0},"play":{"cmd":["trackinfo","playlist","play"],"itemsParams":"params","nextWindow":"nowPlaying","player":0,"params":{"url":"spotify:track:5O58wd9NOpNe3Y0MKB0r6j","menu":"trackinfo","track_id":"-160755520"}}}},"count":0},"params":["b8:27:eb:40:09:8c",["trackinfo","items","0",25000,"url:spotify:track:5O58wd9NOpNe3Y0MKB0r6j","item_id:15","menu:trackinfo","track_id:-160755520"]]}
                              Jim



                              VB2.4 storage QNAP TS419p (NFS)
                              Living Room Joggler & Pi4/Khadas -> Onkyo TXNR686 -> Celestion F20s
                              Office Joggler & Pi3 -> Denon RCD N8 -> Celestion F10s
                              Dining Room SB Radio
                              Bedroom (Bedside) Pi Zero+DAC ->ToppingTP21 ->AKG Headphones
                              Bedroom (TV) & Bathroom SB Touch ->Denon AVR ->Mordaunt Short M10s + Kef ceiling speakers
                              Guest Room Joggler > Topping Amp -> Wharfedale Modus Cubes

                              Comment


                              • Announce: Material Skin

                                > [12:11:24] JSON REQ: ["",["musicartistinfo","lyrics","html:1","track_id:-160755520"]]

                                A negative track_id would be a remote track. But you mentioned the More
                                menu item - which is only available for local tracks. What is it really?

                                --

                                Michael
                                Michael

                                "It doesn't work - what shall I do?" - "Please check your server.log and/or scanner.log file!"
                                (LMS: Settings/Information)

                                Comment

                                Working...
                                X
                                😀
                                🥰
                                🤢
                                😎
                                😡
                                👍
                                👎