Package com.castlabs.android.downloader

# Class ContainerUtils

java.lang.Object
com.castlabs.android.downloader.ContainerUtils

public class ContainerUtils extends Object
Helper class that provides utilities to handle zip containers that contain DASH content. The zip always needs to contain a file named `meta.json`. That file is a json file that must at least have an entry `"manifest"` that points to the Manifest of the content within the zip file

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ContainerUtils()`
  Default constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static Uri`
  `getManifestUrl(File zipFile)`
  Reads the zip files `meta.json` file and returns a `Uri` to that Manifest.
  `static Uri`
  `getManifestUrl(File zipFile, JSONObject metadata)`
  Takes the zip files `meta.json` content and returns a `Uri` to that Manifest.
  `static JSONObject`
  `readMetaData(File zipSource)`
  Take a zip file and looks for a "meta.json" entry.
  `static Pair<String,String>`
  `splitEntryPath(Uri uri)`
  Takes a zip file URI of the form `zip:/path/to/file.zip/entry/path.txt` and returns a pair where the first element is the path to the zip file and the second entry is the path to the entry.

  ### Methods inherited from class java.lang.Object

  `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### ContainerUtils

    public ContainerUtils()
    Default constructor.

- ## Method Details

  - ### readMetaData

    @Nullable public static JSONObject readMetaData(@NonNull File zipSource) throws IOException, JSONException
    Take a zip file and looks for a "meta.json" entry.
    Parameters:
      `zipSource` - The zip file to read from.
    Returns:
      The parsed entry or null if no such entry exists
    Throws:
      `IOException` - In case an error occurs while reading the entry
      `JSONException` - In case an error occurs while parsing the entry

  - ### getManifestUrl

    public static Uri getManifestUrl(@NonNull File zipFile) throws IOException, JSONException
    Reads the zip files `meta.json` file and returns a `Uri` to that Manifest. The uri constructed here can be passed to the `PlayerController` to open the content in the zip.
    Parameters:
      `zipFile` - The zip file
    Returns:
      The Uri to the Manifest in the ZIP
    Throws:
      `IOException` - In case an error occurred while reading data or no meta-data was found or the meta entries are not valid
      `JSONException` - In case an error occurred while parsing the meta-data

  - ### getManifestUrl

    public static Uri getManifestUrl(@NonNull File zipFile, @NonNull JSONObject metadata) throws IOException, JSONException
    Takes the zip files `meta.json` content and returns a `Uri` to that Manifest. The uri constructed here can be passed to the `PlayerController` to open the content in the zip.
    Parameters:
      `zipFile` - The zip file
      `metadata` - The ZIP meta-data
    Returns:
      The Uri to the Manifest in the ZIP
    Throws:
      `IOException` - In case an error occurred while reading data or no meta-data was found or the meta entries are not valid
      `JSONException` - In case an error occurred while parsing the meta-data

  - ### splitEntryPath

    public static Pair<String,String> splitEntryPath(Uri uri)
    Takes a zip file URI of the form `zip:/path/to/file.zip/entry/path.txt` and returns a pair where the first element is the path to the zip file and the second entry is the path to the entry. In the example above, this method returns `/path/to/file.zip, entry/path.txt`.

    The method returns null if no zip file could be found. The method checks for the existence of the zip file but not the existence of the entry within the zip.
    Parameters:
      `uri` - The URI to split.
    Returns:
      Pair of zip and entry path or null