Remove offline classes for now (not ready yet)

This commit is contained in:
Oliver Woodman 2017-06-30 22:24:40 +01:00
parent 4ee0b2e1c8
commit 19a3d94022
3 changed files with 0 additions and 311 deletions

View File

@ -1,195 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source.offline;
import android.support.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.upstream.DataSink;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DummyDataSource;
import com.google.android.exoplayer2.upstream.FileDataSource;
import com.google.android.exoplayer2.upstream.PriorityDataSource;
import com.google.android.exoplayer2.upstream.cache.Cache;
import com.google.android.exoplayer2.upstream.cache.CacheDataSink;
import com.google.android.exoplayer2.upstream.cache.CacheDataSource;
import com.google.android.exoplayer2.util.ClosedSource;
import com.google.android.exoplayer2.util.PriorityTaskManager;
import java.io.IOException;
/**
* Base class for stream downloaders.
*
* <p>All of the methods are blocking. Also they are not thread safe, except {@link
* #getTotalSegments()}, {@link #getDownloadedSegments()} and {@link #getDownloadedBytes()}.
*
* @param <M> The type of the manifest object.
* @param <K> The type of the representation key object.
*/
@ClosedSource(reason = "Not ready yet")
public abstract class Downloader<M, K> {
/**
* Listener notified when download progresses.
*/
public interface ProgressListener {
/**
* Called for the first time after the initialization and then after download of each segment.
* It is called on the thread which invoked {@link #downloadRepresentations(ProgressListener)}.
*
* @param downloader The reporting instance.
* @param totalSegments Total number of segments in the content.
* @param downloadedSegments Total number of downloaded segments.
* @param downloadedBytes Total number of downloaded bytes.
* @see #downloadRepresentations(ProgressListener)
*/
void onDownloadProgress(Downloader<?, ?> downloader, int totalSegments,
int downloadedSegments, long downloadedBytes);
}
protected final Cache cache;
protected final CacheDataSource dataSource;
protected final CacheDataSource offlineDataSource;
protected final PriorityTaskManager priorityTaskManager;
protected final String manifestUri;
protected volatile int totalSegments;
protected volatile int downloadedSegments;
protected volatile long downloadedBytes;
/**
* Constructs a Downloader.
*
* @param manifestUri The URI of the manifest to be downloaded.
* @param cache Cache instance to be used to store downloaded data.
* @param upstreamDataSource A {@link DataSource} for downloading data.
* @param cacheReadDataSource A {@link DataSource} for reading data from the cache.
* If null, a {@link FileDataSource} instance is created and used.
* @param cacheWriteDataSink A {@link DataSink} for writing data to the cache. If
* null, a {@link CacheDataSink} instance is created and used.
* @param priorityTaskManager If not null it's used to check whether it is allowed to proceed with
* download. Downloader priority is {@link C#PRIORITY_DOWNLOAD}.
*/
public Downloader(String manifestUri, Cache cache, DataSource upstreamDataSource,
@Nullable DataSource cacheReadDataSource, @Nullable DataSink cacheWriteDataSink,
@Nullable PriorityTaskManager priorityTaskManager) {
if (priorityTaskManager != null) {
upstreamDataSource =
new PriorityDataSource(upstreamDataSource, priorityTaskManager, C.PRIORITY_DOWNLOAD);
} else {
priorityTaskManager = new PriorityTaskManager(); // dummy PriorityTaskManager
}
if (cacheReadDataSource == null) {
cacheReadDataSource = new FileDataSource();
}
if (cacheWriteDataSink == null) {
cacheWriteDataSink = new CacheDataSink(cache,
CacheDataSource.DEFAULT_MAX_CACHE_FILE_SIZE);
}
this.manifestUri = manifestUri;
this.cache = cache;
this.dataSource = new CacheDataSource(cache, upstreamDataSource, cacheReadDataSource,
cacheWriteDataSink, CacheDataSource.FLAG_BLOCK_ON_CACHE, null);
this.offlineDataSource = new CacheDataSource(cache, DummyDataSource.INSTANCE,
cacheReadDataSource, null, CacheDataSource.FLAG_BLOCK_ON_CACHE, null);
this.priorityTaskManager = priorityTaskManager;
resetCounters();
}
/**
* Downloads the manifest.
*
* @return The downloaded manifest.
* @throws IOException If an error occurs reading data from the stream.
*/
public abstract M downloadManifest() throws IOException;
/**
* Selects multiple representations pointed to by the keys for downloading, removing or checking
* status. Any previous selection is cleared.
*/
public abstract void selectRepresentations(K... keys);
/**
* Initializes the total segments, downloaded segments and downloaded bytes counters for the
* selected representations.
*
* @throws IOException Thrown when there is an error while reading from cache.
* @throws DownloaderException Thrown when a representation index is unbounded.
* @throws InterruptedException If the thread has been interrupted.
* @see #getTotalSegments()
* @see #getDownloadedSegments()
* @see #getDownloadedBytes()
*/
public abstract void initStatus() throws DownloaderException, InterruptedException, IOException;
/**
* Downloads the content for the selected representations in sync or resumes a previously stopped
* download.
*
* @throws IOException Thrown when there is an error while downloading.
* @throws DownloaderException Thrown when no index data can be found for a representation or
* the index is unbounded.
* @throws InterruptedException If the thread has been interrupted.
*/
public abstract void downloadRepresentations(@Nullable ProgressListener listener)
throws IOException, DownloaderException, InterruptedException;
/**
* Returns the total number of segments in the representations which are selected, or {@link
* C#LENGTH_UNSET} if it hasn't been calculated yet.
*
* @see #initStatus()
*/
public final int getTotalSegments() {
return totalSegments;
}
/**
* Returns the total number of downloaded segments in the representations which are selected, or
* {@link C#LENGTH_UNSET} if it hasn't been calculated yet.
*
* @see #initStatus()
*/
public final int getDownloadedSegments() {
return downloadedSegments;
}
/**
* Returns the total number of downloaded bytes in the representations which are selected, or
* {@link C#LENGTH_UNSET} if it hasn't been calculated yet.
*
* @see #initStatus()
*/
public final long getDownloadedBytes() {
return downloadedBytes;
}
/**
* Removes all representations declared in the manifest and the manifest itself.
*
* @throws InterruptedException Thrown if the thread was interrupted.
*/
public abstract void removeAll() throws InterruptedException;
protected final void resetCounters() {
totalSegments = C.LENGTH_UNSET;
downloadedSegments = C.LENGTH_UNSET;
downloadedBytes = C.LENGTH_UNSET;
}
}

