Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make screen blink when there is an unread email

I am looking for any way to make the entire screen blink red, or whatever color, when there is an unread email. It could be for any email client. I have done a lot of googling and can't find anything. There is an add-on to thunderbird that creates a little blinking notification, but it only appears very small in the lower right hand corner of the screen.

I was thinking of maybe some add-on to Firefox or Chrome that would allow me to write custom css and javascript that would run on Gmail and make the blinking happen. Any ideas are greatly appreciated.

I know this is not you regular SO question, but y'all are great and I don't know where else to turn. If there is a better forum out there for this type of question, you could also inform me of it.

Thanks!

like image 534
dezman Avatar asked Oct 04 '22 17:10

dezman


2 Answers

I have found this program while searching, haven't tried it. But it says it can execute an external program when email arrives. So seems like you can write a little C# application that can perform the task you want and execute when new email arrives.

http://www.jsonline.nl/Content/Poppy/Poppy.htm

like image 62
btevfik Avatar answered Oct 13 '22 12:10

btevfik


Instead of making a Chrome plugin, I would either make the window title blink or use HTML5 Notifications. Create a simple page which polls your IMAP Gmail for new messages, and include gmail in a large iFrame. If a new message is found, your outer window can issue the notification.

HTML5 Notifications: http://www.html5rocks.com/en/tutorials/notifications/quick/

Blinking Title (adopted from this):

var newMailBlinker = (function () {
    var oldTitle = document.title,
        msg = 'New Mail!',
        timeoutId,
        blink = function() { 
            document.title = document.title == msg ? ' ' : msg; 
        },
        clear = function() {
            clearInterval(timeoutId);
            document.title = oldTitle;
            window.onmousemove = null;
            timeoutId = null;
        };

    return function () {
        if (!timeoutId) {
            timeoutId = setInterval(blink, 1000);
            window.onmousemove = clear;
        }
    };
}());

PHP Poll Gmail IMAP (adopted from this):

$t1=time();//mark time in
$tt=$t1+(60*1);//total time = t1 + n seconds

do{
    if(isset($t2)) unset($t2);//clean it at every loop cicle
    $t2=time();//mark time
    if(imap_num_msg($imap)!=0){//if there is any message (in the inbox)

        $mc=imap_check($imap);//messages check
        //var_dump($mc); die;//vardump it to see all the data it is possible to get with imap_check() and them customize it for yourself
        echo 'New messages available';

    }else echo 'No new messagens';

    sleep(rand(7,13));//Give Google server a breack
    if(!@imap_ping($imap)){//if the connection is not up
        //start the imap connection the normal way like you did at first
    }

}while($tt>$t2);//if the total time was not achivied yet, get back to the beginning of the loop

jQuery AJAX Polling to your IMAP script (adopted from this):

// make the AJAX request
function ajax_request() {
  $.ajax({
    url: '/path/to/gmail/imap/checkMessages.php',
    dataType: 'json',
    error: function(xhr_data) {
      // terminate the script
    },
    success: function(xhr_data) {
        console.log(xhr_data);
        if (xhr_data.status == 'No new messages') {
            setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
        } else {
            newMailBlinker(); // blink the title here for new messages
        }
    }
    contentType: 'application/json'
  });
}

Obviously you wouldn't use jQuery AND PHP to poll. Pick one to do the polling. I'd recommend have the client do the polling and have PHP check IMAP once per connection. That being said, these snippets should get you started :)

like image 29
AlienWebguy Avatar answered Oct 13 '22 10:10

AlienWebguy