list files in root dir

This commit is contained in:
2026-02-05 06:53:48 +11:00
parent 6d7a3b3146
commit 1bc1fd3d07
2 changed files with 102 additions and 4 deletions

View File

@@ -33,7 +33,7 @@
}
#files {
height: 5;
min-height: 4;
background: red 50%;
margin-left: 1;
border: tall $surface;
@@ -75,4 +75,8 @@
max-width: 16;
margin-right: 1;
}
}
LoadingIndicator {
height: 1;
}

View File

@@ -1,6 +1,6 @@
from textual.screen import Screen
from textual.app import ComposeResult
from textual.widgets import Input, Select, Static, DataTable, ContentSwitcher, Tabs, Tab, Button
from textual.widgets import Input, Select, LoadingIndicator, Static, DataTable, ContentSwitcher, Tabs, Tab, Button
from textual.containers import VerticalGroup, Vertical, HorizontalGroup, Right
from widgets import Navbar
@@ -15,6 +15,98 @@ class RepoViewScreen(Screen):
super().__init__()
self.owner_name = owner_name
self.repo_name = repo_name
def get_icon_from_name_and_type(self, file_name: str, is_folder: bool):
# nerd font icons my beloved
if not is_folder:
if not "." in file_name:
match file_name:
case "Makefile":
return "\ue673"
case "Dockerfile":
return "\ue7b0"
case _:
return "\uf15b"
extension = file_name[file_name.index(".")+1:]
match extension:
case 'c' | 'h':
return "\ue61e"
case 'cpp':
return "\ue61d"
case 'py':
return "\ue73c"
case 'js':
return "\ue781"
case 'gitignore':
return "\ue702"
case 'css' | 'tcss':
return "\ue749"
case 'go':
return "\ue65e"
case 'rs':
return "\ue7a8"
case 'grnd':
return "\uf44f"
case 'md':
return "\ueb1d"
case 'fish':
return "\uee41"
case 'sh':
return "\ue760"
case 'bat':
return "\ue70f"
case _:
return "\uf15b"
else:
return "\ue5ff"
async def on_mount(self):
files: DataTable = self.query_one("#files")
loading = self.query_one(LoadingIndicator)
files.display = False
# get files in root dir
files_response = requests.get(
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/contents"
)
loading.display = False
if not files_response.ok:
self.notify(files_response.text, title="Failed to get files:", severity="error")
return
# get most recent commit
commits_response = requests.get(
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/commits",
params={
"limit": 1
}
)
if not commits_response.ok:
self.notify(commits_response.text, title="Failed to get most recent commit:", severity="error")
return
most_recent_commit = commits_response.json()[0]
files.add_columns(
f"[b]{most_recent_commit["author"]["login"]}[/]",
f"[r]{most_recent_commit["sha"][:10]}[/]",
f"[d]{most_recent_commit["commit"]["message"]}"
)
rows = []
for file in files_response.json():
rows.append((f"[cyan]{self.get_icon_from_name_and_type(file["name"], file["type"] != "file")}[/] {file["name"]}", "[d]todo lol", "Updated idk ago"))
files.add_rows(rows)
files.display = True
def compose(self) -> ComposeResult:
@@ -65,9 +157,11 @@ class RepoViewScreen(Screen):
yield Button("Go to file", flat=True)
table = DataTable(id="files", show_cursor=False)
table.add_columns("SpookyDervish [r]9b32c417e9[/]", "switched from tabs to spaces", "51 minutes ago")
table.add_row("\ue5ff screens", "[d]switched from tabs to spaces", "[d]51 minutes ago")
#table.add_columns("SpookyDervish [r]9b32c417e9[/]", "switched from tabs to spaces", "51 minutes ago")
#table.add_row("\ue5ff screens", "[d]switched from tabs to spaces", "[d]51 minutes ago")
yield table
yield LoadingIndicator()
with Vertical(id="repo-info"):
with HorizontalGroup():
yield Input("Search code...", id="search-query")