@Override
  public void onDownloadControllerStopped(
      SingleDownloadController downloadController,
      DownloadLinkCandidate candidate,
      DownloadLinkCandidateResult result) {

    DownloadLink dl = candidate.getLink();
    HashMap<String, Object> dls = new HashMap<String, Object>();
    dls.put("uuid", dl.getUniqueID().getID());
    dls.put("running", false);
    fire(
        BASIC_EVENT.LINK_UPDATE.name() + ".running",
        dls,
        BASIC_EVENT.LINK_UPDATE.name() + ".running." + dl.getUniqueID().getID());

    pushDiff(dl);
    cleanup(dl);
    flushBuffer();
  }
 @Override
 public void onDownloadControllerStart(
     SingleDownloadController downloadController, DownloadLinkCandidate candidate) {
   DownloadLink dl = candidate.getLink();
   HashMap<String, Object> dls = new HashMap<String, Object>();
   dls.put("uuid", dl.getUniqueID().getID());
   dls.put("running", true);
   fire(
       BASIC_EVENT.LINK_UPDATE.name() + ".running",
       dls,
       BASIC_EVENT.LINK_UPDATE.name() + ".running." + dl.getUniqueID().getID());
   flushBuffer();
   for (Entry<Long, ChannelCollector> es : collectors.entrySet()) {
     if (es.getValue().hasIntervalSubscriptions()) {
       es.getValue().updateBase(dl);
     }
   }
   updateExecuter(true);
 }