code: def download(self,
                   destination,       # type: Union[str, fs.base.FS]
                   condition=None,    # type: Optional[Callable[[dict], bool]]
                   media_count=None,  # type: Optional[int]
                   timeframe=None,    # type: Optional[_Timeframe]
                   new_only=False,    # type: bool
                   pgpbar_cls=None,   # type: Optional[Type[ProgressBar]]
                   dlpbar_cls=None,   # type: Optional[Type[ProgressBar]]
                   ):
          # type: (...) -> int
          
          destination, close_destination = self._init_destfs(destination)
  
          queue = Queue()                           # type: Queue[Dict]
          medias_queued = self._fill_media_queue(
              queue, destination, iter(self.medias()), media_count,
              new_only, condition)
          queue.put(None)
  
          worker = InstaDownloader(
              queue=queue,
              destination=destination,
              namegen=self.namegen,
              add_metadata=self.add_metadata,
              dump_json=self.dump_json,
              dump_only=self.dump_only,
              pbar=None,
              session=self.session)
          worker.run()
  
          return medias_queued
docs: Download the refered post to the destination.
  
          See `InstaLooter.download` for argument reference.
  
          Note:
              This function, opposed to other *looter* implementations, will
              not spawn new threads, but simply use the main thread to download
              the files.
  
              Since a worker is in charge of downloading a *media* at a time
              (and not a *file*), there would be no point in spawning more.