lemonbar: Create DateTimeModule using python time function

This commit is contained in:
kuben
2019-12-24 13:01:41 +01:00
parent 0359fac5bd
commit 5a882d1fae

View File

@@ -1,7 +1,8 @@
import threading import threading
import subprocess import subprocess
import contextlib import contextlib
import os, signal, getpass import time, os, signal, getpass
import queue
import i3_lemonbar_config as config import i3_lemonbar_config as config
import i3_lemonbar_common as common import i3_lemonbar_common as common
@@ -71,13 +72,67 @@ def format_load(data, module, alert):
module.alt_scheme = None module.alt_scheme = None
return (d_v, u_v) return (d_v, u_v)
class DateTimeModule(LemonModule):
def __init__(self):
self.show_secs = False
super().__init__()
def _start_module(self):
class DateTimeThread(threading.Thread):
def __init__(self):
self.last_out = ''
self.out_queue = queue.Queue()
self.out_queue.readline = self.out_queue.get
super().__init__()
def run(self):
while True:
timestr = time.strftime("%a %d %b %H:%M:%S", time.gmtime())
if timestr != self.last_out:
self.last_out = timestr
self.out_queue.put('{}\n'.format(timestr))
time.sleep(0.1)
self.dt_thread = DateTimeThread()
self.dt_thread.start()
self.status_handle = self.dt_thread.out_queue
self.date = parser.IconTextUnit('date', action='date', order=40)
self.time = parser.IconTextUnit('time', action='toggle_secs', order=41
, alt_scheme=parser.COLOR_SCHEME.SPECIAL)
self.time.modes = [mode for mode in common.bar_mode]
parser.g_parser.register_unit(self.date)
parser.g_parser.register_unit(self.time)
self.register_action('date' , self.date_comm)
self.register_action('toggle_secs' , self.toggle_secs)
def _stop_module(self):
if self.p_handle is not None:
self.p_handle.terminate()
parser.g_parser.remove_unit(self.date)
parser.g_parser.remove_unit(self.time)
def _parse_data(self, data):
# Date and time
self.date.items = [(config.icon_clock, ' '.join(data[0:3]))]
self.time.items = [('', data[3] if self.show_secs else data[3][:-3])]
def date_comm(self):
subprocess.Popen(['yad', '--no-buttons', '--calendar', '--sticky'
, '--on-top' , '--class' , '"YADWIN"', '--posx=1650', '--posy=24'
, '--close-on-unfocus'])
def toggle_secs(self):
self.show_secs = not self.show_secs
class ConkyFastModule(LemonModule): class ConkyFastModule(LemonModule):
# TODO use internal python stuff for stuff like clock, then raise update interval conky_config_str = """
if os.uname()[1] == 'kubaDesktop':
conky_config = """
conky.config = { conky.config = {
background=false, background=false,
update_interval=0.2, update_interval=1,
total_run_times=0, total_run_times=0,
override_utf8_locale=true, override_utf8_locale=true,
short_units=true, short_units=true,
@@ -87,9 +142,10 @@ conky.config = {
if_up_strictness='address', if_up_strictness='address',
format_human_readable=true, format_human_readable=true,
} }
"""
if os.uname()[1] == 'kubaDesktop':
conky_config = conky_config_str + """
conky.text = [[ conky.text = [[
${time %a %d %b %H:%M:%S} \
${exec ~/.i3/lemonbar/get_vol.sh} \ ${exec ~/.i3/lemonbar/get_vol.sh} \
down down\ down down\
\ \
@@ -99,22 +155,8 @@ ${else}down down${endif}\
]] ]]
""" """
else: else:
conky_config = """ conky_config = conky_config_str + """
conky.config = {
background=false,
update_interval=0.2,
total_run_times=0,
override_utf8_locale=true,
short_units=true,
uppercase=false,
out_to_console=true,
out_to_x=false,
if_up_strictness='address',
format_human_readable=true,
}
conky.text = [[ conky.text = [[
${time %a %d %b %H:%M:%S} \
${exec ~/.i3/lemonbar/get_vol.sh} \ ${exec ~/.i3/lemonbar/get_vol.sh} \
${if_up wlp3s0}${downspeedf wlp3s0} ${upspeedf wlp3s0}\ ${if_up wlp3s0}${downspeedf wlp3s0} ${upspeedf wlp3s0}\
${else}down down${endif}\ ${else}down down${endif}\
@@ -125,7 +167,6 @@ ${else}down down${endif}\
]] ]]
""" """
def __init__(self): def __init__(self):
self.show_secs = False
super().__init__() super().__init__()
def _start_module(self): def _start_module(self):
@@ -138,21 +179,13 @@ ${else}down down${endif}\
self.wlan_load = parser.IconTextUnit('wlan_load', action='wlan', order=13) self.wlan_load = parser.IconTextUnit('wlan_load', action='wlan', order=13)
self.eth_load = parser.IconTextUnit('eth_load', action='eth', order=14) self.eth_load = parser.IconTextUnit('eth_load', action='eth', order=14)
self.volume = parser.IconTextUnit('volume', action='pavu', order=20) self.volume = parser.IconTextUnit('volume', action='pavu', order=20)
self.date = parser.IconTextUnit('date', action='date', order=40)
self.time = parser.IconTextUnit('time', action='toggle_secs', order=41
, alt_scheme=parser.COLOR_SCHEME.SPECIAL)
self.time.modes = [mode for mode in common.bar_mode]
parser.g_parser.register_unit(self.wlan_load) parser.g_parser.register_unit(self.wlan_load)
parser.g_parser.register_unit(self.eth_load) parser.g_parser.register_unit(self.eth_load)
parser.g_parser.register_unit(self.volume) parser.g_parser.register_unit(self.volume)
parser.g_parser.register_unit(self.date)
parser.g_parser.register_unit(self.time)
self.register_action('wlan' , self.nmtui) self.register_action('wlan' , self.nmtui)
self.register_action('pavu' , self.pavu) self.register_action('pavu' , self.pavu)
self.register_action('date' , self.date_comm)
self.register_action('toggle_secs' , self.toggle_secs)
def _stop_module(self): def _stop_module(self):
if self.p_handle is not None: if self.p_handle is not None:
@@ -161,30 +194,24 @@ ${else}down down${endif}\
parser.g_parser.remove_unit(self.wlan_load) parser.g_parser.remove_unit(self.wlan_load)
parser.g_parser.remove_unit(self.eth_load) parser.g_parser.remove_unit(self.eth_load)
parser.g_parser.remove_unit(self.volume) parser.g_parser.remove_unit(self.volume)
parser.g_parser.remove_unit(self.date)
parser.g_parser.remove_unit(self.time)
def _parse_data(self, data): def _parse_data(self, data):
# wlan and eth # wlan and eth
(wland_v, wlanu_v) = format_load(data[5:7], self.wlan_load, config.net_alert) (wland_v, wlanu_v) = format_load(data[1:3], self.wlan_load, config.net_alert)
self.wlan_load.items = [(config.icon_wlan + config.icon_dl, wland_v) self.wlan_load.items = [(config.icon_wlan + config.icon_dl, wland_v)
,(config.icon_ul, wlanu_v)] ,(config.icon_ul, wlanu_v)]
(ethd_v, ethu_v) = format_load(data[7:9], self.eth_load, config.net_alert) (ethd_v, ethu_v) = format_load(data[3:5], self.eth_load, config.net_alert)
self.eth_load.items = [(config.icon_eth + config.icon_dl, ethd_v) self.eth_load.items = [(config.icon_eth + config.icon_dl, ethd_v)
,(config.icon_ul, ethu_v)] ,(config.icon_ul, ethu_v)]
# Volume # Volume
mute = data[4] == 'MUTE' or data[4] == 'NONE' mute = data[0] == 'MUTE' or data[0] == 'NONE'
(vol,vols) = (-1,'×') if mute else (int(data[4]), data[4]+'%') (vol,vols) = (-1,'×') if mute else (int(data[0]), data[0]+'%')
icon_v = config.icon_vol_mute if vol == 0 else \ icon_v = config.icon_vol_mute if vol == 0 else \
config.icon_vol_low if vol < 50 else config.icon_vol config.icon_vol_low if vol < 50 else config.icon_vol
self.volume.items = [(icon_v, vols)] self.volume.items = [(icon_v, vols)]
# Date and time
self.date.items = [(config.icon_clock, ' '.join(data[0:3]))]
self.time.items = [('', data[3] if self.show_secs else data[3][:-3])]
def nmtui(self): def nmtui(self):
p = subprocess.Popen(['xterm', '-class', 'FLOAT_TERM', '-e', 'nmtui']) p = subprocess.Popen(['xterm', '-class', 'FLOAT_TERM', '-e', 'nmtui'])
common.kill_on_unfocus.append(p.pid) common.kill_on_unfocus.append(p.pid)
@@ -193,17 +220,8 @@ ${else}down down${endif}\
p = subprocess.Popen(['pavucontrol', '--class=FLOAT_PAVU']) p = subprocess.Popen(['pavucontrol', '--class=FLOAT_PAVU'])
common.kill_on_unfocus.append(p.pid) common.kill_on_unfocus.append(p.pid)
def date_comm(self):
subprocess.Popen(['yad', '--no-buttons', '--calendar', '--sticky'
, '--on-top' , '--class' , '"YADWIN"', '--posx=1650', '--posy=24'
, '--close-on-unfocus'])
def toggle_secs(self):
self.show_secs = not self.show_secs
class ConkySlowModule(LemonModule): class ConkySlowModule(LemonModule):
if os.uname()[1] == 'kubaDesktop': conky_config_str = """
conky_config = """
conky.config = { conky.config = {
background=false, background=false,
update_interval=5, update_interval=5,
@@ -216,7 +234,9 @@ conky.config = {
if_up_strictness='address', if_up_strictness='address',
format_human_readable=true, format_human_readable=true,
} }
"""
if os.uname()[1] == 'kubaDesktop':
conky_config = conky_config_str + """
conky.text = [[ conky.text = [[
${cpu} \ ${cpu} \
${mem} \ ${mem} \
@@ -228,21 +248,7 @@ ${exec /home/kuba/.i3/scripts/lang.sh show}
]] ]]
""" """
else: else:
conky_config = """ conky_config = conky_config_str + """
conky.config = {
background=false,
update_interval=5,
total_run_times=0,
override_utf8_locale=true,
short_units=true,
uppercase=false,
out_to_console=true,
out_to_x=false,
if_up_strictness='address',
format_human_readable=true,
}
conky.text = [[ conky.text = [[
${cpu} \ ${cpu} \
${mem} \ ${mem} \
@@ -641,33 +647,37 @@ class PowerOptionsModule(LemonModule):
, ', (r) reboot, (Shift+s) shutdown']) , ', (r) reboot, (Shift+s) shutdown'])
def do_action(keyword): def do_action(keyword):
global m_conky_fast, m_conky_slow, m_i3ws global m_datetime, m_conky_fast, m_conky_slow, m_i3ws
m_i3ws.do_action(keyword) m_i3ws.do_action(keyword)
m_datetime.do_action(keyword)
m_conky_slow.do_action(keyword) m_conky_slow.do_action(keyword)
m_conky_fast.do_action(keyword) m_conky_fast.do_action(keyword)
m_screen.do_action(keyword) m_screen.do_action(keyword)
m_power.do_action(keyword) m_power.do_action(keyword)
def start_all(): def start_all():
global m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power global m_datetime, m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power
m_i3ws = i3Module() m_i3ws = i3Module()
m_datetime = DateTimeModule()
m_conky_slow = ConkySlowModule() m_conky_slow = ConkySlowModule()
m_conky_fast = ConkyFastModule() m_conky_fast = ConkyFastModule()
m_screen = ScreenModule() m_screen = ScreenModule()
m_power = PowerOptionsModule() m_power = PowerOptionsModule()
m_i3ws.start() m_i3ws.start()
m_datetime.start()
m_conky_slow.start() m_conky_slow.start()
m_conky_fast.start() m_conky_fast.start()
m_screen.start() m_screen.start()
m_power.start() m_power.start()
def stop_all(): def stop_all():
global m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power global m_datetime, m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power
m_i3ws.stop() m_i3ws.stop()
m_datetime.stop()
m_conky_slow.stop() m_conky_slow.stop()
m_conky_fast.stop() m_conky_fast.stop()
m_screen.stop() m_screen.stop()