fetchTemplate static method

Future<XmlDocument?> fetchTemplate({
  1. required String url,
  2. Map<String, String?>? parameters,
  3. required bool refresh,
})

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;
}