content: /*
  This file is part of ServerProxy.
  SocketProxy is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
  Subsonic is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
  Copyright 2014 (C) Scott Jackson
  */
  
  package net.nullsum.audinaut.util;
  
  import java.io.File;
  import java.net.Socket;
  
  public class BufferProxy extends FileProxy {
      private BufferFile progress;
  
      protected ProxyTask getTask(Socket client) {
          return new BufferFileTask(client);
      }
  
      public void setBufferFile(BufferFile progress) {
          this.progress = progress;
      }
  
      protected class BufferFileTask extends StreamFileTask {
          public BufferFileTask(Socket client) {
              super(client);
          }
  
          @Override
          File getFile(String path) {
              return progress.getFile();
          }
  
          @Override
          Long getContentLength() {
              Long contentLength = progress.getContentLength();
              if (contentLength == null && progress.isWorkDone()) {
                  contentLength = file.length();
              }
              return contentLength;
          }
  
          @Override
          long getFileSize() {
              return progress.getEstimatedSize();
          }
  
          @Override
          public void onStart() {
              progress.onStart();
          }
  
          @Override
          public void onStop() {
              progress.onStop();
          }
  
          @Override
          public void onResume() {
              progress.onResume();
          }
  
          @Override
          public boolean isWorkDone() {
              return progress.isWorkDone() && cbSkip >= file.length();
          }
      }
  }
  