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
50/default/scaffold50/default/scaffold
51public/scripts/extensions/third-party51public/scripts/extensions/third-party
52/certs52/certs
53.aider*
54.env
public/scripts/extensions.js+13 -3
@@ -770,7 +770,7 @@ async function showExtensionsDetails() {
770770
771/**771/**
772 * Handles the click event for the update button of an extension.772 * Handles the click event for the update button of an extension.
773 * This function makes a POST request to '/update_extension' with the extension's name.773 * This function makes a POST request to '/api/extensions/update' with the extension's name.
774 * If the extension is already up to date, it displays a success message.774 * If the extension is already up to date, it displays a success message.
775 * If the extension is not up to date, it updates the extension and displays a success message with the new commit hash.775 * If the extension is not up to date, it updates the extension and displays a success message with the new commit hash.
776 */776 */
@@ -783,8 +783,11 @@ async function onUpdateClick() {
783 return;783 return;
784 }784 }
785785
786 $(this).find('i').addClass('fa-spin');786 const icon = $(this).find('i');
787 icon.addClass('fa-spin');
787 await updateExtension(extensionName, false);788 await updateExtension(extensionName, false);
789 // updateExtension eats the error, but we can at least stop the spinner
790 icon.removeClass('fa-spin');
788}791}
789792
790/**793/**
@@ -803,10 +806,17 @@ async function updateExtension(extensionName, quiet) {
803 }),806 }),
804 });807 });
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
806 const data = await response.json();816 const data = await response.json();
807817
808 if (!quiet) {818 if (!quiet) {
809 showExtensionsDetails();819 await showExtensionsDetails();
810 }820 }
811821
812 if (data.isUpToDate) {822 if (data.isUpToDate) {
src/endpoints/extensions.js+10 -2
@@ -224,12 +224,20 @@ router.post('/version', jsonParser, async (request, response) => {
224 return response.status(404).send(`Directory does not exist at ${extensionPath}`);224 return response.status(404).send(`Directory does not exist at ${extensionPath}`);
225 }225 }
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
227 const currentBranch = await git.cwd(extensionPath).branch();236 const currentBranch = await git.cwd(extensionPath).branch();
228 // get only the working branch237 // get only the working branch
229 const currentBranchName = currentBranch.current;238 const currentBranchName = currentBranch.current;
230 await git.cwd(extensionPath).fetch('origin');239 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);
233 const { isUpToDate, remoteUrl } = await checkIfRepoIsUpToDate(extensionPath);241 const { isUpToDate, remoteUrl } = await checkIfRepoIsUpToDate(extensionPath);
234242
235 return response.send({ currentBranchName, currentCommitHash, isUpToDate, remoteUrl });243 return response.send({ currentBranchName, currentCommitHash, isUpToDate, remoteUrl });