I know it's been asked before but it was a while ago....

kelack

TPer Emerita - But she's back!
Messages
10,607
Name
Kelly
Edit My Images
Yes
Need to get myself a small laptop/netbook type thing for taking to matches with me. Plus, can LR ingest locked files yet?
 
Man up and learn Photo Mechanic! :p

Depending on your budget, the Dell XPS 13" laptops are brilliant. I managed to pick up one via the Outlet store for basically just over half price (£600 ish).
 
It's not about "manning up". It's about cost of something when I already have paid for software.

And £600 is way above my budget. 13" is possibly too big for my needs. I will only need it pitchside. I have a laptop at home for everything else
 
The manning up part was a joke! Tobers is your best source of info Re Lightroom, if there's a way to ingest locked files, he'll have found it! :)

The other part of your problem is that LR probably won't run on anything my smaller than a 13" screen due to the resolution requirements.
 
Ah ok, I assumed that for it to be a joke it needed to be funny ;)

I'll speak to Tobers

And ok. Then a 13" will have to do but 600 is still way above my budget.
 
Lightroom can ingest locked images with a plugin that I found through Tobers' website. From tile barn I think? It's great. You just need to set up a folder for Lightroom to watch then use the plugin to drag the locked images to that folder, once they appear in that folder Lightroom drags them in.

I know you said Photo Mechanic isn't an option but I've just switched to PM as it's just much easier to navigate round and add captions in my opinion. The text auto replace is much easier to use too.

Only thing with Lightroom you can do everything in one app, with PM you have to export to PS to tweak levels, sharpen etc. I think?
 
Is the Lightroom iPad app an option? A tablet would seem the best in terms of portability and likely battery life.
 
John at Tilebarn has some excellent plugins for Lightroom but unfortunately his website no longer accepts payments. I've tried contacting him with no luck.

http://www.tilebarn.com/lightroom/index.php

You can use AutoCopy to ingest locked files into Lightroom if you can live with the nag screen. Unfortunately the AutoReplace trial isn't much use and there is currently no way of purchasing the full version.

Does anyone know John? I hope he is okay.
 
Is the Lightroom iPad app an option? A tablet would seem the best in terms of portability and likely battery life.

A tablet just isn't feasible pitchside, I've already attempted that with my own tablet

John at Tilebarn has some excellent plugins for Lightroom but unfortunately his website no longer accepts payments. I've tried contacting him with no luck.

http://www.tilebarn.com/lightroom/index.php

You can use AutoCopy to ingest locked files into Lightroom if you can live with the nag screen. Unfortunately the AutoReplace trial isn't much use and there is currently no way of purchasing the full version.

Does anyone know John? I hope he is okay.

Thanks Paul and welcome to the forum :wave:

I think Tobers mentioned this plugin a while back, it sounds familiar.
 
The text auto replace is much easier to use too.

because of this.. i needed to expand.. to use in email body and subject for example ..so i now use AUTOHOTKEY for everyhting.. including PM
 
Lightroom can ingest locked images with a plugin that I found through Tobers' website. From tile barn I think? It's great. You just need to set up a folder for Lightroom to watch then use the plugin to drag the locked images to that folder, once they appear in that folder Lightroom drags them in.

I know you said Photo Mechanic isn't an option but I've just switched to PM as it's just much easier to navigate round and add captions in my opinion. The text auto replace is much easier to use too.

Only thing with Lightroom you can do everything in one app, with PM you have to export to PS to tweak levels, sharpen etc. I think?

Sorry, missed this reply. PM really isn't an option at the moment. I can't justify paying another 100odd quid on something when I have LR already plus as you say, I do like the ability to do everything in it
 
