This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
message-service.ts 1.77 KiB
Newer Older
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

import { SERVER_API_URL } from 'app/app.constants';

export interface BroadCastMessage {
  message: string;
  starts_at: Date;
  ends_at: Date;

  color: string;
  font: string;
  id: number;
  active: boolean; // false,
  target_path: string; // "*/welcome",
  broadcast_type: string; // "banner",
  dismissable: boolean; // false
}

/**
 provides infrastructure services for Plugins
 */
@Injectable({ providedIn: 'root' })
export class MessageService {
  public messageResourceURL = SERVER_API_URL + 'api/applicationInfo/broadcastMessages';
  private messages = new Array<BroadCastMessage>();
  private nextUpdate = 0;
  constructor(protected http: HttpClient) {}
  public getActiveMessages(): Array<BroadCastMessage> {
    const now = new Date();
    return this.getMessages().filter(m => m.starts_at <= now && m.ends_at >= now); //
  }
  public getMessages(): Array<BroadCastMessage> {
    const now = new Date().getTime();
    if (this.nextUpdate > now) {
      return this.messages;
    }
    this.nextUpdate = now + 60 * 1000; // wait at least 1 Minute for next try
    const resp = this.http.get<Array<BroadCastMessage>>(this.messageResourceURL);
    resp.subscribe(response => {
      // first convert dates correctly :-(
      response.forEach(m => {
        // eslint-disable-next-line @typescript-eslint/camelcase
        m.starts_at = new Date(m.starts_at);
        // eslint-disable-next-line @typescript-eslint/camelcase
        m.ends_at = new Date(m.ends_at);
      });
      // Data will be cached
      this.messages = response;
      this.nextUpdate = new Date().getTime() + 10 * 60 * 1000; // wait 10 Minute for next try
      return response;
    });
    return this.messages;
  }