// --------------------------------------------------------------------------------------------------------------------
//
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
//
//
// An object that represents a subtitle associated with a Title, in a DVD
//
// --------------------------------------------------------------------------------------------------------------------
namespace HandBrake.ApplicationServices.Parsing
{
using System;
using System.Xml.Serialization;
using HandBrake.ApplicationServices.Model.Encoding;
using HandBrake.ApplicationServices.Utilities;
///
/// An object that represents a subtitle associated with a Title, in a DVD
///
public class Subtitle
{
///
/// Initializes a new instance of the class.
///
public Subtitle()
{
}
///
/// Initializes a new instance of the class.
///
///
/// The source Id.
///
///
/// The track number.
///
///
/// The language.
///
///
/// The language code.
///
///
/// The subtitle type.
///
///
/// The can Burn.
///
///
/// The can Force.
///
public Subtitle(int sourceId, int trackNumber, string language, string languageCode, SubtitleType subtitleType, bool canBurn, bool canForce)
{
this.SourceId = sourceId;
this.TrackNumber = trackNumber;
this.Language = language;
this.LanguageCode = languageCode;
this.SubtitleType = subtitleType;
this.CanBurnIn = canBurn;
this.CanForce = canForce;
}
///
/// Gets or sets the source id.
///
public int SourceId { get; set; }
///
/// Gets or sets the track number of this Subtitle
///
public int TrackNumber { get; set; }
///
/// Gets or sets the The language (if detected) of this Subtitle
///
public string Language { get; set; }
///
/// Gets or sets the Langauage Code
///
public string LanguageCode { get; set; }
///
/// Gets the language code clean.
/// TODO Remove this after fixing language code.
///
public string LanguageCodeClean
{
get
{
if (this.LanguageCode != null)
{
return this.LanguageCode.Replace("iso639-2: ", string.Empty).Trim();
}
return string.Empty;
}
}
///
/// Gets a value indicating whether can burn in.
///
[XmlIgnore]
public bool CanBurnIn { get; private set; }
///
/// Gets a value indicating whether can force.
///
[XmlIgnore]
public bool CanForce { get; private set; }
///
/// Gets or sets the Subtitle Type
///
public SubtitleType SubtitleType { get; set; }
///
/// Gets Subtitle Type
///
public string TypeString
{
get
{
return EnumHelper.GetDescription(this.SubtitleType);
}
}
///
/// Override of the ToString method to make this object easier to use in the UI
///
/// A string formatted as: {track #} {language}
public override string ToString()
{
return this.SubtitleType == SubtitleType.ForeignAudioSearch ? "Foreign Audio Scan" : string.Format("{0} {1} ({2})", this.TrackNumber, this.Language, this.TypeString);
}
///
/// The equals.
///
///
/// The other.
///
///
/// The System.Boolean.
///
public bool Equals(Subtitle other)
{
if (ReferenceEquals(null, other))
{
return false;
}
if (ReferenceEquals(this, other))
{
return true;
}
return other.TrackNumber == this.TrackNumber && object.Equals(other.Language, this.Language) && object.Equals(other.LanguageCode, this.LanguageCode) && object.Equals(other.SubtitleType, this.SubtitleType);
}
///
/// Determines whether the specified is equal to the current .
///
///
/// true if the specified is equal to the current ; otherwise, false.
///
/// The to compare with the current . 2
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != typeof(Subtitle))
{
return false;
}
return Equals((Subtitle)obj);
}
///
/// Serves as a hash function for a particular type.
///
///
/// A hash code for the current .
///
/// 2
public override int GetHashCode()
{
unchecked
{
int result = this.TrackNumber;
result = (result * 397) ^ (this.Language != null ? this.Language.GetHashCode() : 0);
result = (result * 397) ^ (this.LanguageCode != null ? this.LanguageCode.GetHashCode() : 0);
result = (result * 397) ^ this.SubtitleType.GetHashCode();
return result;
}
}
}
}