-
Notifications
You must be signed in to change notification settings - Fork 3
/
ideapad-perf-tray.py
130 lines (105 loc) · 4.11 KB
/
ideapad-perf-tray.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/python
import signal
import subprocess
import gi
gi.require_version("Gtk", "3.0")
gi.require_version("AppIndicator3", "0.1")
from gi.repository import AppIndicator3 as appindicator
from gi.repository import Gtk as gtk
class Indicator:
def __init__(self):
self.vp = None
self.battery_profile = None
self.vpc()
self.vbc()
self.indicator = appindicator.Indicator.new(
"customtray",
"preferences-system-power",
appindicator.IndicatorCategory.APPLICATION_STATUS,
)
self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.menu())
def vpc(self):
vpcheck = (
subprocess.check_output("ideapad-perf -vp".split()).decode("utf-8").strip()
)
match vpcheck:
case "Running in Extreme Performance mode.":
self.vp = "ep"
case "Running in Battery Saving mode.":
self.vp = "bs"
case "Running in Intelligent Cooling mode.":
self.vp = "ic"
def vbc(self):
vbcheck = (
subprocess.check_output("ideapad-perf -vb".split()).decode("utf-8").strip()
)
match vbcheck:
case "Rapid Charge mode is on, Battery Conservation mode is off.":
self.battery_profile = "rc"
case "Rapid Charge mode is off, Battery Conservation mode is on.":
self.battery_profile = "bc"
case "Rapid Charge mode is off, Battery Conservation mode is off.":
self.battery_profile = "off"
def menu(self):
menu = gtk.Menu()
title_performance = gtk.MenuItem(label="Performance mode")
title_performance.set_sensitive(False)
menu.append(title_performance)
mode_1 = gtk.RadioMenuItem(label="Extreme Performance")
menu.append(mode_1)
if self.vp == "ep":
mode_1.set_active(True)
mode_1.connect("activate", self.change_performance_mode, "ep")
mode_2 = gtk.RadioMenuItem(label="Battery Saving", group=mode_1)
menu.append(mode_2)
if self.vp == "bs":
mode_2.set_active(True)
mode_2.connect("activate", self.change_performance_mode, "bs")
mode_3 = gtk.RadioMenuItem(label="Intelligent Cooling", group=mode_1)
menu.append(mode_3)
if self.vp == "ic":
mode_3.set_active(True)
mode_3.connect("activate", self.change_performance_mode, "ic")
menu.append(gtk.SeparatorMenuItem())
title_battery = gtk.MenuItem(label="Battery mode")
title_battery.set_sensitive(False)
menu.append(title_battery)
mode_4 = gtk.RadioMenuItem(label="Rapid charge")
menu.append(mode_4)
if self.battery_profile == "rc":
mode_4.set_active(True)
mode_4.connect("activate", self.change_battery_mode, "rc")
mode_5 = gtk.RadioMenuItem(label="Battery conservation", group=mode_4)
if self.battery_profile == "bc":
mode_5.set_active(True)
menu.append(mode_5)
mode_5.connect("activate", self.change_battery_mode, "bc")
mode_6 = gtk.RadioMenuItem(label="Off", group=mode_4)
menu.append(mode_6)
if self.battery_profile == "off":
mode_6.set_active(True)
mode_6.connect("activate", self.change_battery_mode, "off")
menu.append(gtk.SeparatorMenuItem())
quit = gtk.MenuItem(label="Quit")
menu.append(quit)
quit.connect("activate", self.quit, "quit")
menu.show_all()
return menu
def change_performance_mode(self, source, string):
subprocess.call(
f"ideapad-perf -p {string}".split(),
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
def change_battery_mode(self, source, string):
subprocess.call(
f"ideapad-perf -b {string}".split(),
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
def quit(*args):
gtk.main_quit(*args)
Indicator()
signal.signal(signal.SIGINT, signal.SIG_DFL)
gtk.main()