Improvy proves.
This commit is contained in:
parent
ba18e2dc95
commit
828d797a86
17
data.py
17
data.py
@ -2,7 +2,7 @@ import os
|
|||||||
import json
|
import json
|
||||||
import base64
|
import base64
|
||||||
import atexit
|
import atexit
|
||||||
from datetime import datetime, date, time
|
from datetime import datetime, date, timedelta
|
||||||
from threading import Thread, Event
|
from threading import Thread, Event
|
||||||
from collections.abc import MutableMapping
|
from collections.abc import MutableMapping
|
||||||
|
|
||||||
@ -114,7 +114,9 @@ class Log:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._data = Data()
|
self._data = Data()
|
||||||
|
|
||||||
def log(self, task, ptime=datetime.now()):
|
def log(self, task, ptime=None):
|
||||||
|
if ptime is None:
|
||||||
|
ptime = datetime.now()
|
||||||
month = self._data.setdefault(ptime.strftime("%Y-%m"), {})
|
month = self._data.setdefault(ptime.strftime("%Y-%m"), {})
|
||||||
month.setdefault(ptime.strftime("%d"), [])\
|
month.setdefault(ptime.strftime("%d"), [])\
|
||||||
.append(f"{ptime.strftime('%H:%M:%S')} {base64.b64encode(task.encode('utf-8')).decode('utf-8')}")
|
.append(f"{ptime.strftime('%H:%M:%S')} {base64.b64encode(task.encode('utf-8')).decode('utf-8')}")
|
||||||
@ -135,6 +137,7 @@ class Log:
|
|||||||
tmp.append((task, start_time))
|
tmp.append((task, start_time))
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
dsum = timedelta()
|
||||||
for i, t in enumerate(tmp):
|
for i, t in enumerate(tmp):
|
||||||
task, start_time = t
|
task, start_time = t
|
||||||
if i < len(tmp) - 1:
|
if i < len(tmp) - 1:
|
||||||
@ -142,5 +145,13 @@ class Log:
|
|||||||
else:
|
else:
|
||||||
end_time = datetime.now()
|
end_time = datetime.now()
|
||||||
duration = end_time - start_time
|
duration = end_time - start_time
|
||||||
ret.append((task, start_time, duration))
|
dsum += duration
|
||||||
|
dhours, rem = divmod(duration.seconds, 3600)
|
||||||
|
dmins, _ = divmod(rem, 60)
|
||||||
|
ret.append((task, start_time.strftime("%H:%M"), f"{dhours:02d}:{dmins:02d}"))
|
||||||
|
|
||||||
|
ret.append(("", "", ""))
|
||||||
|
dhours, rem = divmod(dsum.seconds, 3600)
|
||||||
|
dmins, _ = divmod(rem, 60)
|
||||||
|
ret.append(("Sum", "", f"{dhours:02d}:{dmins:02d}"))
|
||||||
return ret
|
return ret
|
||||||
|
7
main.py
7
main.py
@ -33,7 +33,7 @@ class App:
|
|||||||
self.taskEdit = TaskEdit(None)
|
self.taskEdit = TaskEdit(None)
|
||||||
self.taskEdit.accepted.connect(self.tasks_edited)
|
self.taskEdit.accepted.connect(self.tasks_edited)
|
||||||
|
|
||||||
self.report = Report(None)
|
self.reportDialog = Report(None)
|
||||||
|
|
||||||
@QtCore.Slot()
|
@QtCore.Slot()
|
||||||
def tasks_edited(self):
|
def tasks_edited(self):
|
||||||
@ -80,12 +80,11 @@ class App:
|
|||||||
signal.signal(signal.SIGTERM, self.sigterm_handler)
|
signal.signal(signal.SIGTERM, self.sigterm_handler)
|
||||||
signal.signal(signal.SIGINT, self.sigterm_handler)
|
signal.signal(signal.SIGINT, self.sigterm_handler)
|
||||||
self.app.exec_()
|
self.app.exec_()
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
@QtCore.Slot()
|
@QtCore.Slot()
|
||||||
def report(self):
|
def report(self):
|
||||||
self.report.set_data(self.log.report())
|
self.reportDialog.set_data(self.log.report())
|
||||||
self.report.show()
|
self.reportDialog.show()
|
||||||
|
|
||||||
@QtCore.Slot()
|
@QtCore.Slot()
|
||||||
def edit_tasks(self):
|
def edit_tasks(self):
|
||||||
|
10
report.py
10
report.py
@ -43,8 +43,8 @@ class Report(QtWidgets.QDialog):
|
|||||||
|
|
||||||
for row, _ in enumerate(data):
|
for row, _ in enumerate(data):
|
||||||
self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(data[row][0]))
|
self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(data[row][0]))
|
||||||
self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(data[row][1])))
|
self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(data[row][1]))
|
||||||
self.tableWidget.setItem(row, 2, QtWidgets.QTableWidgetItem(str(data[row][2])))
|
self.tableWidget.setItem(row, 2, QtWidgets.QTableWidgetItem(data[row][2]))
|
||||||
|
|
||||||
self.tableWidget.resizeColumnsToContents()
|
self.tableWidget.resizeColumnsToContents()
|
||||||
|
|
||||||
@ -53,13 +53,16 @@ class Report(QtWidgets.QDialog):
|
|||||||
min_width += self.header.sectionSize(i)
|
min_width += self.header.sectionSize(i)
|
||||||
self.tableWidget.setMinimumWidth(min_width * 1.33)
|
self.tableWidget.setMinimumWidth(min_width * 1.33)
|
||||||
self.header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
|
self.header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
|
||||||
|
if self.tableWidget.rowCount() > 4:
|
||||||
|
self.tableWidget.setMinimumHeight(min((self.tableWidget.rowCount() + 2) * self.tableWidget.rowHeight(0),
|
||||||
|
self.tableWidget.screen().size().height() * 0.8))
|
||||||
|
|
||||||
@QtCore.Slot()
|
@QtCore.Slot()
|
||||||
def new_task(self):
|
def new_task(self):
|
||||||
l = self.list.stringList()
|
l = self.list.stringList()
|
||||||
l.append("")
|
l.append("")
|
||||||
self.list.setStringList(l)
|
self.list.setStringList(l)
|
||||||
i = self.list.index(len(l)-1)
|
i = self.list.index(len(l) - 1)
|
||||||
self.tableView.setCurrentIndex(i)
|
self.tableView.setCurrentIndex(i)
|
||||||
self.tableView.edit(i)
|
self.tableView.edit(i)
|
||||||
|
|
||||||
@ -77,4 +80,3 @@ class Report(QtWidgets.QDialog):
|
|||||||
@tasks.setter
|
@tasks.setter
|
||||||
def tasks(self, tasks):
|
def tasks(self, tasks):
|
||||||
self.list.setStringList(tasks)
|
self.list.setStringList(tasks)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user