Current version of announceEmail.pl
[clearscm.git] / bin / setbg
index 01fda58..85479a5 100755 (executable)
--- a/bin/setbg
+++ b/bin/setbg
@@ -32,7 +32,7 @@ $Date: 2012/11/09 15:31:30 $
 
  Usage: setbg [-u|sage] [-h|elp] [-ve|rbose] [-d|ebug] [-s|leep <n>]
               [-bgdirs <bgdir> -bgdirs ...]
+
  Where:
 
  -u|sage:      Displays this usage
@@ -130,11 +130,14 @@ sub fillPictures () {
   $totals{bgdirs} = 0;
 
   for (@{$opts{bgdirs}}) {
-    my @pics = `find "$_" -type f -name "*.jpg"`;
+    my ($status, @pics) = Execute "find \"$_/\" -type f";
 
     chomp @pics;
 
-    push @images, @pics;
+    push @images, grep(/jpg$|png$|gif$/i, @pics);
+
+    @pics = grep(/jpg$|png$|gif$/i, @pics);
+
     push @{$opts{bgdircnt}}, scalar @pics;
 
     $totals{bgdirs}++;
@@ -142,10 +145,25 @@ sub fillPictures () {
 
   $totals{images} = scalar @images;
 
+  displayStats;
+
   return @images;
 } # fillPictures
 
-sub updateSetBG ($$) {
+sub writeHistory($) {
+  my ($msg) = @_;
+
+  open my $hist, '>>', "$ENV{HOME}/.$FindBin::Script.hist"
+    or error "Unable to open $ENV{HOME}/.$FindBin::Script.hist for append - $!", 1;
+
+  $msg = localtime() . $msg;
+
+  display $msg, $hist;
+
+  close $hist;
+} # writeHistory
+
+sub updateSetBG($$) {
   my ($bgimage, $lockimage) = @_;
 
   open my $setbg, '>', "$ENV{HOME}/.$FindBin::Script"
@@ -155,15 +173,10 @@ sub updateSetBG ($$) {
 
   close $setbg;
 
-  my $msg  = localtime() . ':$bgimage';
+  my $msg  = ":$bgimage";
      $msg .= " lock:$lockimage" if $opts{lockscreen};
 
-  open my $hist, '>>', "$ENV{HOME}/.$FindBin::Script.hist"
-    or error "Unable to open $ENV{HOME}/.$FindBin::Script.hist for append - $!", 1;
-
-  display $msg, $hist;
-
-  close $hist;
+  writeHistory $msg;
 
   return;
 } # updateSetBG
@@ -191,6 +204,7 @@ GetOptions (
   'sleep=i',
   'lockscreen',
   'bgdirs=s@',
+  'mate',
 ) || Usage;
 
 local $0 = "$FindBin::Script " . join ' ', @argvCopy;
@@ -212,8 +226,16 @@ for (my $i = 0; $i < scalar @{$opts{bgdirs}}; $i++) {
 
 # Using gsettings
 my $setbg       = "gsettings";
-my $setbgOpts   = "set org.gnome.desktop.background picture-uri \"file://";
-my $setLockOpts = "set org.gnome.desktop.screensaver picture-uri \"file://";
+
+my ($setbgOpts, $setLockOpts);
+
+if ($opts{mate}) {
+  $setbgOpts   = 'set org.mate.background picture-filename ';
+  $setLockOpts = 'set org.mate.background picture-filename ';
+} else {
+  $setbgOpts   = "set org.gnome.desktop.background picture-uri \"file://";
+  $setLockOpts = "set org.gnome.desktop.screensaver picture-uri \"file://";
+} # if
 
 my @images = fillPictures;
 
@@ -229,37 +251,56 @@ truncate "$ENV{HOME}/.$FindBin::Script.hist", 0;
 
 EnterDaemonMode unless defined $DB::OUT;
 
+my $pickNewImages = 1;
+my ($bgimage, $lockimage);
+
 while () {
-  my $bgimage   = escapeHTML ($images[int (rand $#images)]);
-  my $lockimage = escapeHTML ($images[int (rand $#images)]);
+  if ($pickNewImages) {
+    $bgimage   = escapeHTML ($images[int (rand $#images)]);
+    $lockimage = escapeHTML ($images[int (rand $#images)]);
+  } # if
 
-  my $cmd = "$setbg $setbgOpts$bgimage\" 2> /dev/null";
+  my $monitorIsOn;
 
-  my @output = `$cmd`;
+  my ($status, @output) = Execute("xset q | grep Monitor | awk '{print \$3}'");
 
-  if ($? != 0) {
-    error "Trying to set background - command used \"$cmd\"\n\nOutput\n\n" . 
-      join "\n", @output;
-    $totals{errors}++;
+  if ($status or $output[0] eq 'Off') {
+    writeHistory ":Monitor off, not setting background to $bgimage - will keep trying";
+
+    $pickNewImages = 0;
   } else {
-    $totals{'Images displayed'}++;
-  } # if
+    $pickNewImages = 1;
 
-  if ($opts{lockscreen}) {
-    $cmd = "$setbg $setLockOpts$lockimage\" 2> /dev/null";
+    my $cmd = $opts{mate} ? "$setbg $setbgOpts\"$bgimage\" 2> /dev/null"
+                          : "$setbg $setbgOpts$bgimage\" 2> /dev/null";
 
-    @output = `$cmd`;
+    ($status, @output) = Execute $cmd;
 
-    if ($? != 0) {
-      error "Trying to set lock screen - command used \"$cmd\"\n\nOutput\n\n" .
+    if ($status) {
+      error "Trying to set background - command used \"$cmd\"\n\nOutput\n\n" . 
         join "\n", @output;
       $totals{errors}++;
     } else {
-      $totals{'Lock screens displayed'}++;
+      $totals{'Images displayed'}++;
     } # if
-  } # if
 
-  updateSetBG $bgimage, $lockimage;
+    if ($opts{lockscreen}) {
+      $cmd = $opts{mate} ? "$setbg $setLockOpts\"$lockimage\" 2> /dev/null"
+                         : "$setbg $setLockOpts$lockimage\" 2> /dev/null";
+
+      ($status, @output) = Execute $cmd;
+
+      if ($status != 0) {
+        error "Trying to set lock screen - command used \"$cmd\"\n\nOutput\n\n" .
+          join "\n", @output;
+        $totals{errors}++;
+      } else {
+        $totals{'Lock screens displayed'}++;
+      } # if
+    } # if
+
+    updateSetBG $bgimage, $lockimage;
+  } # if
 
   displayStats;