#!/bin/bash # set-photo.sh script for Mk2 PhotoFrame, last modified 28 Sept. 2016 # start by creating the required folders (don't matter if they already exist) sudo mkdir /photos sudo mkdir /photos/ram-disk # check if we need to add ram-disk to the fstab file mkram="tmpfs /photos/ram-disk tmpfs nodev,nosuid,size=5M 0 0" # (5M bytes should be plenty) if grep -Fxq "$mkram" /etc/fstab; then echo "ram-disk found in fstab, going for mount" else sudo sh -c "echo \"$mkram\" >> /etc/fstab" # alternate is: echo "$mkram" | sudo tee -a /etc/fstab > /dev/null fi # mount /photos/ram-disk to tmpfs sudo mount -a # show status (check if the /photos/ram-disk has 'mounted' to tmpfs) :- df -HT # create the buffer files (just in case we try to link before copying a photo) touch /photos/ram-disk/buffer1.jpg touch /photos/ram-disk/buffer2.jpg touch /photos/ram-disk/display.jpg # # check we have at least one photo while ![ ls -U /photos/*.jpg 1> /dev/null 2>&1 ]; do echo "waiting for jpgs in photos folder" sleep 5 done # # OK, we have a photo, lets go # # Select and copy the next photo into the free buffer and then updates the display alias # Source photos are held as thumbnails in the /photos/ folder (fetching and resizing is performed by the get-photo script) # Both buffers1&2.jpg and display.jpg are held in the /ram-disk/ folder (the actual display is performed by the fbi script) showtime=4 #photo show time -1 (so 4 = 5 seconds total) cfile="0" # current file name ctop="0" # current top by date nbuf="buffer1.jpg" # next (free) buffer # loop forever while [ true ]; do top="0" # no top found next="0" # no next found # Scan the photos dir for the current file for filename in $(ls -A1c /photos/*.jpg); do # note, when you ls a different folder, the path is added to each file name (so file is /photos/name.jpg ) if [ $top = "0" ]; then top=$filename if [ $filename != $ctop ]; then next=$filename; fi fi # find the next file AFTER the current if [ $next = "0" ]; then if [ $cfile = "0" ]; then next=$filename; fi if [ $filename = $cfile ]; then cfile="0"; fi fi done # if no next found, use top if [ $next = "0" ]; then next=$top; fi ctop=$top # OK, we have the next file, pause in case fbi is still reading the free buffer sleep 1 cp -f $next /photos/ram-disk/$nbuf cfile=$next if [ $nbuf = "buffer1" ] then; nbuf="buffer2.jpg" else nbuf="buffer1.jpg" fi # now switch the link on first pass should creates display.jpg) ln -s -f /photos/ram-disk/$nbuf /photos/ram-disk/display.jpg # wait for the rest of the show time sleep $showtime # now go find the next done