require "active_support/inflector"
module OpenTok
# Represents an archive of an OpenTok session.
#
# @attr [int] created_at
# The time at which the archive was created, in milliseconds since the UNIX epoch.
#
# @attr [string] duration
# The duration of the archive, in milliseconds.
#
# @attr [string] id
# The archive ID.
#
# @attr [string] name
# The name of the archive. If no name was provided when the archive was created, this is set
# to null.
#
# @attr [true, false] has_audio
# Whether the archive has an audio track (true) or not (false).
#
# @attr [true, false] has_video
# Whether the archive has a video track (true) or not (false).
#
# @attr [String] output_mode
# Whether all streams in the archive are recorded to a single file (:composed
)
# or to individual files (:individual
).
#
# @attr [string] partner_id
# The API key associated with the archive.
#
# @attr [string] reason
# For archives with the status "stopped" or "failed", this string describes the
# reason the archive stopped (such as "maximum duration exceeded") or failed.
#
# @attr [string] session_id
# The session ID of the OpenTok session associated with this archive.
#
# @attr [float] size
# The size of the MP4 file. For archives that have not been generated, this value is set to 0.
#
# @attr [string] status
# The status of the archive, which can be one of the following:
#
# * "available" -- The archive is available for download from the OpenTok cloud.
# * "expired" -- The archive is no longer available for download from the OpenTok cloud.
# * "failed" -- The archive recording failed.
# * "paused" -- The archive is in progress and no clients are publishing streams to the
# session. When an archive is in progress and any client publishes a stream, the status is
# "started". When an archive is paused, nothing is recorded. When a client starts publishing
# a stream, the recording starts (or resumes). If all clients disconnect from a session that
# is being archived, the status changes to "paused", and after 60 seconds the archive
# recording stops (and the status changes to "stopped").
# * "started" -- The archive started and is in the process of being recorded.
# * "stopped" -- The archive stopped recording.
# * "uploaded" -- The archive is available for download from the the upload target
# Amazon S3 bucket or Windows Azure container you set at the OpenTok dashboard
# (https://dashboard.tokbox.com).
#
# @attr [string] url
# The download URL of the available MP4 file. This is only set for an archive with the status set to
# "available"; for other archives, (including archives with the status "uploaded") this property is
# set to null. The download URL is obfuscated, and the file is only available from the URL for
# 10 minutes. To generate a new URL, call the Archive.listArchives() or OpenTok.getArchive() method.
class Archive
# @private
def initialize(interface, json)
@interface = interface
# TODO: validate json fits schema
@json = json
end
# A JSON encoded string representation of the archive
def to_json
@json.to_json
end
# Stops an OpenTok archive that is being recorded.
#
# Archives automatically stop recording after 90 minutes or when all clients have disconnected
# from the session being archived.
def stop
# TODO: validate returned json fits schema
@json = @interface.stop_by_id @json['id']
end
# Deletes an OpenTok archive.
#
# You can only delete an archive which has a status of "available" or "uploaded". Deleting an
# archive removes its record from the list of archives. For an "available" archive, it also
# removes the archive file, making it unavailable for download.
def delete
# TODO: validate returned json fits schema
@json = @interface.delete_by_id @json['id']
end
# @private ignore
def method_missing(method, *args, &block)
camelized_method = method.to_s.camelize(:lower)
if @json.has_key? camelized_method and args.empty?
# TODO: convert create_time method call to a Time object
if camelized_method == 'outputMode'
@json[camelized_method].to_sym
else
@json[camelized_method]
end
else
super method, *args, &block
end
end
end
end