Fix updating apps not working on multi-instance servers

pull/10611/head
graywolf336 7 years ago
parent 20ce928efc
commit e3fcbcbd1e
No known key found for this signature in database
GPG Key ID: 63D2D655DA5B3643
  1. 10
      packages/rocketchat-apps/client/admin/appInstall.html
  2. 5
      packages/rocketchat-apps/client/admin/appInstall.js
  3. 15
      packages/rocketchat-apps/server/communication/websockets.js
  4. 2
      packages/rocketchat-lib/client/lib/RestApiClient.js

@ -49,8 +49,14 @@
</div>
</div>
<div class="rc-button-group">
<button class="rc-button rc-button--secondary js-cancel">{{ _ "Cancel" }}</button>
<button class="rc-button rc-button--primary js-install" disabled='{{disabled}}'>{{ _ "Install" }}</button>
<button class="rc-button rc-button--secondary js-cancel">{{_ "Cancel"}}</button>
<button class="rc-button rc-button--primary js-install" disabled='{{disabled}}'>
{{#if isUpdating}}
{{_ "Update"}}
{{else}}
{{_ "Install"}}
{{/if}}
</button>
</div>
{{/if}}
</div>

@ -21,6 +21,11 @@ Template.appInstall.helpers({
disabled() {
const instance = Template.instance();
return !(instance.appUrl.get() || instance.file.get());
},
isUpdating() {
const instance = Template.instance();
return !!instance.isUpdatingId.get();
}
});

@ -23,6 +23,7 @@ export class AppServerListener {
this.engineStreamer.on(AppEvents.APP_STATUS_CHANGE, this.onAppStatusUpdated.bind(this));
this.engineStreamer.on(AppEvents.APP_SETTING_UPDATED, this.onAppSettingUpdated.bind(this));
this.engineStreamer.on(AppEvents.APP_REMOVED, this.onAppRemoved.bind(this));
this.engineStreamer.on(AppEvents.APP_UPDATED, this.onAppUpdated.bind(this));
this.engineStreamer.on(AppEvents.COMMAND_ADDED, this.onCommandAdded.bind(this));
this.engineStreamer.on(AppEvents.COMMAND_DISABLED, this.onCommandDisabled.bind(this));
this.engineStreamer.on(AppEvents.COMMAND_UPDATED, this.onCommandUpdated.bind(this));
@ -53,6 +54,15 @@ export class AppServerListener {
this.clientStreamer.emit(AppEvents.APP_SETTING_UPDATED, { appId });
}
async onAppUpdated(appId) {
this.recieved.set(`${ AppEvents.APP_UPDATED }_${ appId }`, { appId, when: new Date() });
const storageItem = await this.orch.getStorage().retrieveOne(appId);
await this.orch.getManager().update(storageItem.zip);
this.clientStreamer.emit(AppEvents.APP_UPDATED, appId);
}
async onAppRemoved(appId) {
await this.orch.getManager().remove(appId);
this.clientStreamer.emit(AppEvents.APP_REMOVED, appId);
@ -105,6 +115,11 @@ export class AppServerNotifier {
}
async appUpdated(appId) {
if (this.recieved.has(`${ AppEvents.APP_UPDATED }_${ appId }`)) {
this.recieved.delete(`${ AppEvents.APP_UPDATED }_${ appId }`);
return;
}
this.engineStreamer.emit(AppEvents.APP_UPDATED, appId);
this.clientStreamer.emit(AppEvents.APP_UPDATED, appId);
}

@ -70,7 +70,7 @@ RocketChat.API = {
return new Promise(function _jqueryFormDataPromise(resolve, reject) {
jQuery.ajax({
url: `${ Meteor.absoluteUrl() }api/${ endpoint }${ query }`,
url: `${ window.location.origin }/api/${ endpoint }${ query }`,
headers: {
'X-User-Id': localStorage['Meteor.userId'],
'X-Auth-Token': localStorage['Meteor.loginToken']

Loading…
Cancel
Save