Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Version 4.5 Room Configuration/Media Meta Data
#1
So, I'm wrapping up the very last bits of 4.5 functionality, and we are about to go into the 'cool down' phase, where we'll only fix bugs, and we'll be doing some work on converting more drivers to V2 during that period as well, and docs of course.

The last thing done was the new auto-generation system, which also of course includes the room configuration stuff. That's been improved a lot as well, in terms of how you do the actual configuration. I would have gotten this out sooner so folks could start using it. It just ended up being the last thing done, so I couldn't do the XML GW stuff until it was ready.

Generally speaking the data is about the same. We decided that, because there are already so many improvements that we would just limit the new auto-gen system to basically the same functionality it had before, so that we can get 4.5 out the door. We'll pick up on the other side of 4.5 with more extensions to it.

Since the functionality is about the same, the data is more or less the same. However, it now all works purely in terms of V2 drivers, so things are more consistent, and it does mean some changes to the XML data that the XML GW server provides to room config based applications. This thread provides some documentation on what it's like now, so that room config based amps can 'catch up' to the new scheme.

V2 drivers work in terms of very strictly defined 'device classes' so it means that all drivers that implement a device class will implement the same field interface, syntax and semantics, so that client code and logic can work with them interchangeably. This makes it far easier to create programs like a generic room configuration based system. The new auto-gen (and hence room config) take full advantage of that.

So, here is an example of the configuration for a room. I'll provide following commentary on each chunk and how to interpret it. It's pretty straightforward.

Code:
<CQCSysCfg:Room CQCSysCfg:Name="Living Room"
                CQCSysCfg:Loads="Yes"
                CQCSysCfg:Music="Yes"
                CQCSysCfg:Movies="Yes"
                CQCSysCfg:Security="Yes"
                CQCSysCfg:Weather="Yes">

    <CQCSysCfg:RoomVars>
        <CQCSysCfg:RoomVar>Value 1</CQCSysCfg:RoomVar>
        <CQCSysCfg:RoomVar>Value 2</CQCSysCfg:RoomVar>
        <CQCSysCfg:RoomVar>Value 3</CQCSysCfg:RoomVar>
        <CQCSysCfg:RoomVar>Value 4</CQCSysCfg:RoomVar>
    </CQCSysCfg:RoomVars>

    <CQCSysCfg:Music    CQCSysCfg:Player="AG_MusicRend"
                        CQCSysCfg:Repo="AG_MusicRepo"
                        CQCSysCfg:Audio="AG_MZAudio"
                        CQCSysCfg:AudioSub="Z2"/>

    <CQCSysCfg:Movies   CQCSysCfg:Player="AG_MovieRend"
                        CQCSysCfg:Repo="AG_MovieRepo"
                        CQCSysCfg:Audio="AG_MovieRend"
                        CQCSysCfg:AudioSub=""/>

    <CQCSysCfg:Security CQCSysCfg:Panel="AG_Security"
                        CQCSysCfg:SecArea="House"
                        CQCSysCfg:ZoneCnt="2">
        LRDoor, LRPatio                
    </CQCSysCfg:Security>

    <CQCSysCfg:Weather  CQCSysCfg:Drv="Weather" CQCSysCfg:Scale="F"/>

    <CQCSysCfg:Loads    CQCSysCfg:DefLoad="MBR Table">

        <CQCSysCfg:Load CQCSysCfg:Name="MBR Table"
                        CQCSysCfg:Dimmer="LGHT#Dim_MBRTable"
                        CQCSysCfg:Switch="LGHT#Sw_MBRTable"/>

        <CQCSysCfg:Load CQCSysCfg:Name="Front Porch"
                        CQCSysCfg:Switch="LGHT#Sw_ExtFrPorch"/>

        <CQCSysCfg:Load CQCSysCfg:Name="L.Room TV"
                        CQCSysCfg:Dimmer="LGHT#Dim_LivRmTV"
                        CQCSysCfg:Switch="LGHT#Sw_LivRmTV"
                        CQCSysCfg:Color="CLGHT#LivRmTV"/>
    </CQCSysCfg:Loads>

    <CQCSysCfg:GlobActs>
        <CQCSysCfg:GlobAct  CQCSysCfg:Name="Room Loaded"
                            CQCSysCfg:ActPath="\User\GenTest\AutoGen\Setup">
            <CQCGW:ActParm>%(1)</CQCGW:ActParm>
            <CQCGW:ActParm>%(2)</CQCGW:ActParm>
            <CQCGW:ActParm>%(3)</CQCGW:ActParm>
            <CQCGW:ActParm>%(4)</CQCGW:ActParm>
        </CQCSysCfg:GlobAct>

        <CQCSysCfg:GlobAct  CQCSysCfg:Name="IV Exiting"
                            CQCSysCfg:ActPath="\User\GenTest\AutoGen\Setup">
            <CQCGW:ActParm>IV is exiting</CQCGW:ActParm>
            <CQCGW:ActParm></CQCGW:ActParm>
            <CQCGW:ActParm></CQCGW:ActParm>
            <CQCGW:ActParm></CQCGW:ActParm>
        </CQCSysCfg:GlobAct>

    </CQCSysCfg:GlobActs>
