mirror of
https://github.com/ONLYOFFICE/onlyoffice.github.io.git
synced 2026-04-07 14:04:30 +08:00
Add custom providers realization
This commit is contained in:
@ -172,6 +172,7 @@ window.Asc.plugin.init = function() {
|
||||
window.Asc.plugin.attachEvent("onThemeChanged", onThemeChanged);
|
||||
window.Asc.plugin.attachEvent("onModelInfo", onModelInfo);
|
||||
window.Asc.plugin.attachEvent("onSubmit", onSubmit);
|
||||
window.Asc.plugin.attachEvent("onProvidersUpdate", onProvidersUpdate);
|
||||
window.Asc.plugin.attachEvent("onGetModels", function(data) {
|
||||
if(data.error == 1) {
|
||||
rejectModels && rejectModels(data.message);
|
||||
@ -250,6 +251,22 @@ function onResize () {
|
||||
});
|
||||
}
|
||||
|
||||
function onProvidersUpdate(info) {
|
||||
providersList = [];
|
||||
|
||||
for (let i = 0, len = info.providers.length; i < len; i++) {
|
||||
let srcProvider = info.providers[i];
|
||||
providersList.push({
|
||||
id : srcProvider.name,
|
||||
name : srcProvider.name,
|
||||
url : srcProvider.url,
|
||||
key : srcProvider.key,
|
||||
});
|
||||
}
|
||||
|
||||
updateProviderComboBox(false);
|
||||
}
|
||||
|
||||
function onModelInfo(info) {
|
||||
type = (info.model ? 'edit' : 'add');
|
||||
|
||||
|
||||
@ -197,23 +197,24 @@ function onOpenCustomProvidersModal() {
|
||||
if (!customProvidersWindow) {
|
||||
customProvidersWindow = new window.Asc.PluginWindow();
|
||||
customProvidersWindow.attachEvent("onInit", function() {
|
||||
//TODO: Add set custom providers
|
||||
customProvidersWindow.command('onSetCustomProvider', []);
|
||||
customProvidersWindow.command('onSetCustomProvider', AI.getCustomProviders());
|
||||
});
|
||||
customProvidersWindow.attachEvent("onAddCustomProvider", function(item) {
|
||||
console.log('Add custom provider', item);
|
||||
|
||||
// If the provider addition is successful, then call "onAddCustomProvider"
|
||||
// Else call "onErrorCustomProvider"
|
||||
let isError = false;
|
||||
if(isError) {
|
||||
let isError = !AI.addCustomProvider(item.content);
|
||||
if (isError) {
|
||||
customProvidersWindow.command('onErrorCustomProvider');
|
||||
} else {
|
||||
customProvidersWindow.command('onAddCustomProvider', item);
|
||||
customProvidersWindow.command('onSetCustomProvider', AI.getCustomProviders());
|
||||
|
||||
if (aiModelEditWindow)
|
||||
aiModelEditWindow.command('onProvidersUpdate', { providers : AI.serializeProviders() });
|
||||
}
|
||||
});
|
||||
customProvidersWindow.attachEvent("onDeleteCustomProvider", function(item) {
|
||||
console.log('Delete custom provider', item);
|
||||
AI.removeCustomProvider(item.name);
|
||||
|
||||
if (aiModelEditWindow)
|
||||
aiModelEditWindow.command('onProvidersUpdate', { providers : AI.serializeProviders() });
|
||||
});
|
||||
}
|
||||
customProvidersWindow.show(variation);
|
||||
|
||||
@ -79,10 +79,13 @@ let templateFilePath = document.currentScript.src + '/../engine/providers/provid
|
||||
window.Asc.plugin.init = function() {
|
||||
window.Asc.plugin.sendToPlugin("onInit");
|
||||
window.Asc.plugin.attachEvent("onSetCustomProvider", function(list) {
|
||||
providersList.set(list);
|
||||
let items = [];
|
||||
for (let i = 0, len = list.length; i < len; i++)
|
||||
items.push({ name : list[i] });
|
||||
providersList.set(items);
|
||||
});
|
||||
window.Asc.plugin.attachEvent("onAddCustomProvider", function(item) {
|
||||
providersList.add({name: item.name});
|
||||
providersList.add({name: item});
|
||||
});
|
||||
window.Asc.plugin.attachEvent("onErrorCustomProvider", function(item) {
|
||||
showErrorLabel('Error adding provider from file, please try again');
|
||||
|
||||
@ -31,7 +31,8 @@
|
||||
let obj = {
|
||||
version : AI.Storage.Version,
|
||||
providers : {},
|
||||
models : AI.Models
|
||||
models : AI.Models,
|
||||
customProviders : AI.InternalCustomProvidersSources
|
||||
};
|
||||
|
||||
for (let pr in AI.Providers)
|
||||
@ -87,6 +88,21 @@
|
||||
let oldProviders = AI.Providers;
|
||||
AI.Providers = {};
|
||||
|
||||
AI.InternalCustomProvidersSources = obj.customProviders || {};
|
||||
AI.loadCustomProviders();
|
||||
|
||||
for (let i = 0, len = AI.InternalCustomProviders.length; i < len; i++) {
|
||||
let pr = AI.InternalCustomProviders[i];
|
||||
oldProviders[pr.name] = pr;
|
||||
}
|
||||
|
||||
for (let i = 0, len = AI.InternalCustomProviders.length; i < len; i++) {
|
||||
if (AI.InternalCustomProviders[i].name === name) {
|
||||
AI.InternalCustomProviders.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (let i in obj.providers) {
|
||||
let pr = obj.providers[i];
|
||||
AI.Providers[i] = AI.createProviderInstance(pr.name, pr.url, pr.key, pr.addon);
|
||||
@ -203,6 +219,6 @@
|
||||
AI.Providers[pr.name] = pr;
|
||||
}
|
||||
AI.Storage.load();
|
||||
}
|
||||
};
|
||||
|
||||
})(window);
|
||||
|
||||
@ -117,11 +117,15 @@
|
||||
|
||||
AI.InternalProviders = [];
|
||||
AI.createProviderInstance = function(name, url, key, addon) {
|
||||
for (let i = 0, len = window.AI.InternalCustomProviders.length; i < len; i++) {
|
||||
if (name === AI.InternalCustomProviders[i].name)
|
||||
return AI.InternalCustomProviders[i].createInstance(name, url, key, addon || AI.InternalCustomProviders[i].addon);
|
||||
}
|
||||
for (let i = 0, len = window.AI.InternalProviders.length; i < len; i++) {
|
||||
if (name === AI.InternalProviders[i].name)
|
||||
return AI.InternalProviders[i].createInstance(name, url, key, addon || AI.InternalProviders[i].addon);
|
||||
}
|
||||
return new Provider(name, url, key);
|
||||
return new AI.Provider(name, url, key);
|
||||
};
|
||||
|
||||
AI.isInternalProvider = function(name) {
|
||||
@ -157,4 +161,85 @@
|
||||
AI.onLoadInternalProviders();
|
||||
};
|
||||
|
||||
AI.InternalCustomProvidersSources = {};
|
||||
AI.InternalCustomProviders = [];
|
||||
|
||||
AI.loadCustomProviders = function() {
|
||||
|
||||
AI.InternalCustomProviders = [];
|
||||
for (let name in AI.InternalCustomProvidersSources) {
|
||||
AI.addCustomProvider(AI.InternalCustomProvidersSources[name], true);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
AI.addCustomProvider = function(providerContent, isRegister) {
|
||||
|
||||
try {
|
||||
let content = "(function(){\n" + providerContent + "\nreturn new Provider();})();";
|
||||
let provider = eval(content);
|
||||
|
||||
if (!provider.name)
|
||||
return false;
|
||||
|
||||
if (provider.isOnlyDesktop() && (-1 === navigator.userAgent.indexOf("AscDesktopEditor")))
|
||||
return false;
|
||||
|
||||
AI.InternalCustomProvidersSources[provider.name] = providerContent;
|
||||
|
||||
for (let i = 0, len = AI.InternalCustomProviders.length; i < len; i++) {
|
||||
if (AI.InternalCustomProviders[i].name === provider.name) {
|
||||
AI.InternalCustomProviders.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
AI.InternalCustomProviders.push(provider);
|
||||
|
||||
if (!isRegister)
|
||||
{
|
||||
AI.Storage.save();
|
||||
AI.Storage.load();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
} catch(err) {
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
};
|
||||
|
||||
AI.removeCustomProvider = function(name) {
|
||||
|
||||
if (AI.InternalCustomProvidersSources[name])
|
||||
delete AI.InternalCustomProvidersSources[name];
|
||||
|
||||
for (let i = 0, len = AI.InternalCustomProviders.length; i < len; i++) {
|
||||
if (AI.InternalCustomProviders[i].name === name) {
|
||||
AI.InternalCustomProviders.splice(i, 1);
|
||||
|
||||
if (!AI.isInternalProvider(name) && AI.Providers[name]) {
|
||||
delete AI.Providers[name];
|
||||
}
|
||||
|
||||
AI.Storage.save();
|
||||
AI.Storage.load();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
AI.getCustomProviders = function() {
|
||||
|
||||
let names = [];
|
||||
for (let i = 0, len = AI.InternalCustomProviders.length; i < len; i++) {
|
||||
names.push(AI.InternalCustomProviders[i].name);
|
||||
}
|
||||
return names;
|
||||
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user