2 Replies Latest reply on Jul 19, 2016 12:59 PM by Awitmer

    Link Chaser, new multi-relink tool.

    Vamitul Level 4

      Hi guys!

      After seeing quite a few requests on the forum for a tool to relink multiple images to a different folder (and because i could also use something like this in my workflow) I whiped this up:

       

       

      function main() {
          var doc = app.activeDocument;
          var myLinks = doc.links.everyItem().getElements();
          var linkObj = {};
          // create inital object
          /* linkObject {
                          [path]{missingNr,
                                 arrayOfMissingLinks}
                                 } */
      
      
          for (var i = 0; i < myLinks.length; i++) {
              if (myLinks[i].status == LinkStatus.LINK_MISSING) {
                  var myPath = File(myLinks[i].filePath).path.toString();
                  if (linkObj[myPath] == undefined) {
                      linkObj[myPath] = {
                          missingNr: 1,
                          missingLinks: [myLinks[i]],
                          newPath: ''
                      }
      
      
                  } else {
                      linkObj[myPath].missingNr++;
                      linkObj[myPath].missingLinks.push(myLinks[i].getElements()[0]);
                  }
              }
          }
          //$.writeln(linkObj.toSource());
          var myDialog = new Window('dialog', 'Link Chaser:', undefined);
          var panel1 = myDialog.add('panel', undefined, 'Double click to select new path');
          panel1.align = ['fill', 'fill'];
          var myList = panel1.add('listBox', undefined, "", {
              columnWidths: [160, 160, 130],
              numberOfColumns: 3,
              showHeaders: true,
              columnTitles: ['Old Path', 'New Path', 'Nr. of missing links']
          });
          myList.size = [450, 200];
          myList.align = ['fill', 'fill'];
      
      
          for (var missingPath in linkObj) {
              with(myList.add('item', missingPath)) {
                  subItems[0].text = linkObj[missingPath].newPath;
                  subItems[1].text = linkObj[missingPath].missingNr;
              }
          }
          myList.onDoubleClick = function() {
              var myNewPath = (new Folder(app.activeDocument.filePath).selectDlg("Select New Folder") || '').toString();
              myList.selection.subItems[0].text = myNewPath;
              linkObj[myList.selection.text].newPath = myNewPath;
          }
          myDialog.add('button', undefined, "Ok", {
              name: "ok"
          });
          myDialog.add('button', undefined, "Cancel", {
              name: "cancel"
          });
          if (myDialog.show() == 1) {
              for (var i in linkObj) {
                  if (linkObj[i].newPath != '') {
                      var fixedNr = 0;
                      var links = linkObj[i].missingLinks
                      for (var j = 0; j < links.length; j++) {
                          var newFile = File(linkObj[i].newPath + "/" + links[j].name);
                          if (newFile.exists) {
                              fixedNr++;
                              links[j].relink(newFile);
                          }
      
      
                      }
                      alert('In folder:\n' + linkObj[i].newPath + '\n' +
                          'Fixed ' + fixedNr + ' links out of ' + linkObj[i].missingNr + '\n' +
                          'Please check');
                  }
              }
          };
      }
      app.doScript('main()', undefined, undefined, UndoModes.entireScript, "Link Chaser");
      
      

       

       

      It's really fresh, and i didn't do much testing on it, so please check it out and if you encounter problems let me know.

       

      Enjoy,

      Vlad