Merge pull request #3173 from ceruleandeep/redesign-extension-manager Redesign extension manager

003d17b2c5ee9379d7e62805f377eca7c798c85d

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
3 files changed, +25 -5Ignore whitespace
.gitignore+2 -0
@@ -50,3 +50,5 @@ public/css/user.css
5050/default/scaffold
5151public/scripts/extensions/third-party
5252/certs
53+.aider*
54+.env
public/scripts/extensions.js+13 -3
@@ -770,7 +770,7 @@ async function showExtensionsDetails() {
770770
771771/**
772772 * Handles the click event for the update button of an extension.
773773 * This function makes a POST request to '/update_extensionapi/extensions/update' with the extension's name.
774774 * If the extension is already up to date, it displays a success message.
775775 * If the extension is not up to date, it updates the extension and displays a success message with the new commit hash.
776776 */
@@ -783,8 +783,11 @@ async function onUpdateClick() {
783783 return;
784784 }
785785
786786 const icon = $(this).find('i').addClass('fa-spin');
787+ icon.addClass('fa-spin');
787788 await updateExtension(extensionName, false);
789+ // updateExtension eats the error, but we can at least stop the spinner
790+ icon.removeClass('fa-spin');
788791}
789792
790793/**
@@ -803,10 +806,17 @@ async function updateExtension(extensionName, quiet) {
803806 }),
804807 });
805808
809+ if (!response.ok) {
810+ const text = await response.text();
811+ toastr.error(text || response.statusText, t`Extension update failed`, { timeOut: 5000 });
812+ console.error('Extension update failed', response.status, response.statusText, text);
813+ return;
814+ }
815+
806816 const data = await response.json();
807817
808818 if (!quiet) {
809819 await showExtensionsDetails();
810820 }
811821
812822 if (data.isUpToDate) {
src/endpoints/extensions.js+10 -2
@@ -224,12 +224,20 @@ router.post('/version', jsonParser, async (request, response) => {
224224 return response.status(404).send(`Directory does not exist at ${extensionPath}`);
225225 }
226226
227+ let currentCommitHash;
228+ try {
229+ currentCommitHash = await git.cwd(extensionPath).revparse(['HEAD']);
230+ } catch (error) {
231+ // it is not a git repo, or has no commits yet, or is a bare repo
232+ // not possible to update it, most likely can't get the branch name either
233+ return response.send({ currentBranchName: null, currentCommitHash, isUpToDate: true, remoteUrl: null });
234+ }
235+
227236 const currentBranch = await git.cwd(extensionPath).branch();
228237 // get only the working branch
229238 const currentBranchName = currentBranch.current;
230239 await git.cwd(extensionPath).fetch('origin');
231- const currentCommitHash = await git.cwd(extensionPath).revparse(['HEAD']);
240+ console.log(extensionName, currentBranchName, currentCommitHash);
232- console.log(currentBranch, currentCommitHash);
233241 const { isUpToDate, remoteUrl } = await checkIfRepoIsUpToDate(extensionPath);
234242
235243 return response.send({ currentBranchName, currentCommitHash, isUpToDate, remoteUrl });