fetchTemplate static method
Implementation
static Future<XmlDocument?> fetchTemplate({required String url, Map<String, String?>? parameters, required bool refresh}) async
{
// saved document
if (isUUID(url)) return await fetchSaved(url: url);
if (url == '.js' && parameters != null) {
XmlDocument? document = TemplateManager().fromJs(parameters['templ8']);
// if (document != null) return document;
if (document != null) return Template.fromDocument(name: url, xml: document, parameters: parameters).document;
return null;
}
Log().debug('Getting template $url');
// parse the url
var uri = URI.parse(url);
if (uri == null) return null;
// use qualified url
url = uri.url;
String? template;
// auto refresh
refresh = refresh || (System.app?.autoRefresh ?? false);
// get template from file
if (uri.scheme != "file")
{
// get template from server
if (refresh == true)
{
// get template
template = await TemplateManager().fromServer(url);
// save to local storage
if (template != null && (System.app?.cacheContent ?? false)) TemplateManager().toDisk(url, template);
}
// get template from memory
if (template == null)
{
XmlDocument? document = TemplateManager().fromMemory(url);
if (document != null) return document;
}
// get template from disk
template ??= await TemplateManager().fromDisk(url);
// get template from database (web)
template ??= await TemplateManager().fromDatabase(url);
// get template from server
if (template == null)
{
// get template
template = await TemplateManager().fromServer(url);
// save to local storage
if (template != null && (System.app?.cacheContent ?? false)) TemplateManager().toDisk(url, template);
}
}
// local template
else
{
// from assets archive
template ??= await TemplateManager().fromAssetsBundle(url);
// from disk
template ??= await TemplateManager().fromDisk(url);
}
// nothing to process
if (template == null)
{
Log().error("Template $url not found!");
return null;
}
var document = Xml.tryParse(template);
// process includes
if (document != null) await _processIncludes(document, parameters, refresh);
// cache in memory after processing include files
if (document != null) await TemplateManager().toMemory(url, document);
// return the template
return Template.fromDocument(name: url, xml: document, parameters: parameters).document;
}