split main window and search dialog into other files
Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,5 +1,5 @@
|
||||
__pycache__
|
||||
venv
|
||||
form.py
|
||||
main.py
|
||||
search.py
|
||||
*.json
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtWidgets import (
|
||||
QMainWindow, QDialog, QListWidgetItem, QFileDialog, QMessageBox
|
||||
QMainWindow, QListWidgetItem, QFileDialog, QMessageBox
|
||||
)
|
||||
from jsonIO import jsonIO
|
||||
from form import Ui_MainWindow
|
||||
from search import Ui_SearchDialog
|
||||
from main import Ui_MainWindow
|
||||
from search_dialog import SearchDialog
|
||||
|
||||
|
||||
statuses = {
|
||||
@@ -224,105 +224,3 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
# return
|
||||
pass
|
||||
|
||||
|
||||
header = {
|
||||
"User-Agent": "",
|
||||
"Authorization": ""
|
||||
}
|
||||
|
||||
|
||||
from requests import post, get
|
||||
from urllib.parse import urlencode
|
||||
class SearchDialog(QDialog, Ui_SearchDialog):
|
||||
def __init__(self, parent=None):
|
||||
QDialog.__init__(self, parent, flags=Qt.Window)
|
||||
Ui_SearchDialog.__init__(self)
|
||||
self.ui = Ui_SearchDialog()
|
||||
self.ui.setupUi(self)
|
||||
|
||||
self.parent = parent
|
||||
|
||||
# import tokens from tokens.json
|
||||
if not jsonIO.is_valid_json("tokens.json"):
|
||||
jsonIO.save_json("tokens.json", {
|
||||
"useragent": "",
|
||||
"client_id": "",
|
||||
"client_secret": "",
|
||||
"authorization_code": "",
|
||||
"access_token": "",
|
||||
"refresh_token": ""
|
||||
})
|
||||
QMessageBox.critical(self, "Ошибка", "Заполните 'tokens.json' своими данными чтобы поиск работал корректно!")
|
||||
self.close()
|
||||
else:
|
||||
self.tokens = jsonIO.load_json("tokens.json")
|
||||
for key, value in self.tokens.items():
|
||||
if (key != "access_token" or key != "refresh_token") and value == "":
|
||||
QMessageBox.critical(self, "Ошибка", "Заполните 'tokens.json' своими данными чтобы поиск работал корректно!")
|
||||
self.close()
|
||||
if self.tokens["access_token"] == "":
|
||||
self.get_new_access_token()
|
||||
self.update_headers()
|
||||
|
||||
self.ui.search.clicked.connect(self.search_titles)
|
||||
|
||||
def update_headers(self):
|
||||
header["User-Agent"] = self.tokens["useragent"]
|
||||
header["Authorization"] = "Bearer {}".format(self.tokens["access_token"])
|
||||
|
||||
def get_new_access_token(self):
|
||||
response = post("https://shikimori.one/oauth/token", headers=header, data={
|
||||
"grant_type": "authorization_code",
|
||||
"client_id": self.tokens["client_id"],
|
||||
"client_secret": self.tokens["client_secret"],
|
||||
"code": self.tokens["authorization_code"],
|
||||
})
|
||||
if response.status_code == 200:
|
||||
new_tokens = response.json()
|
||||
self.tokens["access_token"] = new_tokens["access_token"]
|
||||
self.tokens["refresh_token"] = new_tokens["refresh_token"]
|
||||
jsonIO.save_json("tokens.json", self.tokens)
|
||||
self.update_headers()
|
||||
print("got new tokens")
|
||||
|
||||
def refresh_access_token(self):
|
||||
response = post("https://shikimori.one/oauth/token", headers=header, data={
|
||||
"grant_type": "refresh_token",
|
||||
"client_id": self.tokens["client_id"],
|
||||
"client_secret": self.tokens["client_secret"],
|
||||
"refresh_token": self.tokens["refresh_token"],
|
||||
})
|
||||
if response.status_code == 200:
|
||||
new_tokens = response.json()
|
||||
self.tokens["access_token"] = new_tokens["access_token"]
|
||||
self.tokens["refresh_token"] = new_tokens["refresh_token"]
|
||||
jsonIO.save_json("tokens.json", self.tokens)
|
||||
self.update_headers()
|
||||
print("tokens updated", new_tokens)
|
||||
|
||||
def search_titles(self):
|
||||
title_name = self.ui.to_search.text()
|
||||
if len(title_name) == 0:
|
||||
QMessageBox.critical(self, "Ошибка", "Введите название тайтла.")
|
||||
return
|
||||
response = get("https://shikimori.one/api/animes", headers=header, params={"search": title_name, "limit": 25})
|
||||
# print(response.json())
|
||||
if response.status_code == 401:
|
||||
if response.json()["error"] == "invalid_token":
|
||||
self.refresh_access_token()
|
||||
# self.search_titles()
|
||||
return
|
||||
if response.status_code == 200:
|
||||
found_titles = response.json()
|
||||
if len(found_titles) == 0:
|
||||
QMessageBox.information(self, "Информация", "Ничего не найдено. Попробуйте еще раз.")
|
||||
return
|
||||
self.ui.search_list.clear()
|
||||
for data in found_titles:
|
||||
item = QListWidgetItem()
|
||||
if data["russian"] != "":
|
||||
item.setText("{} | {}".format(data["russian"], data["name"]))
|
||||
else:
|
||||
item.setText(data["name"])
|
||||
item.setData(1, data["id"])
|
||||
self.ui.search_list.addItem(item)
|
||||
2
run.py
2
run.py
@@ -3,7 +3,7 @@
|
||||
|
||||
from sys import argv, exit
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from window import MainWindow
|
||||
from main_window import MainWindow
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
112
search_dialog.py
Normal file
112
search_dialog.py
Normal file
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtWidgets import QDialog
|
||||
from search import Ui_SearchDialog
|
||||
from jsonIO import jsonIO
|
||||
from requests import post, get
|
||||
from urllib.parse import urlencode
|
||||
|
||||
|
||||
header = {
|
||||
"User-Agent": "",
|
||||
"Authorization": ""
|
||||
}
|
||||
tokens_filename = "tokens.json"
|
||||
|
||||
|
||||
class SearchDialog(QDialog, Ui_SearchDialog):
|
||||
def __init__(self, parent=None):
|
||||
QDialog.__init__(self, parent, flags=Qt.Window)
|
||||
Ui_SearchDialog.__init__(self)
|
||||
self.ui = Ui_SearchDialog()
|
||||
self.ui.setupUi(self)
|
||||
|
||||
self.parent = parent
|
||||
|
||||
# import tokens from tokens_filename
|
||||
if not jsonIO.is_valid_json(tokens_filename):
|
||||
jsonIO.save_json(tokens_filename, {
|
||||
"oauth_app_name": "",
|
||||
"client_id": "",
|
||||
"client_secret": "",
|
||||
"authorization_code": "",
|
||||
"access_token": "",
|
||||
"refresh_token": ""
|
||||
})
|
||||
QMessageBox.critical(self, "Ошибка", "Заполните 'tokens.json' своими данными чтобы поиск работал корректно!")
|
||||
self.close()
|
||||
else:
|
||||
self.tokens = jsonIO.load_json(tokens_filename)
|
||||
for key, value in self.tokens.items():
|
||||
if (key != "access_token" or key != "refresh_token") and value == "":
|
||||
QMessageBox.critical(self, "Ошибка", "Заполните 'tokens.json' своими данными чтобы поиск работал корректно!")
|
||||
self.close()
|
||||
if self.tokens["access_token"] == "":
|
||||
self.get_new_access_token()
|
||||
self.update_headers()
|
||||
|
||||
self.ui.search.clicked.connect(self.search_titles)
|
||||
|
||||
def update_headers(self):
|
||||
header["User-Agent"] = self.tokens["oauth_app_name"]
|
||||
header["Authorization"] = "Bearer {}".format(self.tokens["access_token"])
|
||||
|
||||
def get_new_access_token(self):
|
||||
response = post("https://shikimori.one/oauth/token", headers=header, data={
|
||||
"grant_type": "authorization_code",
|
||||
"client_id": self.tokens["client_id"],
|
||||
"client_secret": self.tokens["client_secret"],
|
||||
"code": self.tokens["authorization_code"],
|
||||
})
|
||||
if response.status_code == 200:
|
||||
new_tokens = response.json()
|
||||
self.tokens["access_token"] = new_tokens["access_token"]
|
||||
self.tokens["refresh_token"] = new_tokens["refresh_token"]
|
||||
jsonIO.save_json(tokens_filename, self.tokens)
|
||||
self.update_headers()
|
||||
print("got new tokens")
|
||||
|
||||
def refresh_access_token(self):
|
||||
response = post("https://shikimori.one/oauth/token", headers=header, data={
|
||||
"grant_type": "refresh_token",
|
||||
"client_id": self.tokens["client_id"],
|
||||
"client_secret": self.tokens["client_secret"],
|
||||
"refresh_token": self.tokens["refresh_token"],
|
||||
})
|
||||
if response.status_code == 200:
|
||||
new_tokens = response.json()
|
||||
self.tokens["access_token"] = new_tokens["access_token"]
|
||||
self.tokens["refresh_token"] = new_tokens["refresh_token"]
|
||||
jsonIO.save_json(tokens_filename, self.tokens)
|
||||
self.update_headers()
|
||||
print("tokens updated", new_tokens)
|
||||
|
||||
def search_titles(self):
|
||||
title_name = self.ui.to_search.text()
|
||||
if len(title_name) == 0:
|
||||
QMessageBox.critical(self, "Ошибка", "Введите название тайтла.")
|
||||
return
|
||||
response = get("https://shikimori.one/api/animes", headers=header, params={"search": title_name, "limit": 25})
|
||||
# print(response.json())
|
||||
if response.status_code == 401:
|
||||
if response.json()["error"] == "invalid_token":
|
||||
self.refresh_access_token()
|
||||
# self.search_titles()
|
||||
return
|
||||
if response.status_code == 200:
|
||||
found_titles = response.json()
|
||||
if len(found_titles) == 0:
|
||||
QMessageBox.information(self, "Информация", "Ничего не найдено. Попробуйте еще раз.")
|
||||
return
|
||||
self.ui.search_list.clear()
|
||||
for data in found_titles:
|
||||
item = QListWidgetItem()
|
||||
if data["russian"] != "":
|
||||
item.setText("{} | {}".format(data["russian"], data["name"]))
|
||||
else:
|
||||
item.setText(data["name"])
|
||||
item.setData(1, data["id"])
|
||||
self.ui.search_list.addItem(item)
|
||||
|
||||
Reference in New Issue
Block a user