-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProcessTimeLimiter.py
112 lines (94 loc) · 4.57 KB
/
ProcessTimeLimiter.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
from datetime import datetime, date, timedelta
import psutil
import time
import random
from plyer import notification
import threading
stoic_quotes = [
"The obstacle is the path.",
"Waste no more time arguing what a good man should be. Be one.",
"You have power over your mind, not outside events. Realize this, and you will find strength.",
"The happiness of your life depends upon the quality of your thoughts.",
"Very little is needed to make a happy life; it is all within yourself, in your way of thinking.",
"He who lives in harmony with himself lives in harmony with the universe.",
"The soul becomes dyed with the color of its thoughts.",
"The best revenge is not to be like your enemy.",
"It does not matter what you bear, but how you bear it.",
"The more we value things outside our control, the less control we have.",
"Wealth consists not in having great possessions, but in having few wants.",
"The world is only in your mind. Your mind is only in the world."
]
process_names = ["League", "Riot"]
time_limit_minutes = 180
remaining_time_file = "remaining_time.txt"
class TimeLimiter:
def __init__(self):
self.load_time()
self.quote_notification_shown = False
self.start_time = None
self.old_running_time = 0 # Store old running time
def save_remaining_time(self):
with open(remaining_time_file, "w") as file:
file.write(f"{self.remaining_time}\n{self.daily_total_time}\n{self.total_time}\n{self.last_save_date}")
def load_time(self):
try:
with open(remaining_time_file, "r") as file:
lines = file.readlines()
self.remaining_time = float(lines[0])
self.daily_total_time = float(lines[1])
self.total_time = float(lines[2])
self.last_save_date = datetime.strptime(lines[3].strip(), "%Y-%m-%d").date()
except FileNotFoundError:
self.remaining_time = time_limit_minutes
self.last_save_date = date.today()
self.daily_total_time = 0
self.total_time = 0
def close_game_processes(self):
for process in psutil.process_iter():
for name in process_names:
if process.name().find(name) != -1:
try:
process.terminate()
except psutil.NoSuchProcess:
pass
def show_notification(self, message):
notification_thread = threading.Thread(target=notification.notify, args=("Process Time Limit", message))
notification_thread.start()
time.sleep(1)
notification_thread.join()
def start(self):
self.show_notification(f"Started Time Limiter!")
while True:
game_processes = [p for p in psutil.process_iter() if any(p.name().startswith(name) for name in process_names)]
if date.today() > self.last_save_date:
self.daily_total_time = 0
self.remaining_time = time_limit_minutes
self.last_save_date = date.today()
current_time = time.time()
if game_processes:
if self.start_time is None:
self.start_time = current_time
running_time = current_time - self.start_time + self.old_running_time
self.remaining_time = max(0, self.remaining_time - (running_time - self.old_running_time) / 60)
if running_time >= time_limit_minutes * 0.75 and not self.quote_notification_shown:
random_quote = random.choice(stoic_quotes)
self.show_notification(random_quote)
self.quote_notification_shown = True
if self.remaining_time <= 0:
if not self.quote_notification_shown:
random_quote = random.choice(stoic_quotes)
self.show_notification(random_quote)
self.quote_notification_shown = True
self.close_game_processes()
self.remaining_time = 0
# Update total times
self.daily_total_time += (running_time - self.old_running_time) / 60 # Update with new running time
self.total_time += (running_time - self.old_running_time) / 60 # Update with new running time
self.old_running_time = running_time # Save new running time
self.save_remaining_time()
time.sleep(10)
def main():
time_limiter = TimeLimiter()
time_limiter.start()
if __name__ == "__main__":
main()