</CQCSysCfg:Room>

The main element provides the name of the room, just for human consumption, and indicates Yes or No for the major functional areas. This lets the app know up front what to expect.

Next are a set of room variables. Each room has four values that can be defined on a per-room basis. On the auto-gen side, these are set as global variables that can be used within the user's custom overlays. In a room config app, they can be used however you want. They are also used in the global actions, discussed below, though that may be of less interest to a room based app. All four values are present whether they have a value or not. An empty value is assumed to be potentially meaningful as well.

After that we have sections pretty much like the previous data, though slightly different.

For Movies/Music, they are the same and they provide the renderer and repo driver monikers as before, and they are separated out unlike before, where they were both under Media. However, now in the V2 land, there is an Audio device class, and any driver that implements Audio should be able to be used as the volume and mute control for a room. So there is now Audio and AudioSub values. The Audio value is the moniker of the device to use. The Sub value is only set if the driver implements multiple sub-units of audio control, such as a multi-zone audio system.

The V2 architecture defines strictly how these values can be used to create the fields of interest. In the Music example above, the Audio is AG_MZAudio, which is a driver I installed for Auto-Generation testing. It's a multi-zone audio driver, so it has multiple zones. The AudioSub is Z2.

So the fields will be:

AG_MZAudio.AUD#Z2~Volume and AG_MZAudio.AUD#Z2~Mute. So you can easily build up all of the relevant fields based on that info. There's also AG_MZAudio.AUD#Z2~AdjustVolume as well, according to the Audio device class.

For Movies, the renderer driver is also provided as the Audio device and there is no sub value, since it is not multi-zone. So, according to the V2 world, the fields for that one would be AG_MovieRend.AUD#Volume and AG_MovieRend.AUD#Mute and so forth for any fields defined by the Audio class.

So this allows us to let the user use something besides the renderer itself to control volume and mute, which is very important for a lot of folk's setup.


For security it's basically like before, but again making use of the V2 scheme that defines what the form of all of the fields are that are implemented by a driver that implements the Security device class. So you get the security panel driver's moniker, and a security area name. From that you can build up all of the fields required. AG_Security.SEC#Area_House_InAlarm or AG_Security.SEC#Area_House_ArmMode and so on.

As before, in the body of the security element are a comma separated list of zones the user selected for this room, which are zones reported by the driver to be within the indicated security area. There again, given the moniker and the zone names, you can create all of the zone field names you need, just look at the Security device class for the details.


Weather is pretty self-explanatory, except that I added a Scale value to let the user tell you what temp scale indicators to provide for visual display. Otherwise it's like before, just a weather driver moniker. They are the V2 Weather device class forms of the fields, which are basically the old ones with the correct (WEATH#) prefix before them, see the Weather device class docs.


For lighting loads, like before, you get a list of loads. For each one you will get at least one of Switch, Dimmer or Color, and possibly any combination of two or all three. The Dimmer and Switch fields are from the Lighting device class and the Color field is from the ClrLighting device class. Dimmers always now have a standard 0 to 100 range. The color lighting is for devices like the Hue that support color settings/getting of lights.

There is a DefLoad value on the main Loads element, that tells you which of the loads is the one to be considered the main one for this room. It will be the name of the one of the loads in the list of loads received, so just find it in the list by name. There can be an arbitrary number of loads now, not just four, since they can let each room control all lights if they want to.


The global actions are pretty much like before as well, You get the name and a path to the global action and a set of parameters to pass to it. The only real difference is that they can now put %(1), %(2), %(3), %(4), and %(N) tokens in the parameters. The first four should be replaced with the values of the four room variables. The N one should be replaced with the current room name.


