// Decompiled with JetBrains decompiler // Type: SEGATools.DiscFileSystem.DiscSession // Assembly: SEGATools, Version=1.0.3.0, Culture=neutral, PublicKeyToken=611be24fdeb07e08 // MVID: D631183F-57B1-40A1-B502-5364D288307A // Assembly location: SEGATools.dll using ImageReader.ISO9660.DirectoryRecords; using ImageReader.ISO9660.VolumeDescriptors; using SEGATools.Security; using System; using System.Collections.Generic; using System.Linq; namespace SEGATools.DiscFileSystem { internal sealed class DiscSession : IDiscSession { public static readonly string DEFAULT_SESSION_NAME_WITH_FORMAT = "Session {0}"; private readonly string name; private int index; private InitialProgram ip; private IDiscFileSystem disc; private DirectoryRecord mainBinary; private PrimaryVolumeDescriptor primaryVolumeDescriptor; private DirectoryRecord rootDirectoryRecord; private List tracks; public List Tracks => this.tracks.ToList(); public List DataTracks => this.tracks.FindAll((Predicate) (track => track.TrackData == TrackModeType.Data)); public IDiscTrack FirstDataTrack { get { List all = this.tracks.FindAll((Predicate) (track => track.TrackData == TrackModeType.Data)); return all.Count <= 0 ? (IDiscTrack) null : all.OrderBy((Func) (track => track.Index)).First(); } } public IDiscTrack LastDataTrack { get { List all = this.tracks.FindAll((Predicate) (track => track.TrackData == TrackModeType.Data)); return all.Count <= 0 ? (IDiscTrack) null : all.OrderBy((Func) (track => track.Index)).Last(); } } public List AudioTracks => this.tracks.FindAll((Predicate) (track => track.TrackData == TrackModeType.Audio)); public int Index => this.index; public string Name => this.name; public DirectoryRecord MainBinary { get => this.mainBinary; set => this.mainBinary = value; } public DirectoryRecord RootDirectoryRecord { get => this.rootDirectoryRecord; set => this.rootDirectoryRecord = value; } public InitialProgram BootStrap { get => this.ip; set => this.ip = value; } public PrimaryVolumeDescriptor PrimaryVolumeDescriptor { get => this.primaryVolumeDescriptor; set => this.primaryVolumeDescriptor = value; } public IDiscFileSystem Disc { get => this.disc; set => this.disc = value; } public DiscSession(int index, string name, List tracks) { this.index = index; this.name = name; this.tracks = tracks.OrderBy((Func) (track => track.LogicalBlockAddress)).ToList(); this.tracks.ForEach((Action) (track => track.Session = (IDiscSession) this)); } public void Close() { this.ip = (InitialProgram) null; this.mainBinary = (DirectoryRecord) null; this.rootDirectoryRecord = (DirectoryRecord) null; this.primaryVolumeDescriptor = (PrimaryVolumeDescriptor) null; if (this.tracks != null) { foreach (IDiscTrack track in this.tracks) track.Close(); this.tracks.Clear(); this.tracks = (List) null; } this.disc = (IDiscFileSystem) null; } } }