2 Replies Latest reply on Jul 3, 2012 7:25 AM by murphysm

    Detect present rating

    Pedro Cortez Marques Level 3

      I want a function to detect if the info of an image (not new, but opened from the disk) has indicated a rating (1, 2, 3, 4 or 5 stars)?

       

      I want to open the ACR and (only in some images) mark them with 1 star.

      In photoshop, when they are all already opened, I want to diferenciate a behavior of the script depending on the detection of the rating (stars).

       

      Is this possible?

       

      Tks

        • 1. Re: Detect present rating
          c.pfaffenbichler Level 9

          Does this work?

          // from a post by michael l hale;
          var rating = app.activeDocument.xmpMetadata.rawData.toString().match(/\<xmp:Rating\>(.+)\<\/xmp:Rating\>/)[1];
          alert (rating);
          
          • 2. Re: Detect present rating
            murphysm

            Here is some code that our developer created.  It views the documents photoshop rating and saves to a new location with a new name based on the rating.  It works great.  Oh, and you'll see in there that a dialogue window pops up with radio buttons if no photoshop rating is found.  Then the user can choose 1 - 5 based on where it should be going.

             

            loadXMPLibrary();

            var xmp = new XMPMeta(docRef.xmpMetadata.rawData);

            documentRating = xmp.getProperty(XMPConst.NS_XMP, "Rating");

            var FillColour = new SolidColor;

            FillColour.rgb.hexValue = 'ffffff';

            app.backgroundColor= FillColour;

            if(documentRating!=undefined && documentRating.value!=0){

                hasRating = true;

            }

            else{

                var dlg = new Window("dialog", "Choose Position");

                dlg.alertBtnsPnl = dlg.add("panel", undefined, PANEL_MESSAGE_TEXT);

                dlg.alertBtnsPnl.p1Btn = dlg.alertBtnsPnl.add("radiobutton", undefined, positionStringArray[0]);

                dlg.alertBtnsPnl.p2Btn = dlg.alertBtnsPnl.add("radiobutton", undefined, positionStringArray[1]);

                dlg.alertBtnsPnl.p3Btn = dlg.alertBtnsPnl.add("radiobutton", undefined, positionStringArray[2]);

                dlg.alertBtnsPnl.p4Btn = dlg.alertBtnsPnl.add("radiobutton", undefined, positionStringArray[3]);

                dlg.alertBtnsPnl.p5Btn = dlg.alertBtnsPnl.add("radiobutton", undefined, positionStringArray[4]);

                dlg.alertBtnsPnl.p6Btn = dlg.alertBtnsPnl.add("radiobutton", undefined, positionStringArray[5]);

                dlg.alertBtnsPnl.okBtn = dlg.alertBtnsPnl.add("button", undefined, "OK", {name:"ok"});

                dlg.alertBtnsPnl.cancelBtn = dlg.alertBtnsPnl.add("button", undefined, "Cancel", {name:"cancel"});

                var dialogReturn = dlg.show();

                if(dialogReturn==1){//if dialogReturn is one, the ok button was clicked, if it equals 2 the cancel button was clicked

                    if(dlg.alertBtnsPnl.p1Btn.value){documentRating=1;};

                    if(dlg.alertBtnsPnl.p2Btn.value){documentRating=2;};

                    if(dlg.alertBtnsPnl.p3Btn.value){documentRating=3;};

                    if(dlg.alertBtnsPnl.p4Btn.value){documentRating=4;};

                    if(dlg.alertBtnsPnl.p5Btn.value){documentRating=5;};

                    if(dlg.alertBtnsPnl.p6Btn.value){documentRating=6;};

                }

            }

            if(documentRating==undefined){

                if(dialogReturn!=2){

                    alert ("You've failed to select a rating, please try again");

                }

            }

            else if(dialogReturn!=2){

                selRef.makeWorkPath(0);

                var thisWorkPath = docRef.pathItems.getByName("Work Path");

                thisWorkPath.makeSelection();

                try{

                    var existingWorkPath = docRef.pathItems.getByName(PATH_TEXT);

                    existingWorkPath.remove();

                }

                catch(e){

                }

                thisWorkPath.name = PATH_TEXT;

                xmp.setProperty(XMPConst.NS_XMP, "Rating", documentRating);

                docRef.xmpMetadata.rawData = xmp.serialize(XMPConst.SERIALIZE_USE_COMPACT_FORMAT);