downloadTaskStateCallbackHandler method

void downloadTaskStateCallbackHandler(
  1. MethodCall methodCall
)

Implementation

void downloadTaskStateCallbackHandler(MethodCall methodCall) {
  bool keepAlive = methodCall.arguments["keepAlive"];
  var state = methodCall.arguments["state"];
  var task = methodCall.arguments["task"];
  if (task == null) return;

  String itemIdentifier = "";
  if (task.containsKey("roomId") &&
      int.parse(task["roomId"]) != 0 &&
      task.containsKey("sessionId")) {
    itemIdentifier = itemIdentifierWithClassIDSessionIDClipedVersion(
        task["roomId"], task["sessionId"], -1);
  } else if (task.containsKey("videoId")) {
    itemIdentifier = itemIdentifierWithVideoID(task["videoId"]);
  }

  if (state == null) return;
  String event = state["event"];

  if (event == "onProgress") {
    int downloadedLength = state["downloadedLength"].toInt();
    int totalLength = state["totalLength"].toInt();
    if (progressClosureTable[itemIdentifier] != null) {
      progressClosureTable[itemIdentifier]!(downloadedLength, totalLength);
    }
  } else {
    BJYDownloadTaskState stateEnum = BJYDownloadTaskState.Init;
    switch (event) {
      case "onStarted":
        stateEnum = BJYDownloadTaskState.Started;
        break;
      case "onPaused":
        stateEnum = BJYDownloadTaskState.Paused;
        break;
      case "onFinish":
        stateEnum = BJYDownloadTaskState.Completed;
        break;
    }
    if (stateClosureTable[itemIdentifier] != null) {
      stateClosureTable[itemIdentifier]!(stateEnum, "");
    }
  }

  if (!keepAlive) {
    stateClosureTable.remove(itemIdentifier);
    progressClosureTable.remove(itemIdentifier);
  }
}