list files in root dir
This commit is contained in:
@@ -33,7 +33,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#files {
|
#files {
|
||||||
height: 5;
|
min-height: 4;
|
||||||
background: red 50%;
|
background: red 50%;
|
||||||
margin-left: 1;
|
margin-left: 1;
|
||||||
border: tall $surface;
|
border: tall $surface;
|
||||||
@@ -76,3 +76,7 @@
|
|||||||
margin-right: 1;
|
margin-right: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoadingIndicator {
|
||||||
|
height: 1;
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
from textual.screen import Screen
|
from textual.screen import Screen
|
||||||
from textual.app import ComposeResult
|
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 textual.containers import VerticalGroup, Vertical, HorizontalGroup, Right
|
||||||
|
|
||||||
from widgets import Navbar
|
from widgets import Navbar
|
||||||
@@ -16,6 +16,98 @@ class RepoViewScreen(Screen):
|
|||||||
self.owner_name = owner_name
|
self.owner_name = owner_name
|
||||||
self.repo_name = repo_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:
|
def compose(self) -> ComposeResult:
|
||||||
|
|
||||||
# get repo data via a request
|
# get repo data via a request
|
||||||
@@ -65,9 +157,11 @@ class RepoViewScreen(Screen):
|
|||||||
yield Button("Go to file", flat=True)
|
yield Button("Go to file", flat=True)
|
||||||
|
|
||||||
table = DataTable(id="files", show_cursor=False)
|
table = DataTable(id="files", show_cursor=False)
|
||||||
table.add_columns("SpookyDervish [r]9b32c417e9[/]", "switched from tabs to spaces", "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")
|
#table.add_row("\ue5ff screens", "[d]switched from tabs to spaces", "[d]51 minutes ago")
|
||||||
yield table
|
yield table
|
||||||
|
|
||||||
|
yield LoadingIndicator()
|
||||||
with Vertical(id="repo-info"):
|
with Vertical(id="repo-info"):
|
||||||
with HorizontalGroup():
|
with HorizontalGroup():
|
||||||
yield Input("Search code...", id="search-query")
|
yield Input("Search code...", id="search-query")
|
||||||
|
|||||||
Reference in New Issue
Block a user