From 610ad9a6f09a9d1f82a4456538916626536f2d3a Mon Sep 17 00:00:00 2001 From: Patrick Auernig Date: Thu, 16 Nov 2017 10:41:23 +0100 Subject: [PATCH] Create pacman-update-notify.rb --- pacman-update-notify.rb | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 pacman-update-notify.rb diff --git a/pacman-update-notify.rb b/pacman-update-notify.rb new file mode 100644 index 0000000..00fe097 --- /dev/null +++ b/pacman-update-notify.rb @@ -0,0 +1,49 @@ +#!/usr/bin/env ruby + +require "dbus" +require "logger" + +Thread.abort_on_exception = true + +interval = ARGV.fetch(0) { 3600 } +last_check = 0 +update_queue = Queue.new +threads = [] +@dbus = DBus.session_bus["org.freedesktop.Notifications"]["/org/freedesktop/Notifications"]["org.freedesktop.Notifications"] +@log = Logger.new(STDOUT) +@log.formatter = proc do |severity, datetime, _progname, message| + "[#{severity}] #{datetime} #{message}\n" +end + +def notify(updates) + message = "#{updates} updates available" + @log.info { message } + @dbus.Notify("pacman", 0, "package-x-generic", "Pacman", message, [], [], 3000) +end + +threads << Thread.new do + @log.info { "Checking every #{interval} seconds" } + loop do + @log.info { "Checking for updates..." } + update_queue << `pacman -Qqu`.split("\n").size + sleep(interval.to_i) + end +end + +threads.last.name = "UpdateCheck" + +threads << Thread.new do + loop do + updates = update_queue.deq + if updates != last_check + last_check = updates + notify(updates) + else + @log.info { "No new updates available" } + end + end +end + +threads.last.name = "UpdateNotify" + +threads.each(&:join)