View File

@ -1,28 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source.offline;
import com.google.android.exoplayer2.util.ClosedSource;
/** Thrown on an error in {@link Downloader}. */
@ClosedSource(reason = "Not ready yet")
public final class DownloaderException extends Exception {
public DownloaderException(String message) {
super(message);
}
}

View File

@ -1,88 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source.offline;
import android.support.annotation.Nullable;
import com.google.android.exoplayer2.upstream.DataSink;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DataSource.Factory;
import com.google.android.exoplayer2.upstream.cache.Cache;
import com.google.android.exoplayer2.util.ClosedSource;
import com.google.android.exoplayer2.util.PriorityTaskManager;
/**
* A factory class that produces {@link Downloader}.
*/
@ClosedSource(reason = "Not ready yet")
public abstract class DownloaderFactory<T extends Downloader<?, ?>> {
private final Factory upstreamDataSourceFactory;
private final Factory cacheReadDataSourceFactory;
private final DataSink.Factory cacheWriteDataSinkFactory;
protected final Cache cache;
protected final PriorityTaskManager priorityTaskManager;
/**
* Constructs a DashDownloaderFactory.
*
* @param cache Cache instance to be used to store downloaded data.
* @param upstreamDataSourceFactory A {@link Factory} for downloading data.
*/
public DownloaderFactory(Cache cache, Factory upstreamDataSourceFactory) {
this(cache, upstreamDataSourceFactory, null, null, null);
}
/**
* Constructs a DashDownloaderFactory.
*
* @param cache Cache instance to be used to store downloaded data.
* @param upstreamDataSourceFactory A {@link Factory} for downloading data.
* @param cacheReadDataSourceFactory A {@link Factory} for reading data from the cache.
* If null, null is passed to {@link Downloader} constructor.
* @param cacheWriteDataSinkFactory A {@link DataSink.Factory} for writing data to the cache. If
* null, null is passed to {@link Downloader} constructor.
* @param priorityTaskManager If one is given then the download priority is set lower than
* loading. If null, null is passed to {@link Downloader} constructor.
*/
public DownloaderFactory(Cache cache, Factory upstreamDataSourceFactory,
@Nullable Factory cacheReadDataSourceFactory,
@Nullable DataSink.Factory cacheWriteDataSinkFactory,
@Nullable PriorityTaskManager priorityTaskManager) {
this.cache = cache;
this.upstreamDataSourceFactory = upstreamDataSourceFactory;
this.cacheReadDataSourceFactory = cacheReadDataSourceFactory;
this.cacheWriteDataSinkFactory = cacheWriteDataSinkFactory;
this.priorityTaskManager = priorityTaskManager;
}
/**
* Creates a {@link Downloader} with the given manifest.
*
* @param manifestUri The URI of the manifest of the DASH to be downloaded.
* @return A {@link Downloader}.
*/
public final T create(String manifestUri) {
return create(manifestUri,
upstreamDataSourceFactory != null ? upstreamDataSourceFactory.createDataSource() : null,
cacheReadDataSourceFactory != null ? cacheReadDataSourceFactory.createDataSource() : null,
cacheWriteDataSinkFactory != null ? cacheWriteDataSinkFactory.createDataSink() : null);
}
protected abstract T create(String manifestUri, DataSource upstreamDataSource,
DataSource cacheReadDataSource, DataSink cacheWriteDataSink);
}