121 lines
3.8 KiB
Python
121 lines
3.8 KiB
Python
import tkinter as tk
|
||
from tkinter import messagebox
|
||
|
||
from api import get_repo_data, get_commits, get_code_lines
|
||
from parser import parse_repo_info, parse_authors
|
||
|
||
|
||
class GiteaAnalyzer:
|
||
def __init__(self):
|
||
self.root = tk.Tk()
|
||
self.root.title("Gitea Analyzer")
|
||
self.root.geometry("1000x700")
|
||
self.root.minsize(850, 600)
|
||
self.root.configure(bg="#eef4ff")
|
||
|
||
self.build_interface()
|
||
self.root.mainloop()
|
||
|
||
def build_interface(self):
|
||
title = tk.Label(
|
||
self.root,
|
||
text="Gitea Repository Analyzer",
|
||
font=("Arial", 22, "bold"),
|
||
bg="#eef4ff",
|
||
fg="#1d3557",
|
||
)
|
||
title.pack(pady=(20, 5))
|
||
|
||
subtitle = tk.Label(
|
||
self.root,
|
||
text="Введите ссылку на репозиторий Gitea и получите информацию о нём",
|
||
font=("Arial", 12),
|
||
bg="#eef4ff",
|
||
fg="#333333",
|
||
)
|
||
subtitle.pack(pady=(0, 15))
|
||
|
||
input_frame = tk.Frame(self.root, bg="#eef4ff")
|
||
input_frame.pack(fill="x", padx=30)
|
||
|
||
self.repo_entry = tk.Entry(input_frame, font=("Arial", 12))
|
||
self.repo_entry.pack(side="left", fill="x", expand=True, ipady=6)
|
||
self.repo_entry.insert(0, "https://iux-gitea.myddns.me/owner/repo")
|
||
self.repo_entry.bind("<FocusIn>", self.clear_placeholder)
|
||
self.repo_entry.bind("<Return>", lambda event: self.analyze())
|
||
|
||
analyze_button = tk.Button(
|
||
input_frame,
|
||
text="Анализировать",
|
||
command=self.analyze,
|
||
bg="#4d8ee8",
|
||
fg="white",
|
||
font=("Arial", 11, "bold"),
|
||
relief="flat",
|
||
padx=20,
|
||
pady=7,
|
||
cursor="hand2",
|
||
)
|
||
analyze_button.pack(side="left", padx=(10, 0))
|
||
|
||
self.result_text = tk.Text(
|
||
self.root,
|
||
font=("Consolas", 11),
|
||
wrap="word",
|
||
state="disabled",
|
||
bg="#ffffff",
|
||
fg="#111111",
|
||
)
|
||
self.result_text.pack(fill="both", expand=True, padx=30, pady=20)
|
||
|
||
def clear_placeholder(self, event):
|
||
if self.repo_entry.get() == "https://iux-gitea.myddns.me/owner/repo":
|
||
self.repo_entry.delete(0, tk.END)
|
||
|
||
def set_text(self, text):
|
||
self.result_text.config(state="normal")
|
||
self.result_text.delete("1.0", tk.END)
|
||
self.result_text.insert(tk.END, text)
|
||
self.result_text.config(state="disabled")
|
||
|
||
def analyze(self):
|
||
repo_link = self.repo_entry.get().strip()
|
||
|
||
if not repo_link or repo_link == "https://iux-gitea.myddns.me/owner/repo":
|
||
messagebox.showerror("Ошибка", "Введите ссылку на репозиторий")
|
||
return
|
||
|
||
try:
|
||
self.set_text("Загрузка данных...\n")
|
||
self.root.update()
|
||
|
||
repo_data = get_repo_data(repo_link)
|
||
commits = get_commits(repo_link)
|
||
lines = get_code_lines(repo_link)
|
||
|
||
info = parse_repo_info(repo_data)
|
||
authors = parse_authors(commits)
|
||
|
||
output = []
|
||
output.append(f"Ссылка: {repo_link}\n")
|
||
output.append(info)
|
||
output.append("\nАвторы / соавторы по коммитам:\n")
|
||
|
||
if authors:
|
||
for author in sorted(authors):
|
||
output.append(f"- {author}\n")
|
||
else:
|
||
output.append("- нет данных\n")
|
||
|
||
output.append(f"\nСтрок Python-кода: {lines}\n")
|
||
|
||
self.set_text("".join(output))
|
||
|
||
except Exception as error:
|
||
self.set_text("")
|
||
messagebox.showerror("Ошибка", f"Не удалось получить данные:\n{error}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
GiteaAnalyzer()
|