Would love to but I need to go down the monthly installment route :(
 
I got a copy of Tilebarns auto copy for LR that i can email you if you want
 
All you need is on my blog.

I use Tilebarn's AutoCopy to copy locked files into a folder that LR is watching, which then sucks them into the LR catalogue automatically. For code replacements, Tilebarn's AutoReplace utility is the one I use, but I think there are other keyboard abbreviation utilities out there.
 
Great blog Tobers. I've been trying to contact John at Tilebarn for a while with no success so it seems like AutoReplace is no longer available. I'm going to look into using AutoHotKey later today which Kipax mentioned he uses and I believe it will get the job done, but it seems a shame for John to miss out on sales and us on a great piece of software because of a technical problem with his website.
 
All you need is on my blog.

I use Tilebarn's AutoCopy to copy locked files into a folder that LR is watching, which then sucks them into the LR catalogue automatically. For code replacements, Tilebarn's AutoReplace utility is the one I use, but I think there are other keyboard abbreviation utilities out there.
 
Hi,

I am a big fan of AutoCopy from Tile Barn. Does someone knows how to contact the developer to get a full version?
Unfortunately, on the website it does not work.

Greetings from Switzerland
 
I forgot that I wrote my own version of AutoCopy in Java. Here's the source code. I used NetBeans to create the .jar file. You'll find a bit of hard coding of directory paths in the source which you'll need to adapt. Also there's an ini file but I can't find it at the moment - the content of the ini file should be obvious from the code.

What this does is check the given folder for any files, and if there are any it sees if it has already imported them. If not, it looks to see if the files have the lock but set and if so, it copies it to the designated folder.

Code:
package AndysAutoCopy;
import java.io.IOException;
import java.nio.file.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.nio.file.attribute.DosFileAttributes;
import java.awt.Toolkit;
import java.io.File;
import java.util.Properties;
import java.io.InputStream;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;


public class AndysAutoCopy {

    public static void main(String[] args) throws IOException {
       // Declare the variables
       String sourceDirectory;
       String destinationDirectory;
       String additionalDestinationDirectory;
       Properties iniFile = new Properties();
       InputStream iniFileInput = null;
       File sourceFolder;   //used for checking if the source folder exists
       File destinationFolder; //used for checking if the destination folder exists
       File additionalDestinationFolder; //used for checking if the second destination folder exists
      
       // Initialise the variables. Note loggingLevel is 0 for system type errors, 1 for status updates and 2 for verbose
       GlobalCounters.totalFilesCopied = 0;
       GlobalCounters.loggingLevel = 0;
       GlobalCounters.checkingInterval = 0;
       GlobalCounters.numberOfChecks = 0;
       GlobalCounters.listOfAllCopiedFiles = new ArrayList();  //Clears list of all files copied
      
              // Confirm execution has started
       LogMessage("Checking File Status",1);
      
      
       // Read the AndysAutoCopy.ini file to get the source, destination & other variables
       try {
          
            //Set up the ini file
           //iniFileInput = new FileInputStream("d:\\utils\\AndysAutoCopy\\AndysAutoCopy.ini");
           iniFileInput = new FileInputStream("AndysAutoCopy.ini");
          
           //Load the ini file
           iniFile.load(iniFileInput);
          
           //Read the source and destination directories
           sourceDirectory = iniFile.getProperty("sourceDirectory");
           destinationDirectory = iniFile.getProperty("destinationDirectory");
           additionalDestinationDirectory = iniFile.getProperty("additionalDestinationDirectory");
           GlobalCounters.loggingLevel = Integer.parseInt(iniFile.getProperty("loggingLevel"));
           GlobalCounters.checkingInterval = Integer.parseInt(iniFile.getProperty("checkingInterval"));
          
           //Display them just to be sure they are OK
           LogMessage("Source directory is " + sourceDirectory,1);
           LogMessage("Destination directory is " + destinationDirectory,1);
           LogMessage("Additional destination directory is " + additionalDestinationDirectory,1);
           LogMessage("Error logging level is " + GlobalCounters.loggingLevel,1);
           LogMessage("Checking interval is " + GlobalCounters.checkingInterval,1);
           LogMessage("",1);
          
       } catch (IOException ex) {
           LogMessage("Error opening ini file",0);
           ex.printStackTrace();
           return;
       }
      
       // Check the destination directories exist. If not, post message and abort.
       destinationFolder = new File(destinationDirectory);
       additionalDestinationFolder = new File(additionalDestinationDirectory);
      
       if (destinationFolder.exists() == false){
           LogMessage("Destination directory does not exists: " + destinationDirectory,0);
           LogMessage("Aborting",0);
           System.exit(0);
       }
      
       if (additionalDestinationFolder.exists() == false){
           LogMessage("Additional destination directory does not exists: " + additionalDestinationDirectory,0);
           LogMessage("Aborting",0);
           System.exit(0);
       }
      
       //Start the checking loop. Do we make the loop infinite?
       //If the source directory exists, check it. If not, it indicates the card hasn't been inserted
       sourceFolder = new File(sourceDirectory);
      
       while(true){
          
           GlobalCounters.numberOfChecks++;
          
           if (sourceFolder.exists()){
               //The folder does exist, so reset counters, make a beep noise and start checking for locked files.
               LogMessage(sourceFolder.getPath() + " exists - reading directory",1);
               Beeper();
               GlobalCounters.totalFilesCopied = 0;

               //Do the actual check here
               FindAndCopy(sourceDirectory, destinationDirectory, additionalDestinationDirectory);

               if (GlobalCounters.totalFilesCopied > 0) {
                   LogMessage("",1);
                   LogMessage("+++ File Copy Complete. " + GlobalCounters.totalFilesCopied + " files copied successfully",1);
                   LogMessage("",1);
               }
           }
           else {
               //Folder doesn't exist so log that and continue
               LogMessage("Checking loop " + GlobalCounters.numberOfChecks + ": " + sourceFolder.getPath() + " not found.",1);
           }

           LogMessage("Waiting to re-check",3);
            try {
                Thread.sleep(GlobalCounters.checkingInterval);
            } catch (InterruptedException ex) {
                Logger.getLogger(AndysAutoCopy.class.getName()).log(Level.SEVERE, null, ex);
            }
       }
    }     
 
    public static void Beeper() {
        /* Makes a beep noise using the standard windows default beep sound that can be changed in Control Panel */
        Toolkit.getDefaultToolkit().beep();
    }
 
    public static void FindAndCopy(String sourceDirectory, String destinationDirectory, String additionalDestinationDirectory) throws IOException{
        /* Get list of files in a directory. Note this is a recursive routine and */
        /* it will call itself if it finds a directory in the list of files. That */
        /* directory will then become the new sourceDirectory and so on until the */
        /* all files & directories in the tree have been exhausted.               */
      
        Path newFileLocation;
        Path oldFileLocation;
        Path additionalFileLocation;
      
        File folder = new File(sourceDirectory);
      
        // Get the list of files in the direcory
        File[] listOfFiles = folder.listFiles();
      
        LogMessage("Checking " + listOfFiles.length + " entries.", 2);
      
        //Loop through the list of files in this directory
        for (int i=0; i < listOfFiles.length; i++){
            //For each entry, check if it is a directory
          
            if (listOfFiles.isDirectory()) {
                //It is a directory, so run a recursive call to get all the files in this directory and so on
                LogMessage(listOfFiles.getPath() + " is a directory",3);
                FindAndCopy (listOfFiles.getPath(), destinationDirectory, additionalDestinationDirectory);
            }
            else {
                if (IsItReadOnly(listOfFiles.getPath())){
                    // File is read only so copy check if it has already been copied
                    //Need to loop through the list of files copied and see if this one has already been copied.
                    if (!GlobalCounters.listOfAllCopiedFiles.contains(listOfFiles.getName())) {
                      
                        //File hasn't been copied before, so go ahead and copy it now
                        oldFileLocation = FileSystems.getDefault().getPath(listOfFiles.getPath());
                        newFileLocation = FileSystems.getDefault().getPath(destinationDirectory, listOfFiles.getName());
                                              
                        if (Files.exists(newFileLocation)) {
                            LogMessage("Locked file " + oldFileLocation + " already exists - skipped",2);
                        }
                        else {
                            //Execute the actual file copy here
                          
                            Files.copy (oldFileLocation, newFileLocation);
                            LogMessage(">>> Locked file " + oldFileLocation + " copied to " + newFileLocation, 1);
                          
                            //Need to set the Read Only attribute to FALSE on the destination file otherwise LR doesn't pick it up.
                            Files.setAttribute(newFileLocation, "dos:readonly", false);
                            LogMessage(newFileLocation + " set to writable",2);
                          
                            if (additionalDestinationDirectory != null){
                                //User has asked for the file to also be copied to an additional place
                              
                                additionalFileLocation = FileSystems.getDefault().getPath(additionalDestinationDirectory, listOfFiles.getName());
                              
                                if (Files.exists(additionalFileLocation)) {
                                    LogMessage("File also exists in the additional location - skipped", 2);
                                }
                                else {
                                    // File doesn't exist in the destination directory, so execute the copy and set read only to FALSE
                                    LogMessage("Additional directory specified - copying..." + oldFileLocation + " to " + additionalFileLocation, 2);
                                    Files.copy(oldFileLocation, additionalFileLocation);
                                    Files.setAttribute(additionalFileLocation, "dos:readonly", false);
                                    LogMessage("...and also copied to " + additionalFileLocation, 1);
                                }
                            }

                            //Add the file name into the array of copied files to avoid repeat copying
                            GlobalCounters.listOfAllCopiedFiles.add(listOfFiles.getName());
                            LogMessage("Length of listOfAllCopiedFiles is " + GlobalCounters.listOfAllCopiedFiles.size(),3);
                            Beeper();
                            GlobalCounters.totalFilesCopied++;
                        }
                    }
                    else {
                        LogMessage(listOfFiles.getPath() + " already copied this session - skipped",2);
                    }
                }
                else {
                    LogMessage(listOfFiles.getPath() + " is NOT read only - skipped",3);
                }
            }   
        }
    }
 
    public static boolean IsItReadOnly(String TheFileName){
        /* Takes in a filename and checks if it is read only or not*/
        Path FilePath;
        DosFileAttributes TheDosFileAttributes = null;
        boolean ReadOnlyFlag;
      
        FilePath = java.nio.file.FileSystems.getDefault().getPath(TheFileName);
        try {
      
            TheDosFileAttributes = java.nio.file.Files.readAttributes(FilePath, DosFileAttributes.class);
            ReadOnlyFlag = TheDosFileAttributes.isReadOnly();
            return ReadOnlyFlag;
          
            } catch (IOException ex) {
                LogMessage("Error in IsItReadOnly trying to get that ReadOnlyFlag",0);
            Logger.getLogger(AndysAutoCopy.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
      
    }
 
 
 
    public static void LogMessage(String theMessage, int thisLogLevel){
        if (GlobalCounters.loggingLevel >= thisLogLevel){
            System.out.println(theMessage);
        }
    }
}
 
Last edited by a moderator:
If anyone wants the .java file then PM me with your email address and I'll send it over. I'm happy if anyone wants to take this and make something nice with it. I wrote it myself before the 2014 World Cup as I didn't want Tile Barn's AutoCopy to go wrong on me so I thought it better to be in total control of the situation.

This utility works on Windows. No idea if it works on Mac - probably not.
 
Last edited:
Back
Top