diff --git a/config.yaml b/config.yaml
index 33f0e70..8ac4432 100644
--- a/config.yaml
+++ b/config.yaml
@@ -4,6 +4,7 @@ General:
after_sendkeys_key_wait: 0.001 # Amount of seconds to wait after a keypress. Default is 0.01
poe_window_title: 'Path of Exile'
poe_path: 'D:\\SteamLibrary\\steamapps\\common\\Path of Exile\\PathOfExileSteam.exe'
+ username: 'Perry3D' # Used for leaving a group
Chat:
# Define chat messages with the following placeholders:
# message, date, channel, user, guild, to_from, item, amount, currency, tab, row, col, league,
diff --git a/icons/material_door.svg b/icons/material_door.svg
new file mode 100644
index 0000000..e67d0c7
--- /dev/null
+++ b/icons/material_door.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/material_home.svg b/icons/material_home.svg
new file mode 100644
index 0000000..6a00126
--- /dev/null
+++ b/icons/material_home.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/main.py b/main.py
index 12b200f..5f7408e 100644
--- a/main.py
+++ b/main.py
@@ -24,7 +24,7 @@ if __name__ == "__main__":
# app = gui.Gui()
app, window = gui_pyside6.start_app()
reader = trader.Log_Reader(window)
- reader_thread = Thread(target=reader.read_log, args=(conf['General']['log_file'], window))
+ reader_thread = Thread(target=reader.read_log, args=(conf['General']['log_file'],))
log.debug(f'Starting reader thread for "{conf["General"]["log_file"]}"')
reader_thread.start()
# clipboard_thread = Thread(target=clipboard.clipboard_poll, args=(app,))
diff --git a/src/pyside6/gui_pyside6.py b/src/pyside6/gui_pyside6.py
index 3ead8ce..1f04288 100644
--- a/src/pyside6/gui_pyside6.py
+++ b/src/pyside6/gui_pyside6.py
@@ -4,7 +4,7 @@ from src.data import log
from src.data import Message, compile_regex
from src.pyside6.trade_widget import TradeCollection
from PySide6 import QtCore
-from PySide6.QtWidgets import QApplication, QMainWindow, QTabWidget, QSizePolicy, QWidget
+from PySide6.QtWidgets import QApplication, QMainWindow, QTabWidget, QSizePolicy
import qdarktheme
@@ -17,7 +17,8 @@ class ResizingTabWidget(QTabWidget):
self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum)
self.setGeometry(0, 0, 20, 20)
- self.trade_collections = {}
+ self.trade_in_collections = {}
+ self.trade_out_collections = {}
self.setTabsClosable(True)
self.tabCloseRequested.connect(self.del_tab)
@@ -38,16 +39,29 @@ class ResizingTabWidget(QTabWidget):
self.adjustSize()
self.main_window.updateSizes()
- def new_trade(self, message: Message):
+ def new_in_trade(self, message: Message):
if message.trade:
unique_item = message.trade.unique_item()
- if unique_item in self.trade_collections:
- self.trade_collections[unique_item].add_trade(message)
+ if unique_item in self.trade_in_collections:
+ self.trade_in_collections[unique_item].add_trade(message)
else:
collection = TradeCollection(message, self)
- collection.setParent(self)
self.addTab(collection, message.trade.item)
- self.trade_collections[message.trade.unique_item()] = collection
+ self.trade_in_collections[message.trade.unique_item()] = collection
+
+ self.main_window.show()
+
+ self.main_window.updateSizes()
+
+ def new_out_trade(self, message: Message):
+ if message.trade:
+ unique_item = message.trade.unique_item()
+ if unique_item in self.trade_out_collections:
+ self.trade_out_collections[unique_item].add_trade(message)
+ else:
+ collection = TradeCollection(message, self)
+ self.addTab(collection, message.trade.item)
+ self.trade_out_collections[message.trade.unique_item()] = collection
self.main_window.show()
@@ -56,14 +70,14 @@ class ResizingTabWidget(QTabWidget):
def del_tab(self, index: int):
collection = self.widget(index)
assert isinstance(collection, TradeCollection)
- self.trade_collections[collection.unique_item].deleteLater()
- del self.trade_collections[collection.unique_item]
- if not self.trade_collections:
+ self.trade_in_collections[collection.unique_item].deleteLater()
+ del self.trade_in_collections[collection.unique_item]
+ if not self.trade_in_collections:
self.main_window.hide()
def del_collection(self, unique_item: str):
- del self.trade_collections[unique_item]
- if not self.trade_collections:
+ del self.trade_in_collections[unique_item]
+ if not self.trade_in_collections:
self.main_window.hide()
@@ -90,8 +104,12 @@ class MainWindow(QMainWindow):
self.resize(self.tab_widget.minimumSizeHint())
@QtCore.Slot()
- def new_trade(self, message: Message):
- self.tab_widget.new_trade(message)
+ def new_in_trade(self, message: Message):
+ self.tab_widget.new_in_trade(message)
+
+ @QtCore.Slot()
+ def new_out_trade(self, message: Message):
+ self.tab_widget.new_out_trade(message)
def start_app():
@@ -124,8 +142,8 @@ if __name__ == "__main__":
assert message2
assert message3
app, window = start_app()
- window.new_trade(message)
- window.new_trade(message)
- window.new_trade(message2)
- window.new_trade(message3)
+ window.new_in_trade(message)
+ window.new_in_trade(message)
+ window.new_in_trade(message2)
+ window.new_in_trade(message3)
app.exec()
diff --git a/src/pyside6/trade_widget.py b/src/pyside6/trade_widget.py
index 6921005..000e389 100644
--- a/src/pyside6/trade_widget.py
+++ b/src/pyside6/trade_widget.py
@@ -24,17 +24,6 @@ class TradeWidget(QWidget):
self.setLayout(self.main_layout)
assert message.trade
- self.inv_button = self.new_button('icons/material_invite.svg', 'Invite', self.inv_callback)
- self.trade_button = self.new_button('icons/material_trade.svg', 'Trade', self.trade_callback)
- self.thank_button = self.new_button('icons/material_thank.svg', 'Thank you', self.thank_callback)
- self.wait_button = self.new_button('icons/material_wait2.svg', 'Busy', self.wait_callback)
- self.close_button = self.new_button('icons/material_close.svg', 'Dismiss', self.close_callback)
-
- self.label_item = self.new_Label(message.trade.item)
- self.label_price = self.new_Label(f'{message.trade.amount} {message.trade.currency}')
- self.label_user = self.new_Label(message.user)
- self.label_tab = self.new_Label(message.trade.tab)
-
def new_button(self, icon_filename: str, tooltip: str, callback: Callable[[], None]) -> QPushButton:
icon = QIcon(icon_filename)
button = QPushButton(icon=icon, text='', parent=self)
@@ -52,6 +41,27 @@ class TradeWidget(QWidget):
self.main_layout.addWidget(label)
return label
+
+class Trade_In_Widget(TradeWidget):
+
+ def __init__(self,
+ message: Message,
+ parent):
+ super(Trade_In_Widget, self).__init__(message=message, parent=parent)
+
+ self.inv_button = self.new_button('icons/material_invite.svg', 'Invite', self.inv_callback)
+ self.trade_button = self.new_button('icons/material_trade.svg', 'Trade', self.trade_callback)
+ self.thank_button = self.new_button('icons/material_thank.svg', 'Thank you', self.thank_callback)
+ self.wait_button = self.new_button('icons/material_wait2.svg', 'Busy', self.wait_callback)
+ self.close_button = self.new_button('icons/material_close.svg', 'Dismiss', self.close_callback)
+
+ # self.label_item = self.new_Label(message.trade.item)
+ self.label_price = self.new_Label(f'{message.trade.amount} {message.trade.currency}')
+ self.label_user = self.new_Label(message.user)
+ assert message.trade
+ if message.trade.tab:
+ self.label_tab = self.new_Label(message.trade.tab)
+
def inv_callback(self):
sendkeys.invite(message=self.message)
sendkeys.send_to_format(type='pickup', message=self.message)
@@ -72,6 +82,46 @@ class TradeWidget(QWidget):
self.parent.del_trade(self.message)
+class Trade_Out_Widget(TradeWidget):
+
+ def __init__(self,
+ message: Message,
+ parent):
+ super(Trade_Out_Widget, self).__init__(message=message, parent=parent)
+
+ self.inv_button = self.new_button('icons/material_door.svg', 'Join', self.join_callback)
+ self.trade_button = self.new_button('icons/material_trade.svg', 'Trade', self.trade_callback)
+ self.thank_button = self.new_button('icons/material_thank.svg', 'Thank you', self.thank_callback)
+ self.wait_button = self.new_button('icons/material_leave.svg', 'Leave group', self.leave_callback)
+ self.wait_button = self.new_button('icons/material_home.svg', 'Return to Hideout', self.return_callback)
+ self.close_button = self.new_button('icons/material_close.svg', 'Dismiss', self.close_callback)
+
+ # self.label_item = self.new_Label(message.trade.item)
+ assert message.trade
+ self.label_price = self.new_Label(f'{message.trade.amount} {message.trade.currency}')
+ self.label_user = self.new_Label(message.user)
+
+ def join_callback(self):
+ sendkeys.join(message=self.message)
+
+ def thank_callback(self):
+ sendkeys.send_to_format(type='ty', message=self.message)
+ sendkeys.kick(message=self.message)
+
+ def trade_callback(self):
+ sendkeys.trade(message=self.message)
+
+ def leave_callback(self):
+ sendkeys.leave()
+
+ def return_callback(self):
+ sendkeys.return_to_ho()
+
+ def close_callback(self):
+ self.deleteLater()
+ self.parent.del_trade(self.message)
+
+
class TradeCollection(QWidget):
"""This holds the content of one tab.
One tab corresponds to a unique item."""
@@ -90,7 +140,7 @@ class TradeCollection(QWidget):
self.main_layout.setContentsMargins(0, 0, 0, 0)
self.setContentsMargins(0, 0, 0, 0)
self.setLayout(self.main_layout)
- trade = TradeWidget(message, self)
+ trade = Trade_In_Widget(message, self)
self.main_layout.addWidget(trade)
self.trades = {message.unique_trade(): trade}
@@ -104,7 +154,7 @@ class TradeCollection(QWidget):
assert message.trade
if message.unique_trade() in self.trades:
return
- trade = TradeWidget(message, self)
+ trade = Trade_In_Widget(message, self)
self.main_layout.addWidget(trade)
self.trades[message.unique_trade()] = trade
diff --git a/src/sendkeys.py b/src/sendkeys.py
index 8adbcb8..0f454db 100644
--- a/src/sendkeys.py
+++ b/src/sendkeys.py
@@ -67,9 +67,21 @@ def invite(message: data.Message) -> None:
send_text(f'/invite {message.user}')
+def join(message: data.Message) -> None:
+ send_text(f'/hideout {message.user}')
+
+
+def return_to_ho() -> None:
+ send_text('/hideout')
+
+
def kick(message: data.Message) -> None:
send_text(f'/kick {message.user}')
+def leave() -> None:
+ send_text(f'/kick {config.conf["General"]["username"]}')
+
+
def trade(message: data.Message) -> None:
send_text(f'/tradewith {message.user}')
diff --git a/src/trader.py b/src/trader.py
index 91da799..26ea17b 100644
--- a/src/trader.py
+++ b/src/trader.py
@@ -4,26 +4,33 @@ from . import gui
from .data import log
from io import TextIOWrapper
from PySide6 import QtCore
+from src.pyside6.gui_pyside6 import MainWindow
class Log_Reader(QtCore.QObject):
- new_trade_signal = QtCore.Signal(Message)
+ new_in_trade_signal = QtCore.Signal(Message)
+ new_out_trade_signal = QtCore.Signal(Message)
- def __init__(self, window):
+ def __init__(self, window: MainWindow):
super().__init__()
- self.new_trade_signal.connect(window.new_trade, QtCore.Qt.QueuedConnection)
+ self.new_in_trade_signal.connect(window.new_in_trade, QtCore.Qt.QueuedConnection)
+ self.new_out_trade_signal.connect(window.new_out_trade, QtCore.Qt.QueuedConnection)
- def read_log(self, logfile: str, app) -> None:
+ def read_log(self, logfile: str) -> None:
try:
with open(logfile, 'r', encoding='utf8') as file:
loglines = self.follow(file)
for line in loglines:
message = Message.from_text(line)
log.debug(message)
- if message and message.trade and message.to_from == 'From':
- log.debug(message.trade)
- # app.add_tab(30, message)
- self.new_trade_signal.emit(message)
+ if message and message.trade:
+ if message.to_from == 'From':
+ log.debug(message.trade)
+ # app.add_tab(30, message)
+ self.new_in_trade_signal.emit(message)
+ if message.to_from == 'To':
+ log.debug(message.trade)
+ self.new_out_trade_signal.emit(message)
except IOError:
log.error(f'Error opening log file {logfile}.')