That's it basically. It's pretty similar, just with a lot more consistency and standardization.
Dean Roddey
Explorans limites defectum
Reply
#2
And, as of 4.4.927, the XML GW server is updated to support the new media scheme. Instead of the piecemeal downloading of metadata the clients can now download the whole database. Each repository now calculates a serial number that should only change if data that the repo driver cares about changes. This means that clients only need to download new data if it has changed, which is fairly rare. Otherwise, they can just cache the data and use it over and over. This will vastly speed up the process of accessing media and also allow XML GW based clients, as it has allowed the IV, so do much nicer, less page-oriented access to media, since it's all locally accessed now.

Just the metadata, not the media files themselves of course.

I will update the XMLGW technical document soon, but basically all of the previous media oriented messages (other than the art downloading ones) have been removed and replaced with two new ones:

Code:
<!ELEMENT CQCGW:QueryMediaDB EMPTY>
    <!ATTLIST CQCGW:QueryMediaDB
              CQCGW:DBSerialNum CDATA #REQUIRED
              CQCGW:Moniker CDATA #REQUIRED>
    
    <!ELEMENT CQCGW:MediaDBInfo (#PCDATA)>
    <!ATTLIST CQCGW:MediaDBInfo
              CQCGW:Result (Failed | NoChanges | NewData) #REQUIRED
              CQCGW:DBSerialNum CDATA #REQUIRED>

So there is a query, where you pass in the moniker of the repo, and the last serial number you got, an empty one if starting from scratch. If your serial number is different from the current one, you will get back new data, else you'll just get back a 'no changes' indicator.

So the reply indicates a result of Failed, NoChanges, or NewData. If NewData then you get back a new serial number (else ignore it), and the body of the reply messages is the XML'ized database, which has been first ZLib compressed, and then Base64 encoded.

So, you will get the message body text, and Base64 decode it to a binary buffer. You'll then ZLib decompress that to another binary buffer. And that should be the UTF-8 encoded XML data which you can pass to your XML parser and parse out.

The XML format is kept reasonably compact, so reduce size. The names are short and no namespace prefixes are used. Though I may have missed a couple, any values that are just the default value are not formatted out, so that we don't pay the price for transmitting redundant data. I'll post a DTD below that you can use to both validate and to provide the non-transmitted default values, so that your parsed XML will have all of the values present. This can make it easier to on you when parsing it into whatever your own representation is.

Here is a sample of the XML. In this case movies only. There can be movies, music, or both. I've chopped down the cast and description values on the collections to keep it much shorter.

Code:
<MediaDB>
<Movie>
<Imgs Cnt="7">
<Img LrgPId="e1b3f5bb-f402-455c-90b3-90963c0d9f26Lrg" SmlPId="e1b3f5bb-f402-455c-90b3-90963c0d9f26Sml" Id="2" UID="e1b3f5bb-f402-455c-90b3-90963c0d9f26"></Img>
<Img LrgPId="a6dc55f1-4b4f-48d6-b34b-8cd306a6168bLrg" SmlPId="a6dc55f1-4b4f-48d6-b34b-8cd306a6168bSml" Id="3" UID="a6dc55f1-4b4f-48d6-b34b-8cd306a6168b"></Img>
<Img LrgPId="7ea80737-9d0c-466e-b858-901d2d98db69Lrg" SmlPId="7ea80737-9d0c-466e-b858-901d2d98db69Sml" Id="4" UID="7ea80737-9d0c-466e-b858-901d2d98db69"></Img>
<Img LrgPId="ea940e71-e50e-49f5-bfe6-69a1bec89691Lrg" SmlPId="ea940e71-e50e-49f5-bfe6-69a1bec89691Sml" Id="5" UID="ea940e71-e50e-49f5-bfe6-69a1bec89691"></Img>
<Img LrgPId="6804867a-780b-4766-9894-747b8ce56ab2Lrg" SmlPId="6804867a-780b-4766-9894-747b8ce56ab2Sml" Id="6" UID="6804867a-780b-4766-9894-747b8ce56ab2"></Img>
<Img LrgPId="5ca2d385-449d-484b-a9d7-e9a4827b9abcLrg" SmlPId="5ca2d385-449d-484b-a9d7-e9a4827b9abcSml" Id="7" UID="5ca2d385-449d-484b-a9d7-e9a4827b9abc"></Img>
<Img LrgPId="931379dd-4043-4a10-bf19-1cc313b20a1eLrg" SmlPId="931379dd-4043-4a10-bf19-1cc313b20a1eSml" Id="8" UID="931379dd-4043-4a10-bf19-1cc313b20a1e"></Img>
</Imgs>
<Cats Cnt="12">
<Cat Id="1" Name="All Movies" UID="ALL MOVIES"></Cat>
<Cat Id="11" Name="Martial Arts" UID="MARTIAL ARTS"></Cat>
<Cat Id="12" Name="Science-Fiction" UID="SCIENCE-FICTION"></Cat>
<Cat Id="13" Name="Action" UID="ACTION"></Cat>
<Cat Id="14" Name="Drama" UID="DRAMA"></Cat>
<Cat Id="15" Name="Comedy" UID="COMEDY"></Cat>
<Cat Id="16" Name="Romance" UID="ROMANCE"></Cat>
<Cat Id="17" Name="Suspense/Thriller" UID="SUSPENSE/THRILLER"></Cat>
<Cat Id="18" Name="Crime" UID="CRIME"></Cat>
<Cat Id="19" Name="Fantasy" UID="FANTASY"></Cat>
<Cat Id="20" Name="Foreign" UID="FOREIGN"></Cat>
<Cat Id="21" Name="Mystery" UID="MYSTERY"></Cat>
</Cats>
<Items Cnt="7">
<Item Artist="Andy Wachowski" Id="2" Name="Movie" UID="MyMvTitle-11-1"><InCats></InCats></Item>
<Item Artist="Anand Tucker" Id="3" Name="Movie" UID="MyMvTitle-21-1"><InCats></InCats></Item>
<Item Artist="George Armitage" Id="4" Name="Movie" UID="MyMvTitle-31-1"><InCats></InCats></Item>
<Item Artist="Harold Ramis" Id="5" Name="Movie" UID="MyMvTitle-41-1"><InCats></InCats></Item>
<Item Artist="Ang Lee" Id="6" Name="Movie" UID="MyMvTitle-61-1"><InCats></InCats></Item>
<Item Artist="Ron Howard" Id="7" Name="Movie" UID="MyMvTitle-71-1"><InCats></InCats></Item>
<Item Artist="Jason Reitman" Id="8" Name="Movie" UID="MyMvTitle-81-1"><InCats></InCats></Item>
</Items>
<Cols Cnt="7">
<Col Ana="N" IsPL="N" Secs="8160" Year="1999" LType="FileCol" AR="2.35:1" Artist="Andy Wachowski" Lab="Warner Bros." LAct="Keanu Reeves" Loc="\\MARY\ExtMedia1\MainMovie\10 Years\VIDEO_TS\VIDEO_TS.IFO" Fmt="DVD" Rat="R" UPC="085391163176" Id="2" ArtId="2" Name="Disc 1" UID="MyMvTitle-11"><InCats>1 11 12 13 </InCats><CItems>2 </CItems><Cast>Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving </Cast><Desc>Perception: Our day-in, day-out world is real...</Desc></Col>
<Col Ana="N" IsPL="N" Secs="6240" Year="2005" LType="FileCol" AR="2.35:1" Artist="Anand Tucker" Lab="Touchstone Pictures" LAct="Steve Martin" Loc="\\MARY\IntMedia1\MainMovie\Shop Girl\VIDEO_TS\VIDEO_TS.IFO" Fmt="DVD" Rat="R" UPC="786936282986" Id="3" ArtId="3" Name="Disc 1" UID="MyMvTitle-21"><InCats>1 14 15 16 </InCats><CItems>3 </CItems><Cast>Steve Martin, Claire Danes, Jason Schwartzman</Cast><Desc>Based on Steve Martin's best-selling novella...</Desc></Col>
<Col Ana="N" IsPL="N" Secs="6420" Year="1997" LType="FileCol" AR="1.85:1" Artist="George Armitage" Lab="Caravan Pictures" LAct="John Cusack" Loc="\\MARY\IntMedia1\MainMovie\Gross Pointe Blank\VIDEO_TS\VIDEO_TS.IFO" Fmt="DVD" Rat="R" UPC="717951000408" Id="4" ArtId="4" Name="Disc 1 Grosse Pointe Blank" UID="MyMvTitle-31"><InCats>1 17 18 15 16 </InCats><CItems>4 </CItems><Cast>John Cusack, Minnie Driver</Cast><Desc>Here's the killer comedy hit ...</Desc></Col>
<Col Ana="N" IsPL="N" Secs="5580" Year="2000" LType="FileCol" AR="2.35:1" Artist="Harold Ramis" Lab="20th Century Fox" LAct="Brendan Fraser" Loc="\\MARY\ExtMedia1\FullDisc\Bedazzled\VIDEO_TS\VIDEO_TS.IFO" Fmt="DVD" Rat="PG-13" UPC="024543008132" Id="5" ArtId="5" Name="Disc 1" UID="MyMvTitle-41"><InCats>1 19 15 16 </InCats><CItems>5 </CItems><Cast>Brendan Fraser, Elizabeth Hurley, Frances O'Connor</Cast><Desc>The Devil's never been so ...</Desc></Col>
<Col Ana="N" IsPL="N" Secs="7440" Year="1994" LType="FileCol" AR="1.85:1" Artist="Ang Lee" Lab="Metro-Goldwyn-Mayer Pictures" LAct="Sihung Lung" Loc="\\MARY\IntMedia1\MainMovie\Eat Drink Man Woman\VIDEO_TS\VIDEO_TS.IFO" Fmt="DVD" Rat="Unrated" UPC="027616867858" Id="6" ArtId="6" Name="Disc 1" UID="MyMvTitle-61"><InCats>1 14 20 15 16 </InCats><CItems>6 </CItems><Cast>Sihung Lung, Yu-Wen Wang, </Cast><Desc>From celebrated director Ang Lee...</Desc></Col>
<Col Ana="N" IsPL="N" Secs="8940" Year="2006" LType="FileCol" AR="1.33:1" Artist="Ron Howard" Lab="Sony Pictures Home Entertainment" LAct="Tom Hanks" Loc="\\MARY\ExtMedia1\MainMovie\The Da Vinci Code\VIDEO_TS\VIDEO_TS.IFO" Fmt="DVD" Rat="PG-13" UPC="043396150362" Id="7" ArtId="7" Name="Disc 2" UID="MyMvTitle-71"><InCats>1 21 17 14 </InCats><CItems>7 </CItems><Cast>Tom Hanks, Audrey Tautou</Cast><Desc>Dan Brown's international bestseller comes alive "</Desc></Col>
<Col Ana="N" IsPL="N" Secs="5760" Year="2007" LType="FileCol" AR="1.85:1" Artist="Jason Reitman" Lab="Fox Searchlight Pictures" LAct="Ellen Page" Loc="\\MARY\IntMedia1\MainMovie\Juno\VIDEO_TS\VIDEO_TS.IFO" Fmt="DVD" Rat="PG-13" UPC="024543506874" Id="8" ArtId="8" Name="Disc 1" UID="MyMvTitle-81"><InCats>1 14 15 16 </InCats><CItems>8 </CItems><Cast>Ellen Page, Michael Cera, </Cast><Desc>Don't miss the outrageously ...</Desc></Col>
</Cols>
<Sets Cnt="7">
<Titl Ana="N" Added="3153DC6A4A8000" URat="9" Year="1999" Artist="Andy Wachowski" STitle="MATRIX, THE 01" Id="2" Name="The Matrix" UID="MyMvTitle-1"><CCols>2 </CCols></Titl>
<Titl Ana="N" Added="3153DC6A4A8000" URat="10" Year="2005" Artist="Anand Tucker" STitle="SHOPGIRL" Id="3" Name="Shopgirl" UID="MyMvTitle-2"><CCols>3 </CCols></Titl>
<Titl Ana="N" Added="3153DC6A4A8000" URat="8" Year="1997" Artist="George Armitage" STitle="GROSSE POINTE BLANK" Id="4" Name="Grosse Pointe Blank" UID="MyMvTitle-3"><CCols>4 </CCols></Titl>
<Titl Ana="N" Added="3153DC6A4A8000" Year="2000" Artist="Harold Ramis" STitle="BEDAZZLED" Id="5" Name="Bedazzled" UID="MyMvTitle-4"><CCols>5 </CCols></Titl>
<Titl Ana="N" Added="3153DC6A4A8000" Year="1994" Artist="Ang Lee" STitle="EAT DRINK MAN WOMAN" Id="6" Name="Yin shi nan nu" UID="MyMvTitle-6"><CCols>6 </CCols></Titl>
<Titl Ana="N" Added="3153DC6A4A8000" Year="2006" Artist="Ron Howard" STitle="DA VINCI CODE, THE" Id="7" Name="The Da Vinci Code" UID="MyMvTitle-7"><CCols>7 </CCols></Titl>
<Titl Ana="N" Added="3153DC6A4A8000" Year="2007" Artist="Jason Reitman" STitle="JUNO" Id="8" Name="Juno" UID="MyMvTitle-8"><CCols>8 </CCols></Titl>
</Sets>
</Movie>
</MediaDB>
Dean Roddey
Explorans limites defectum
Reply
#3
Everything refers to other stuff via numeric ids. So, the InCats element contains a list of numeric ids of the categories that collection belongs to. CItems is the list of item ids that belong to that collection. CCols is a list of the numeric ids for the collections that belong to a title. These numeric ids only apply to the current database. If you download new data, they could all change, and probably will in most cases.

For collections the IsPL value indicates if the collection is a playlist or not. If so, then it doesn't 'own' any of the items it contains. It's only referencing them. There will be non-playlist collections that own all of the items, and possibly playlists that reference them as well.

Everything will have a UID (unique id) but except for images they will tend to be just made up things. If the repo source provides some sort of id that will be used. For images, they are the persistent ids of the images. I'm actually returning the individual ids for the small, large and poster art for the images as well, which I can probably just remove since you don't need those. You will just use the UID, and indicate the particular image you want. In most cases the 'sub-IDs' will just be the main UID with some suffix, as is the case in the above example.


Here is the DTD:

Code:
<?xml encoding="ISO-8859-1"?>

<!ELEMENT   Cast    (#PCDATA)>
<!ELEMENT   CCols   (#PCDATA)>
<!ELEMENT   CItems  (#PCDATA)>
<!ELEMENT   Desc    (#PCDATA)>
<!ELEMENT   InCats  (#PCDATA)>

<!-- Images -->
<!ELEMENT   Img EMPTY>
<!ATTLIST   Img
            LrgPId  CDATA ""
            SmlPId  CDATA ""
            PosPId  CDATA ""
            Id      CDATA #REQUIRED
            UID     CDATA #REQUIRED>

<!ELEMENT   Imgs    (Img*)>
<!ATTLIST   Imgs
            Cnt     CDATA #REQUIRED>


<!-- Categories -->
<!ELEMENT   Cat EMPTY>
<!ATTLIST   Cat
            Id      CDATA #REQUIRED
            Name    CDATA #REQUIRED
            UID     CDATA #REQUIRED>

<!ELEMENT   Cats (Cat*)>
<!ATTLIST   Cats
            Cnt     CDATA #REQUIRED>


<!-- Items -->
<!ELEMENT   Item (InCats)>
<!ATTLIST   Item
            Artist  CDATA   #REQUIRED
            Secs    CDATA   '0'
            Loc     CDATA   ''
            Id      CDATA   #REQUIRED
            Name    CDATA   #REQUIRED
            UID     CDATA   #REQUIRED
            BitD    CDATA   '0'
            BitR    CDATA   '0'
            Chs     CDATA   '0'
            URat    CDATA   '0'
            SRate   CDATA   '0'
            Year    CDATA   '0'>

<!ELEMENT   Items   (Item*)>
<!ATTLIST   Items
            Cnt     CDATA #REQUIRED>


<!-- Collections -->
<!ELEMENT   Col (InCats?, CItems, Cast?, Desc?)>
<!ATTLIST   Col
            Ana     (Y|N)   'N'
            IsPL    (Y|N)   'N'
            Year    CDATA   '0'
            Secs    CDATA   '0'
            Artist  CDATA   #REQUIRED
            Id      CDATA   #REQUIRED
            ArtId   CDATA   '0'
            Name    CDATA   #REQUIRED
            UID     CDATA   #REQUIRED

            LType   (FileCol|FileItem|Changer) #REQUIRED
            AR      CDATA   #REQUIRED
            Lab     CDATA   ''
            LAct    CDATA   ''
            Loc     CDATA   ''
            Fmt     CDATA   ''
            Rat     CDATA   'None'
            ASIN    CDATA   ''
            UPC     CDATA   ''>

<!ELEMENT   Cols    (Col*)>
<!ATTLIST   Cols
            Cnt     CDATA #REQUIRED>




<!-- Titles -->
<!ELEMENT   Titl    (CCols)>

<!ATTLIST   Titl
            Ana     (Y|N)   'N'
            Year    CDATA   '0'
            Artist  CDATA   #REQUIRED
            Id      CDATA   #REQUIRED
            ArtId   CDATA   '0'
            Name    CDATA   #REQUIRED
            STitle  CDATA   #REQUIRED
            UID     CDATA   #REQUIRED
            SeqNum  CDATA   '0'

            BitD    CDATA   '0'
            BitR    CDATA   '0'
            Chs     CDATA   '0'
            URat    CDATA   '0'
            SRate   CDATA   '0'
            Added   CDATA   '0'>


<!ELEMENT   Sets    (Titl*)>
<!ATTLIST   Sets
            Cnt     CDATA #REQUIRED>


<!-- The main elements -->
<!ELEMENT   Music   (Imgs, Cats, Items, Cols, Sets)>
<!ELEMENT   Movie   (Imgs, Cats, Items, Cols, Sets)>
<!ELEMENT   MediaDB (Music?, Movie?)>
Dean Roddey
Explorans limites defectum
Reply
#4
I just realized that the QueryMediaRepoArt msg, which is still there as mentioned since you still need to download artwork, isn't going to work as it is. It still expects a cookie, but you don't deal in cookies anymore when you have the data yourself. It will need to be changed to use UID instead.

I'll fix that for the next drop. Sorry about that.
Dean Roddey
Explorans limites defectum
Reply
#5
OK, I got the image download stuff working with the ids instead. So those are now:

Code:
<!ELEMENT CQCGW:QueryMediaArt EMPTY>
<!ATTLIST CQCGW:QueryMediaArt
          CQCGW:Moniker CDATA #REQUIRED
          CQCGW:MType (Music | Movie) #REQUIRED
          CQCGW:Size (Sml | Lrg) 'Sml'
          CQCGW:UID CDATA #REQUIRED
          CQCGW:SID CDATA #REQUIRED>

<!ELEMENT CQCGW:QueryMediaRendArt EMPTY>
<!ATTLIST CQCGW:QueryMediaRendArt
          CQCGW:Size (Sml | Lrg) 'Sml'
          CQCGW:Moniker CDATA #REQUIRED>

<!ELEMENT CQCGW:MediaImgData (#PCDATA)>
<!ATTLIST CQCGW:MediaImgData
          CQCGW:Bytes CDATA #REQUIRED
          CQCGW:Result (Failed | NoChanges | NewData) #REQUIRED
          CQCGW:SID CDATA ''
          CQCGW:Type (PNG | JPEG | BMP | Unknown) #REQUIRED>

You can still query current art from renderers (QuerymediaRendArt), but the old repo art query is now replaced by QueryMediaArt.

You provide the UID and the size specific id (empty if querying it for the first time, i.e. not just checking for changes but haven't gotten this image yet), so ignore what I said above about removing those size specific ids, you do need them because that lets me know if the image has changed since you asked last time you checked it or not. The UID lets me look up the overall image, and the size specific id will change if the image has changed.

In some repos, as I mentioned, the size specific ones are just the main UID with a size indicator added, or maybe not even that just the same ID, because both images are created from the same one, so if one changed they both changed. But in others, where there are separate thumbs and large art that be loaded, the ids can be different. You indicate media type and image size type as well.

The reply now has a Result value and, if doing the QueryMediaArt call and there is new data, you will get back the new size specific id which you can store away in your image cache for later use if you query the image again. If querying renderer art, the SID is not used in the reply message.

The Result value indicates if no image was found or it couldn't be loaded, or it was found but it's not changed since you last asked, or there is now data and a new SID being returned.
Dean Roddey
Explorans limites defectum
Reply
#6
Here is the updated XML Gateway technical doc. Really the only thing changed is the media stuff, which is towards the end.

http://www.charmedquark.com/Web2/Downloa...ay_4_5.pdf
Dean Roddey
Explorans limites defectum
Reply
#7
The 4.4.928 version just posted reflects the above technical doc stuff. So it should be possible now to update a room config based application.
Dean Roddey
Explorans limites defectum
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Media Center Plug-in potts.mike 19 19,855 12-15-2009, 04:02 PM
Last Post: damian.flynn

Forum Jump:


Users browsing this thread: 1 Guest(s)