Advertisement
victorbrca

start_kde_activities.sh

Apr 30th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.96 KB | None | 0 0
  1. #!/bin/bash
  2. ################################################################################
  3. ################################################################################
  4. # Name:        start_kde_activities.sh
  5. # Usage:
  6. # Description:
  7. # Created:     2018-04-27
  8. # Copyright 2014, Victor Mendonca - http://wazem.org
  9. #                                 - https://github.com/victorbrca
  10. # License: Released under the terms of the GNU GPL license v3
  11. ################################################################################
  12. ################################################################################
  13. # set -x
  14.  
  15. #-------------------------------------------------------------------------------
  16. # Sets variables
  17. #-------------------------------------------------------------------------------
  18.  
  19. log="${HOME}/bin/var/log/start_kde_activities-${HOSTNAME}.log"
  20.  
  21.  
  22. #-------------------------------------------------------------------------------
  23. # Functions
  24. #-------------------------------------------------------------------------------
  25.  
  26. _logMe () {
  27.   echo -e "$(date)\t-\t${1}" >> "$log"
  28. }
  29.  
  30. _getActivities () {
  31.   activities="$(qdbus org.kde.ActivityManager /ActivityManager/Activities ListActivities)"
  32. }
  33.  
  34. _getActivitiesNames () {
  35.   for activity in $(qdbus org.kde.ActivityManager /ActivityManager/Activities ListActivities) ; do
  36.     echo "${activity} - $(qdbus org.kde.ActivityManager /ActivityManager/Activities ActivityName $activity)"
  37.   done
  38. }
  39.  
  40. _getRunningApps () {
  41.   # Gets a X id for all running apps
  42.   _logMe "Getting running apps"
  43.   running_apps="$(xwininfo -root -tree | sed 's/ \+/ /g; s/ //; s/ .*//g; /x/!d; /xwinin/d')"
  44. }
  45.  
  46. _getRunningAppsActivity () {
  47.   for app_id in $running_apps ; do
  48.     app_activity=$(xprop _KDE_NET_WM_ACTIVITIES -id "$app_id" 2> /dev/null | grep -v "not found" | awk '{print $NF}' | tr -d '"')
  49.     if [ "$app_activity" ] ; then
  50.       if [[ "$app_activity" != "00000000-0000-0000-0000-000000000000" ]] ; then
  51.         app_name=$(xwininfo -root -tree | grep "$app_id" | awk -F'"' '{print $2}' )
  52.         running_apps_activities="$running_apps_activities
  53.  $app_name $app_activity"
  54.       fi
  55.     fi
  56.   done
  57. }
  58.  
  59. _notifyAudio () {
  60.   notify-send "$1" "$2"
  61.   paplay /usr/share/sounds/freedesktop/stereo/device-added.oga
  62. }
  63.  
  64. _main () {
  65.   # Matches running app to activities and stops empty activities
  66.   for activity_id in $activities ; do
  67.     activity_name="$(_getActivitiesNames | grep $activity_id | awk '{print $3}')"
  68.     echo -e "$running_apps_activities" | grep -q "$activity_id"
  69.     if [[ $? -eq 0 ]] ; then
  70.       activity_state=$(qdbus org.kde.ActivityManager /ActivityManager/Activities ActivityState "$activity_id")
  71.       if [[ $activity_state -eq 4 ]] ; then
  72.         _logMe "There's an app running for the $activity_name activity. Starting it"
  73.         qdbus org.kde.ActivityManager /ActivityManager/Activities StartActivity "$activity_id"
  74.         _notifyAudio "KDE Activites" "Started $activity_name"
  75.       fi
  76.       continue
  77.     else
  78.       # echo "$(_getActivitiesNames | grep $activity_id | awk '{print $3}') is empty"
  79.       activity_state=$(qdbus org.kde.ActivityManager /ActivityManager/Activities ActivityState "$activity_id")
  80.       if [[ $activity_state -ne 4 ]] ; then
  81.         sleep 7
  82.         if [[ $activity_state -ne 4 ]] ; then
  83.           _logMe "Stopping activity $activity_name"
  84.           qdbus org.kde.ActivityManager /ActivityManager/Activities StopActivity "$activity_id"
  85.           _notifyAudio "KDE Activites" "Stopped $activity_name"
  86.         fi
  87.       fi
  88.     fi
  89.   done
  90. }
  91.  
  92. _cleanUp() {
  93.   unset activities running_apps app_activity app_name running_apps_activities \
  94.   activity_name activity_state activity_id
  95. }
  96.  
  97. #-------------------------------------------------------------------------------
  98. # Starts script
  99. #-------------------------------------------------------------------------------
  100.  
  101. while true ; do
  102.   _getActivities
  103.   _getRunningApps
  104.   _getRunningAppsActivity
  105.   _main
  106.   _cleanUp
  107.   sleep 1
  108. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement