browsing directories works
This commit is contained in:
@@ -42,6 +42,10 @@
|
|||||||
& > .datatable--header {
|
& > .datatable--header {
|
||||||
background: $surface;
|
background: $surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
link-style-hover: underline;
|
||||||
|
link-color-hover: $primary;
|
||||||
|
link-background-hover: transparent;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class RepoViewScreen(Screen):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.owner_name = owner_name
|
self.owner_name = owner_name
|
||||||
self.repo_name = repo_name
|
self.repo_name = repo_name
|
||||||
|
self.current_dir = "./src"
|
||||||
|
|
||||||
def get_icon_from_name_and_type(self, file_name: str, is_folder: bool):
|
def get_icon_from_name_and_type(self, file_name: str, is_folder: bool):
|
||||||
|
|
||||||
@@ -85,21 +86,28 @@ class RepoViewScreen(Screen):
|
|||||||
return "\ue5ff"
|
return "\ue5ff"
|
||||||
|
|
||||||
@work(thread=True, exclusive=True)
|
@work(thread=True, exclusive=True)
|
||||||
def on_mount(self):
|
def action_view_file(self, path: str, type: str):
|
||||||
|
self.notify(f"{path, type}")
|
||||||
|
|
||||||
|
if type == "dir":
|
||||||
|
self.current_dir = path
|
||||||
|
self.show_directory(path)
|
||||||
|
|
||||||
|
def show_directory(self, path: str):
|
||||||
files: DataTable = self.query_one("#files")
|
files: DataTable = self.query_one("#files")
|
||||||
loading = self.query_one(LoadingIndicator)
|
files.clear(columns=True)
|
||||||
|
|
||||||
files.display = False
|
# get files in dir
|
||||||
|
|
||||||
# get files in root dir
|
|
||||||
files_response = requests.get(
|
files_response = requests.get(
|
||||||
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/contents"
|
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/contents/{path}"
|
||||||
)
|
)
|
||||||
|
|
||||||
if not files_response.ok:
|
if not files_response.ok:
|
||||||
self.notify(files_response.text, title="Failed to get files:", severity="error")
|
self.notify(files_response.text, title="Failed to get files:", severity="error")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
print("Getting most recent commit...")
|
||||||
|
|
||||||
# get most recent commit
|
# get most recent commit
|
||||||
commits_response = requests.get(
|
commits_response = requests.get(
|
||||||
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/commits",
|
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/commits",
|
||||||
@@ -119,7 +127,7 @@ class RepoViewScreen(Screen):
|
|||||||
f"[d]{most_recent_commit["commit"]["message"]}"
|
f"[d]{most_recent_commit["commit"]["message"]}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print("Getting root commits...")
|
||||||
|
|
||||||
rows = []
|
rows = []
|
||||||
commit_page_number = 1
|
commit_page_number = 1
|
||||||
@@ -134,8 +142,9 @@ class RepoViewScreen(Screen):
|
|||||||
"path": ".",
|
"path": ".",
|
||||||
"verification": False,
|
"verification": False,
|
||||||
"files": False,
|
"files": False,
|
||||||
|
"stat": False,
|
||||||
"page": commit_page_number,
|
"page": commit_page_number,
|
||||||
"limit": page_size
|
"limit": page_size,
|
||||||
}
|
}
|
||||||
).json()
|
).json()
|
||||||
|
|
||||||
@@ -144,11 +153,23 @@ class RepoViewScreen(Screen):
|
|||||||
|
|
||||||
if len(commits) == page_size: # we reached end of the page
|
if len(commits) == page_size: # we reached end of the page
|
||||||
commit_page_number += 1
|
commit_page_number += 1
|
||||||
|
print("Next page...")
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
found_readme = False
|
|
||||||
readme: Markdown = self.query_one("#readme")
|
readme: Markdown = self.query_one("#readme")
|
||||||
|
found_readme = False
|
||||||
|
|
||||||
|
readme.display = path == "."
|
||||||
|
|
||||||
|
# add a ".." folder if we're not in the root directory
|
||||||
|
if path != ".":
|
||||||
|
previous_dir = self.current_dir[:self.current_dir.rfind("/")]
|
||||||
|
rows.append((
|
||||||
|
f"[cyan]{self.get_icon_from_name_and_type("..", True)}[/] [@click=screen.view_file('{previous_dir}','dir')]..[/]",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
))
|
||||||
|
|
||||||
for file in files_response.json():
|
for file in files_response.json():
|
||||||
commit = commit_data[file["last_commit_sha"]]
|
commit = commit_data[file["last_commit_sha"]]
|
||||||
@@ -156,12 +177,14 @@ class RepoViewScreen(Screen):
|
|||||||
commit_created_at = datetime.fromisoformat(commit["created"]).replace(tzinfo=None)
|
commit_created_at = datetime.fromisoformat(commit["created"]).replace(tzinfo=None)
|
||||||
|
|
||||||
rows.append((
|
rows.append((
|
||||||
f"[cyan]{self.get_icon_from_name_and_type(file["name"], file["type"] != "file")}[/] {file["name"]}",
|
f"[cyan]{self.get_icon_from_name_and_type(file["name"], file["type"] != "file")}[/] [@click=screen.view_file('{self.current_dir}/{file["name"]}','{file["type"]}')]{file["name"]}[/]",
|
||||||
f"[d]{commit["commit"]["message"]}",
|
f"[d]{commit["commit"]["message"]}[/]",
|
||||||
f"[d]Updated {time_delta(datetime.now() - commit_created_at)} ago"
|
f"[d]Updated {time_delta(datetime.now() - commit_created_at)} ago[/]"
|
||||||
))
|
))
|
||||||
|
|
||||||
if file["name"].lower() == "readme.md":
|
if path == "." and file["name"].lower() == "readme.md":
|
||||||
|
print("Getting README...")
|
||||||
|
|
||||||
found_readme = True
|
found_readme = True
|
||||||
readme.border_title = f"\uf405 {file["name"]}"
|
readme.border_title = f"\uf405 {file["name"]}"
|
||||||
|
|
||||||
@@ -169,12 +192,27 @@ class RepoViewScreen(Screen):
|
|||||||
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/raw/{file["name"]}"
|
self.app.GITEA_HOST + f"api/v1/repos/{self.owner_name}/{self.repo_name}/raw/{file["name"]}"
|
||||||
).text
|
).text
|
||||||
self.app.call_from_thread(readme.update, readme_content or "Empty README")
|
self.app.call_from_thread(readme.update, readme_content or "Empty README")
|
||||||
|
|
||||||
|
print("Adding rows...")
|
||||||
files.add_rows(rows)
|
files.add_rows(rows)
|
||||||
|
|
||||||
if not found_readme:
|
if not found_readme and path == ".":
|
||||||
self.app.call_from_thread(readme.update, "This repository has no `README.md` file.")
|
self.app.call_from_thread(readme.update, "This repository has no `README.md` file.")
|
||||||
|
|
||||||
|
return found_readme
|
||||||
|
|
||||||
|
@work(thread=True, exclusive=True)
|
||||||
|
def on_mount(self):
|
||||||
|
print("Getting files...")
|
||||||
|
files: DataTable = self.query_one("#files")
|
||||||
|
loading = self.query_one(LoadingIndicator)
|
||||||
|
|
||||||
|
files.display = False
|
||||||
|
|
||||||
|
self.show_directory(self.current_dir)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
loading.display = False
|
loading.display = False
|
||||||
files.display = True
|
files.display = True
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user