public ImageInfoViewModel(string imagePath, IFilter filter, IMediaImage imageFormat, Window view) { _imagePath = imagePath; _filter = filter; _imageFormat = imageFormat; _view = view; IAssetLoader assets = AvaloniaLocator.Current.GetService <IAssetLoader>(); MediaTagsList = new ObservableCollection <string>(); SectorTagsList = new ObservableCollection <string>(); Sessions = new ObservableCollection <Session>(); Tracks = new ObservableCollection <Track>(); DumpHardwareList = new ObservableCollection <DumpHardwareModel>(); EntropyCommand = ReactiveCommand.Create(ExecuteEntropyCommand); VerifyCommand = ReactiveCommand.Create(ExecuteVerifyCommand); ChecksumCommand = ReactiveCommand.Create(ExecuteChecksumCommand); ConvertCommand = ReactiveCommand.Create(ExecuteConvertCommand); CreateSidecarCommand = ReactiveCommand.Create(ExecuteCreateSidecarCommand); ViewSectorsCommand = ReactiveCommand.Create(ExecuteViewSectorsCommand); DecodeMediaTagCommand = ReactiveCommand.Create(ExecuteDecodeMediaTagCommand); var genericHddIcon = new Bitmap(assets.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/drive-harddisk.png"))); var genericOpticalIcon = new Bitmap(assets.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/drive-optical.png"))); var genericFolderIcon = new Bitmap(assets.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/inode-directory.png"))); var mediaResource = new Uri($"avares://Aaru.Gui/Assets/Logos/Media/{imageFormat.Info.MediaType}.png"); MediaLogo = assets.Exists(mediaResource) ? new Bitmap(assets.Open(mediaResource)) : imageFormat.Info.XmlMediaType == XmlMediaType.BlockMedia ? genericHddIcon : imageFormat.Info.XmlMediaType == XmlMediaType.OpticalDisc ? genericOpticalIcon : genericFolderIcon; ImagePathText = $"Path: {imagePath}"; FilterText = $"Filter: {filter.Name}"; ImageIdentifiedText = $"Image format identified by {imageFormat.Name} ({imageFormat.Id})."; ImageFormatText = !string.IsNullOrWhiteSpace(imageFormat.Info.Version) ? $"Format: {imageFormat.Format} version {imageFormat.Info.Version}" : $"Format: {imageFormat.Format}"; ImageSizeText = $"Image without headers is {imageFormat.Info.ImageSize} bytes long"; SectorsText = $"Contains a media of {imageFormat.Info.Sectors} sectors with a maximum sector size of {imageFormat.Info.SectorSize} bytes (if all sectors are of the same size this would be {imageFormat.Info.Sectors * imageFormat.Info.SectorSize} bytes)"; MediaTypeText = $"Contains a media of type {imageFormat.Info.MediaType} and XML type {imageFormat.Info.XmlMediaType}"; HasPartitionsText = $"{(imageFormat.Info.HasPartitions ? "Has" : "Doesn't have")} partitions"; HasSessionsText = $"{(imageFormat.Info.HasSessions ? "Has" : "Doesn't have")} sessions"; if (!string.IsNullOrWhiteSpace(imageFormat.Info.Application)) { ApplicationText = !string.IsNullOrWhiteSpace(imageFormat.Info.ApplicationVersion) ? $"Was created with {imageFormat.Info.Application} version {imageFormat.Info.ApplicationVersion}" : $"Was created with {imageFormat.Info.Application}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.Creator)) { CreatorText = $"Created by: {imageFormat.Info.Creator}"; } if (imageFormat.Info.CreationTime != DateTime.MinValue) { CreationTimeText = $"Created on {imageFormat.Info.CreationTime}"; } if (imageFormat.Info.LastModificationTime != DateTime.MinValue) { LastModificationTimeText = $"Last modified on {imageFormat.Info.LastModificationTime}"; } if (imageFormat.Info.MediaSequence != 0 && imageFormat.Info.LastMediaSequence != 0) { MediaSequenceText = $"Media is number {imageFormat.Info.MediaSequence} on a set of {imageFormat.Info.LastMediaSequence} medias"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.MediaTitle)) { MediaTitleText = $"Media title: {imageFormat.Info.MediaTitle}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.MediaManufacturer)) { MediaManufacturerText = $"Media manufacturer: {imageFormat.Info.MediaManufacturer}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.MediaModel)) { MediaModelText = $"Media model: {imageFormat.Info.MediaModel}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.MediaSerialNumber)) { MediaSerialNumberText = $"Media serial number: {imageFormat.Info.MediaSerialNumber}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.MediaBarcode)) { MediaBarcodeText = $"Media barcode: {imageFormat.Info.MediaBarcode}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.MediaPartNumber)) { MediaPartNumberText = $"Media part number: {imageFormat.Info.MediaPartNumber}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.DriveManufacturer)) { DriveManufacturerText = $"Drive manufacturer: {imageFormat.Info.DriveManufacturer}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.DriveModel)) { DriveModelText = $"Drive model: {imageFormat.Info.DriveModel}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.DriveSerialNumber)) { DriveSerialNumberText = $"Drive serial number: {imageFormat.Info.DriveSerialNumber}"; } if (!string.IsNullOrWhiteSpace(imageFormat.Info.DriveFirmwareRevision)) { DriveFirmwareRevisionText = $"Drive firmware info: {imageFormat.Info.DriveFirmwareRevision}"; } if (imageFormat.Info.Cylinders > 0 && imageFormat.Info.Heads > 0 && imageFormat.Info.SectorsPerTrack > 0 && imageFormat.Info.XmlMediaType != XmlMediaType.OpticalDisc && (!(imageFormat is ITapeImage tapeImage) || !tapeImage.IsTape)) { MediaGeometryText = $"Media geometry: {imageFormat.Info.Cylinders} cylinders, {imageFormat.Info.Heads} heads, {imageFormat.Info.SectorsPerTrack} sectors per track"; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Count > 0) { foreach (MediaTagType tag in imageFormat.Info.ReadableMediaTags.OrderBy(t => t)) { MediaTagsList.Add(tag.ToString()); } } if (imageFormat.Info.ReadableSectorTags != null && imageFormat.Info.ReadableSectorTags.Count > 0) { foreach (SectorTagType tag in imageFormat.Info.ReadableSectorTags.OrderBy(t => t)) { SectorTagsList.Add(tag.ToString()); } } PeripheralDeviceTypes scsiDeviceType = PeripheralDeviceTypes.DirectAccess; byte[] scsiInquiryData = null; Inquiry?scsiInquiry = null; Modes.DecodedMode?scsiMode = null; byte[] scsiModeSense6 = null; byte[] scsiModeSense10 = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SCSI_INQUIRY)) { scsiInquiryData = imageFormat.ReadDiskTag(MediaTagType.SCSI_INQUIRY); scsiDeviceType = (PeripheralDeviceTypes)(scsiInquiryData[0] & 0x1F); scsiInquiry = Inquiry.Decode(scsiInquiryData); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SCSI_MODESENSE_6)) { scsiModeSense6 = imageFormat.ReadDiskTag(MediaTagType.SCSI_MODESENSE_6); scsiMode = Modes.DecodeMode6(scsiModeSense6, scsiDeviceType); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SCSI_MODESENSE_10)) { scsiModeSense10 = imageFormat.ReadDiskTag(MediaTagType.SCSI_MODESENSE_10); scsiMode = Modes.DecodeMode10(scsiModeSense10, scsiDeviceType); } ScsiInfo = new ScsiInfo { DataContext = new ScsiInfoViewModel(scsiInquiryData, scsiInquiry, null, scsiMode, scsiDeviceType, scsiModeSense6, scsiModeSense10, null, _view) }; byte[] ataIdentify = null; byte[] atapiIdentify = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.ATA_IDENTIFY)) { ataIdentify = imageFormat.ReadDiskTag(MediaTagType.ATA_IDENTIFY); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.ATAPI_IDENTIFY)) { atapiIdentify = imageFormat.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY); } AtaInfo = new AtaInfo { DataContext = new AtaInfoViewModel(ataIdentify, atapiIdentify, null, _view) }; byte[] toc = null; TOC.CDTOC? decodedToc = null; byte[] fullToc = null; FullTOC.CDFullTOC? decodedFullToc = null; byte[] pma = null; byte[] atip = null; ATIP.CDATIP? decodedAtip = null; byte[] cdtext = null; CDTextOnLeadIn.CDText?decodedCdText = null; string mediaCatalogueNumber = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_TOC)) { toc = imageFormat.ReadDiskTag(MediaTagType.CD_TOC); if (toc.Length > 0) { ushort dataLen = Swapping.Swap(BitConverter.ToUInt16(toc, 0)); if (dataLen + 2 != toc.Length) { byte[] tmp = new byte[toc.Length + 2]; Array.Copy(toc, 0, tmp, 2, toc.Length); tmp[0] = (byte)((toc.Length & 0xFF00) >> 8); tmp[1] = (byte)(toc.Length & 0xFF); toc = tmp; } decodedToc = TOC.Decode(toc); } } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_FullTOC)) { fullToc = imageFormat.ReadDiskTag(MediaTagType.CD_FullTOC); if (fullToc.Length > 0) { ushort dataLen = Swapping.Swap(BitConverter.ToUInt16(fullToc, 0)); if (dataLen + 2 != fullToc.Length) { byte[] tmp = new byte[fullToc.Length + 2]; Array.Copy(fullToc, 0, tmp, 2, fullToc.Length); tmp[0] = (byte)((fullToc.Length & 0xFF00) >> 8); tmp[1] = (byte)(fullToc.Length & 0xFF); fullToc = tmp; } decodedFullToc = FullTOC.Decode(fullToc); } } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_PMA)) { pma = imageFormat.ReadDiskTag(MediaTagType.CD_PMA); if (pma.Length > 0) { ushort dataLen = Swapping.Swap(BitConverter.ToUInt16(pma, 0)); if (dataLen + 2 != pma.Length) { byte[] tmp = new byte[pma.Length + 2]; Array.Copy(pma, 0, tmp, 2, pma.Length); tmp[0] = (byte)((pma.Length & 0xFF00) >> 8); tmp[1] = (byte)(pma.Length & 0xFF); pma = tmp; } } } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_ATIP)) { atip = imageFormat.ReadDiskTag(MediaTagType.CD_ATIP); uint dataLen = Swapping.Swap(BitConverter.ToUInt32(atip, 0)); if (dataLen + 4 != atip.Length) { byte[] tmp = new byte[atip.Length + 4]; Array.Copy(atip, 0, tmp, 4, atip.Length); tmp[0] = (byte)((atip.Length & 0xFF000000) >> 24); tmp[1] = (byte)((atip.Length & 0xFF0000) >> 16); tmp[2] = (byte)((atip.Length & 0xFF00) >> 8); tmp[3] = (byte)(atip.Length & 0xFF); atip = tmp; } decodedAtip = ATIP.Decode(atip); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_TEXT)) { cdtext = imageFormat.ReadDiskTag(MediaTagType.CD_TEXT); uint dataLen = Swapping.Swap(BitConverter.ToUInt32(cdtext, 0)); if (dataLen + 4 != cdtext.Length) { byte[] tmp = new byte[cdtext.Length + 4]; Array.Copy(cdtext, 0, tmp, 4, cdtext.Length); tmp[0] = (byte)((cdtext.Length & 0xFF000000) >> 24); tmp[1] = (byte)((cdtext.Length & 0xFF0000) >> 16); tmp[2] = (byte)((cdtext.Length & 0xFF00) >> 8); tmp[3] = (byte)(cdtext.Length & 0xFF); cdtext = tmp; } decodedCdText = CDTextOnLeadIn.Decode(cdtext); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_MCN)) { byte[] mcn = imageFormat.ReadDiskTag(MediaTagType.CD_MCN); mediaCatalogueNumber = Encoding.UTF8.GetString(mcn); } CompactDiscInfo = new CompactDiscInfo { DataContext = new CompactDiscInfoViewModel(toc, atip, null, null, fullToc, pma, cdtext, decodedToc, decodedAtip, null, decodedFullToc, decodedCdText, null, mediaCatalogueNumber, null, _view) }; byte[] dvdPfi = null; byte[] dvdDmi = null; byte[] dvdCmi = null; byte[] hddvdCopyrightInformation = null; byte[] dvdBca = null; PFI.PhysicalFormatInformation?decodedPfi = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_PFI)) { dvdPfi = imageFormat.ReadDiskTag(MediaTagType.DVD_PFI); decodedPfi = PFI.Decode(dvdPfi); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_DMI)) { dvdDmi = imageFormat.ReadDiskTag(MediaTagType.DVD_DMI); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_CMI)) { dvdCmi = imageFormat.ReadDiskTag(MediaTagType.DVD_CMI); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.HDDVD_CPI)) { hddvdCopyrightInformation = imageFormat.ReadDiskTag(MediaTagType.HDDVD_CPI); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_BCA)) { dvdBca = imageFormat.ReadDiskTag(MediaTagType.DVD_BCA); } DvdInfo = new DvdInfo { DataContext = new DvdInfoViewModel(imageFormat.Info.MediaType, dvdPfi, dvdDmi, dvdCmi, hddvdCopyrightInformation, dvdBca, null, decodedPfi, _view) }; byte[] dvdRamDds = null; byte[] dvdRamCartridgeStatus = null; byte[] dvdRamSpareArea = null; byte[] lastBorderOutRmd = null; byte[] dvdPreRecordedInfo = null; byte[] dvdrMediaIdentifier = null; byte[] dvdrPhysicalInformation = null; byte[] hddvdrMediumStatus = null; byte[] dvdrLayerCapacity = null; byte[] dvdrDlMiddleZoneStart = null; byte[] dvdrDlJumpIntervalSize = null; byte[] dvdrDlManualLayerJumpStartLba = null; byte[] dvdPlusAdip = null; byte[] dvdPlusDcb = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_DDS)) { dvdRamDds = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_DDS); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_MediumStatus)) { dvdRamCartridgeStatus = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_MediumStatus); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_SpareArea)) { dvdRamSpareArea = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_SpareArea); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_RMD)) { lastBorderOutRmd = imageFormat.ReadDiskTag(MediaTagType.DVDR_RMD); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_PreRecordedInfo)) { dvdPreRecordedInfo = imageFormat.ReadDiskTag(MediaTagType.DVDR_PreRecordedInfo); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_MediaIdentifier)) { dvdrMediaIdentifier = imageFormat.ReadDiskTag(MediaTagType.DVDR_MediaIdentifier); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_PFI)) { dvdrPhysicalInformation = imageFormat.ReadDiskTag(MediaTagType.DVDR_PFI); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.HDDVD_MediumStatus)) { hddvdrMediumStatus = imageFormat.ReadDiskTag(MediaTagType.HDDVD_MediumStatus); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_LayerCapacity)) { dvdrLayerCapacity = imageFormat.ReadDiskTag(MediaTagType.DVDDL_LayerCapacity); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_MiddleZoneAddress)) { dvdrDlMiddleZoneStart = imageFormat.ReadDiskTag(MediaTagType.DVDDL_MiddleZoneAddress); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_JumpIntervalSize)) { dvdrDlJumpIntervalSize = imageFormat.ReadDiskTag(MediaTagType.DVDDL_JumpIntervalSize); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_ManualLayerJumpLBA)) { dvdrDlManualLayerJumpStartLba = imageFormat.ReadDiskTag(MediaTagType.DVDDL_ManualLayerJumpLBA); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_ADIP)) { dvdPlusAdip = imageFormat.ReadDiskTag(MediaTagType.DVD_ADIP); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DCB)) { dvdPlusDcb = imageFormat.ReadDiskTag(MediaTagType.DCB); } DvdWritableInfo = new DvdWritableInfo { DataContext = new DvdWritableInfoViewModel(imageFormat.Info.MediaType, dvdRamDds, dvdRamCartridgeStatus, dvdRamSpareArea, lastBorderOutRmd, dvdPreRecordedInfo, dvdrMediaIdentifier, dvdrPhysicalInformation, hddvdrMediumStatus, null, dvdrLayerCapacity, dvdrDlMiddleZoneStart, dvdrDlJumpIntervalSize, dvdrDlManualLayerJumpStartLba, null, dvdPlusAdip, dvdPlusDcb, _view) }; byte[] blurayBurstCuttingArea = null; byte[] blurayCartridgeStatus = null; byte[] blurayDds = null; byte[] blurayDiscInformation = null; byte[] blurayPowResources = null; byte[] bluraySpareAreaInformation = null; byte[] blurayTrackResources = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_BCA)) { blurayBurstCuttingArea = imageFormat.ReadDiskTag(MediaTagType.BD_BCA); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_CartridgeStatus)) { blurayCartridgeStatus = imageFormat.ReadDiskTag(MediaTagType.BD_CartridgeStatus); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_DDS)) { blurayDds = imageFormat.ReadDiskTag(MediaTagType.BD_DDS); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_DI)) { blurayDiscInformation = imageFormat.ReadDiskTag(MediaTagType.BD_DI); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_POWResourcesInformation)) { blurayPowResources = imageFormat.ReadDiskTag(MediaTagType.MMC_POWResourcesInformation); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_SpareArea)) { bluraySpareAreaInformation = imageFormat.ReadDiskTag(MediaTagType.BD_SpareArea); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_TrackResourcesInformation)) { bluraySpareAreaInformation = imageFormat.ReadDiskTag(MediaTagType.MMC_TrackResourcesInformation); } BlurayInfo = new BlurayInfo { DataContext = new BlurayInfoViewModel(blurayDiscInformation, blurayBurstCuttingArea, blurayDds, blurayCartridgeStatus, bluraySpareAreaInformation, blurayPowResources, blurayTrackResources, null, null, _view) }; byte[] xboxDmi = null; byte[] xboxSecuritySector = null; SS.SecuritySector?decodedXboxSecuritySector = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.Xbox_DMI)) { xboxDmi = imageFormat.ReadDiskTag(MediaTagType.Xbox_DMI); } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.Xbox_SecuritySector)) { xboxSecuritySector = imageFormat.ReadDiskTag(MediaTagType.Xbox_SecuritySector); decodedXboxSecuritySector = SS.Decode(xboxSecuritySector); } XboxInfo = new XboxInfo { DataContext = new XboxInfoViewModel(null, xboxDmi, xboxSecuritySector, decodedXboxSecuritySector, _view) }; byte[] pcmciaCis = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.PCMCIA_CIS)) { pcmciaCis = imageFormat.ReadDiskTag(MediaTagType.PCMCIA_CIS); } PcmciaInfo = new PcmciaInfo { DataContext = new PcmciaInfoViewModel(pcmciaCis, _view) }; DeviceType deviceType = DeviceType.Unknown; byte[] cid = null; byte[] csd = null; byte[] ocr = null; byte[] extendedCsd = null; byte[] scr = null; if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_CID)) { cid = imageFormat.ReadDiskTag(MediaTagType.SD_CID); deviceType = DeviceType.SecureDigital; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_CSD)) { csd = imageFormat.ReadDiskTag(MediaTagType.SD_CSD); deviceType = DeviceType.SecureDigital; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_OCR)) { ocr = imageFormat.ReadDiskTag(MediaTagType.SD_OCR); deviceType = DeviceType.SecureDigital; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_SCR)) { scr = imageFormat.ReadDiskTag(MediaTagType.SD_SCR); deviceType = DeviceType.SecureDigital; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_CID)) { cid = imageFormat.ReadDiskTag(MediaTagType.MMC_CID); deviceType = DeviceType.MMC; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_CSD)) { csd = imageFormat.ReadDiskTag(MediaTagType.MMC_CSD); deviceType = DeviceType.MMC; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_OCR)) { ocr = imageFormat.ReadDiskTag(MediaTagType.MMC_OCR); deviceType = DeviceType.MMC; } if (imageFormat.Info.ReadableMediaTags != null && imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_ExtendedCSD)) { extendedCsd = imageFormat.ReadDiskTag(MediaTagType.MMC_ExtendedCSD); deviceType = DeviceType.MMC; } SdMmcInfo = new SdMmcInfo { DataContext = new SdMmcInfoViewModel(deviceType, cid, csd, ocr, extendedCsd, scr) }; if (imageFormat is IOpticalMediaImage opticalMediaImage) { try { if (opticalMediaImage.Sessions != null && opticalMediaImage.Sessions.Count > 0) { foreach (Session session in opticalMediaImage.Sessions) { Sessions.Add(session); } } } catch { // ignored } try { if (opticalMediaImage.Tracks != null && opticalMediaImage.Tracks.Count > 0) { foreach (Track track in opticalMediaImage.Tracks) { Tracks.Add(track); } } } catch { // ignored } } if (imageFormat.DumpHardware is null) { return; } foreach (DumpHardwareType dump in imageFormat.DumpHardware) { foreach (ExtentType extent in dump.Extents) { DumpHardwareList.Add(new DumpHardwareModel { Manufacturer = dump.Manufacturer, Model = dump.Model, Serial = dump.Serial, SoftwareName = dump.Software.Name, SoftwareVersion = dump.Software.Version, OperatingSystem = dump.Software.OperatingSystem, Start = extent.Start, End = extent.End }); } } }
public MediaInfoViewModel(ScsiInfo scsiInfo, string devicePath, Window view) { _view = view; SaveReadMediaSerialCommand = ReactiveCommand.Create(ExecuteSaveReadMediaSerialCommand); SaveReadCapacityCommand = ReactiveCommand.Create(ExecuteSaveReadCapacityCommand); SaveReadCapacity16Command = ReactiveCommand.Create(ExecuteSaveReadCapacity16Command); SaveGetConfigurationCommand = ReactiveCommand.Create(ExecuteSaveGetConfigurationCommand); SaveRecognizedFormatLayersCommand = ReactiveCommand.Create(ExecuteSaveRecognizedFormatLayersCommand); SaveWriteProtectionStatusCommand = ReactiveCommand.Create(ExecuteSaveWriteProtectionStatusCommand); SaveDensitySupportCommand = ReactiveCommand.Create(ExecuteSaveDensitySupportCommand); SaveMediumSupportCommand = ReactiveCommand.Create(ExecuteSaveMediumSupportCommand); DumpCommand = ReactiveCommand.Create(ExecuteDumpCommand); ScanCommand = ReactiveCommand.Create(ExecuteScanCommand); IAssetLoader assets = AvaloniaLocator.Current.GetService <IAssetLoader>(); _devicePath = devicePath; _scsiInfo = scsiInfo; var mediaResource = new Uri($"avares://Aaru.Gui/Assets/Logos/Media/{scsiInfo.MediaType}.png"); MediaLogo = assets.Exists(mediaResource) ? new Bitmap(assets.Open(mediaResource)) : null; MediaType = scsiInfo.MediaType.ToString(); if (scsiInfo.Blocks != 0 && scsiInfo.BlockSize != 0) { MediaSize = $"Media has {scsiInfo.Blocks} blocks of {scsiInfo.BlockSize} bytes/each. (for a total of {scsiInfo.Blocks * scsiInfo.BlockSize} bytes)"; } if (scsiInfo.MediaSerialNumber != null) { var sbSerial = new StringBuilder(); for (int i = 4; i < scsiInfo.MediaSerialNumber.Length; i++) { sbSerial.AppendFormat("{0:X2}", scsiInfo.MediaSerialNumber[i]); } MediaSerial = sbSerial.ToString(); } SaveReadMediaSerialVisible = scsiInfo.MediaSerialNumber != null; SaveReadCapacityVisible = scsiInfo.ReadCapacity != null; SaveReadCapacity16Visible = scsiInfo.ReadCapacity16 != null; SaveGetConfigurationVisible = scsiInfo.MmcConfiguration != null; SaveRecognizedFormatLayersVisible = scsiInfo.RecognizedFormatLayers != null; SaveWriteProtectionStatusVisible = scsiInfo.WriteProtectionStatus != null; MmcVisible = SaveGetConfigurationVisible || SaveRecognizedFormatLayersVisible || SaveWriteProtectionStatusVisible; if (scsiInfo.DensitySupportHeader.HasValue) { DensitySupport = Decoders.SCSI.SSC.DensitySupport.PrettifyDensity(scsiInfo.DensitySupportHeader); } if (scsiInfo.MediaTypeSupportHeader.HasValue) { MediumSupport = Decoders.SCSI.SSC.DensitySupport.PrettifyMediumType(scsiInfo.MediaTypeSupportHeader); } SaveDensitySupportVisible = scsiInfo.DensitySupport != null; SaveMediumSupportVisible = scsiInfo.MediaTypeSupport != null; SscVisible = SaveDensitySupportVisible || SaveMediumSupportVisible; CompactDiscInfo = new CompactDiscInfo { DataContext = new CompactDiscInfoViewModel(scsiInfo.Toc, scsiInfo.Atip, scsiInfo.DiscInformation, scsiInfo.Session, scsiInfo.RawToc, scsiInfo.Pma, scsiInfo.CdTextLeadIn, scsiInfo.DecodedToc, scsiInfo.DecodedAtip, scsiInfo.DecodedSession, scsiInfo.FullToc, scsiInfo.DecodedCdTextLeadIn, scsiInfo.DecodedDiscInformation, scsiInfo.Mcn, scsiInfo.Isrcs, _view) }; DvdInfo = new DvdInfo { DataContext = new DvdInfoViewModel(scsiInfo.MediaType, scsiInfo.DvdPfi, scsiInfo.DvdDmi, scsiInfo.DvdCmi, scsiInfo.HddvdCopyrightInformation, scsiInfo.DvdBca, scsiInfo.DvdAacs, scsiInfo.DecodedPfi, _view) }; XboxInfo = new XboxInfo { DataContext = new XboxInfoViewModel(scsiInfo.XgdInfo, scsiInfo.DvdDmi, scsiInfo.XboxSecuritySector, scsiInfo.DecodedXboxSecuritySector, _view) }; DvdWritableInfo = new DvdWritableInfo { DataContext = new DvdWritableInfoViewModel(scsiInfo.MediaType, scsiInfo.DvdRamDds, scsiInfo.DvdRamCartridgeStatus, scsiInfo.DvdRamSpareArea, scsiInfo.LastBorderOutRmd, scsiInfo.DvdPreRecordedInfo, scsiInfo.DvdrMediaIdentifier, scsiInfo.DvdrPhysicalInformation, scsiInfo.HddvdrMediumStatus, scsiInfo.HddvdrLastRmd, scsiInfo.DvdrLayerCapacity, scsiInfo.DvdrDlMiddleZoneStart, scsiInfo.DvdrDlJumpIntervalSize, scsiInfo.DvdrDlManualLayerJumpStartLba, scsiInfo.DvdrDlRemapAnchorPoint, scsiInfo.DvdPlusAdip, scsiInfo.DvdPlusDcb, _view) }; BlurayInfo = new BlurayInfo { DataContext = new BlurayInfoViewModel(scsiInfo.BlurayDiscInformation, scsiInfo.BlurayBurstCuttingArea, scsiInfo.BlurayDds, scsiInfo.BlurayCartridgeStatus, scsiInfo.BluraySpareAreaInformation, scsiInfo.BlurayPowResources, scsiInfo.BlurayTrackResources, scsiInfo.BlurayRawDfl, scsiInfo.BlurayPac, _view) }; }
private void retrieveXboxInfo() { //WebRequest wRequest = HttpWebRequest.Create("http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=saintfx82"); //WebResponse wResponse = wRequest.GetResponse(); //StreamReader sr = new StreamReader(wResponse.GetResponseStream()); //string streamContents = sr.ReadToEnd(); #region xml response string result = @"<XboxInfo> <AccountStatus>Gold</AccountStatus> <PresenceInfo> <Valid>true</Valid> <Info>Last seen 2 hours ago playing Darksiders</Info> <Info2/> <LastSeen>2010-01-10T20:42:12+00:00</LastSeen> <Online>false</Online> <StatusText>Offline</StatusText> <Title>Darksiders</Title> </PresenceInfo> <State>Valid</State> <Gamertag>SaintFX82</Gamertag> <ProfileUrl>http://live.xbox.com/member/SaintFX82</ProfileUrl> <TileUrl> http://image.xboxlive.com/global/t.fffe07d1/tile/0/20003 </TileUrl> <Country>United States</Country> <Reputation>87.00885</Reputation> <Bio/> <Location>Indiana</Location> <ReputationImageUrl> http://live.xbox.com/xweb/lib/images/gc_repstars_external_18.gif </ReputationImageUrl> <GamerScore>14354</GamerScore> <Zone>Underground</Zone> <RecentGames> <XboxUserGameInfo> <Game> <Name>Darksiders</Name> <TotalAchievements>43</TotalAchievements> <TotalGamerScore>1000</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/bW/EM/0Wdsb2JgbA9ECgUMGgEfWSpVL2ljb24vMC84MDAwIAABAAAAAP4jYXI=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/As/84/1mdsb2JhbC9ECgUMGgEfWSpVL2ljb24vMC84MDAwAAAAAAAAAPkXzx0=.jpg </Image64Url> </Game> <LastPlayed>2010-01-10T17:32:50+00:00</LastPlayed> <Achievements>7</Achievements> <GamerScore>90</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3bdh(j0%02%05&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Dragon Age: Origins</Name> <TotalAchievements>55</TotalAchievements> <TotalGamerScore>1125</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/fu/yG/1Wdsb2JgbA9ECgQNGwEfVixTL2ljb24vMC84MDAwIAABAAAAAPqp7GE=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/EU/Ky/0mdsb2JhbC9ECgQNGwEfVixTL2ljb24vMC84MDAwAAAAAAAAAP2dQg4=.jpg </Image64Url> </Game> <LastPlayed>2010-01-09T17:20:49+00:00</LastPlayed> <Achievements>10</Achievements> <GamerScore>145</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3adh)k%3f%0b%04&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Assassin's Creed II</Name> <TotalAchievements>50</TotalAchievements> <TotalGamerScore>1000</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/ox/Jb/0Wdsb2JgbA9ECgUNGgMfVlwhL2ljb24vMC84MDAwIAABAAAAAP50Erw=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/zL/xv/1mdsb2JhbC9ECgUNGgMfVlwhL2ljb24vMC84MDAwAAAAAAAAAPlAvNM=.jpg </Image64Url> </Game> <LastPlayed>2010-01-02T21:19:06+00:00</LastPlayed> <Achievements>50</Achievements> <GamerScore>1000</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3bei*h%3ez%05&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Civilization Revolut'n</Name> <TotalAchievements>50</TotalAchievements> <TotalGamerScore>1000</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/Hf/Dq/1Wdsb2JgbA9ECgUMGgQfWSpWL2ljb24vMC84MDAwIAABAAAAAPrF8AI=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/cl/7e/0mdsb2JhbC9ECgUMGgQfWSpWL2ljb24vMC84MDAwAAAAAAAAAP3xXm0=.jpg </Image64Url> </Game> <LastPlayed>2009-12-29T21:06:51+00:00</LastPlayed> <Achievements>46</Achievements> <GamerScore>875</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3bdh-o0%02%03&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Mass Effect</Name> <TotalAchievements>49</TotalAchievements> <TotalGamerScore>1200</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/-T/0q/12dsb2JgbA9ECgR8GgMfWSpbL2ljb24vMC84MDAwIAABAAAAAPgFPeI=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/kp/Me/0Gdsb2JhbC9ECgR8GgMfWSpbL2ljb24vMC84MDAwAAAAAAAAAP8xk40=.jpg </Image64Url> </Game> <LastPlayed>2009-12-29T16:57:34+00:00</LastPlayed> <Achievements>2</Achievements> <GamerScore>40</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3a%15%18*iAr%09&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Shadow Complex</Name> <TotalAchievements>12</TotalAchievements> <TotalGamerScore>200</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/SY/pD/1mdsb2JgbA9ECgUAGwEfVilVL2ljb24vMC84MDAwIAABAAAAAPlsilY=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/Ji/R3/0Wdsb2JhbC9ECgUAGwEfVilVL2ljb24vMC84MDAwAAAAAAAAAP5YJDk=.jpg </Image64Url> </Game> <LastPlayed>2009-12-29T02:15:11+00:00</LastPlayed> <Achievements>10</Achievements> <GamerScore>180</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3bhe)j3%03%07&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Rock Band 2</Name> <TotalAchievements>50</TotalAchievements> <TotalGamerScore>1000</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/0l/Nu/0Gdsb2JgbA9ECgQNGwEfVllaL2ljb24vMC84MDAwIAABAAAAAP9BU80=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/vf/1a/12dsb2JhbC9ECgQNGwEfVllaL2ljb24vMC84MDAwAAAAAAAAAPh1-aI=.jpg </Image64Url> </Game> <LastPlayed>2009-12-21T21:21:11+00:00</LastPlayed> <Achievements>13</Achievements> <GamerScore>190</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3adh)k%3f%7ex&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Modern Warfare 2</Name> <TotalAchievements>50</TotalAchievements> <TotalGamerScore>1000</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/Z+/tF/12dsb2JgbA9ECgQJGgYfVl5UL2ljb24vMC84MDAwIAABAAAAAPhq63g=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/CE/Vx/0Gdsb2JhbC9ECgQJGgYfVl5UL2ljb24vMC84MDAwAAAAAAAAAP9eRRc=.jpg </Image64Url> </Game> <LastPlayed>2009-12-21T21:11:21+00:00</LastPlayed> <Achievements>22</Achievements> <GamerScore>315</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3a%60m%2fl%3b%7cw&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>The Godfather II</Name> <TotalAchievements>41</TotalAchievements> <TotalGamerScore>1000</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/Za/3e/1Gdsb2JgbA9ECgQNGwEfVllVL2ljb24vMC84MDAwIAABAAAAAPvxrXo=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/Cg/Pq/02dsb2JhbC9ECgQNGwEfVllVL2ljb24vMC84MDAwAAAAAAAAAPzFAxU=.jpg </Image64Url> </Game> <LastPlayed>2009-12-20T17:19:25+00:00</LastPlayed> <Achievements>41</Achievements> <GamerScore>1000</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3adh)k%3f%7ew&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Turtles In Time RS</Name> <TotalAchievements>12</TotalAchievements> <TotalGamerScore>200</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/7l/V0/0Wdsb2JgbA9ECgUAGwEfVytRL2ljb24vMC84MDAwIAABAAAAAP5bVfE=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/gf/tA/1mdsb2JhbC9ECgUAGwEfVytRL2ljb24vMC84MDAwAAAAAAAAAPlv+54=.jpg </Image64Url> </Game> <LastPlayed>2009-12-20T16:35:49+00:00</LastPlayed> <Achievements>10</Achievements> <GamerScore>140</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3bhe)j2e4X6z-17%01&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>GTA IV</Name> <TotalAchievements>65</TotalAchievements> <TotalGamerScore>1500</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/8x/Us/1Wdsb2JgbA9ECgUMGgQfWSlRL2ljb24vMC84MDAwIAABAAAAAPoDFew=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/nL/sY/0mdsb2JhbC9ECgUMGgQfWSlRL2ljb24vMC84MDAwAAAAAAAAAP03u4M=.jpg </Image64Url> </Game> <LastPlayed>2009-12-09T19:54:27+00:00</LastPlayed> <Achievements>56</Achievements> <GamerScore>1260</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3bdh-o0%01%07&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Borderlands</Name> <TotalAchievements>60</TotalAchievements> <TotalGamerScore>1250</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/zX/Es/12dsb2JgbA9ECgUMGgQfWSpUL2ljb24vMC84MDAwIAABAAAAAPgDcdI=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/ot/8Y/0Gdsb2JhbC9ECgUMGgQfWSpUL2ljb24vMC84MDAwAAAAAAAAAP83370=.jpg </Image64Url> </Game> <LastPlayed>2009-12-04T17:35:05+00:00</LastPlayed> <Achievements>39</Achievements> <GamerScore>705</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3bdh-o0%02%01&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>GRID</Name> <TotalAchievements>54</TotalAchievements> <TotalGamerScore>1100</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/Fu/SS/0Gdsb2JgbA9ECgQLG3QfWSklL2ljb24vMC84MDAwIAABAAAAAP+95Ak=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/eU/qm/12dsb2JhbC9ECgQLG3QfWSklL2ljb24vMC84MDAwAAAAAAAAAPiJSmY=.jpg </Image64Url> </Game> <LastPlayed>2009-10-13T19:38:59+00:00</LastPlayed> <Achievements>18</Achievements> <GamerScore>245</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3abn%5c%1e6%07%02&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>The Beatles: Rock Band</Name> <TotalAchievements>50</TotalAchievements> <TotalGamerScore>1000</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/Ya/fB/0Wdsb2JgbA9ECgQNGwEfVi1SL2ljb24vMC84MDAwIAABAAAAAP7up34=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/Dg/n1/1mdsb2JhbC9ECgQNGwEfVi1SL2ljb24vMC84MDAwAAAAAAAAAPnaCRE=.jpg </Image64Url> </Game> <LastPlayed>2009-09-30T00:42:45+00:00</LastPlayed> <Achievements>22</Achievements> <GamerScore>320</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3adh)k%3f%0a%04&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Scene It? BOS!</Name> <TotalAchievements>58</TotalAchievements> <TotalGamerScore>1250</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/99/uo/02dsb2JgbA9ECgR8GgMfVllTL2ljb24vMC84MDAwIAABAAAAAPyH2+g=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/mH/Wc/1Gdsb2JhbC9ECgR8GgMfVllTL2ljb24vMC84MDAwAAAAAAAAAPuzdYc=.jpg </Image64Url> </Game> <LastPlayed>1753-01-01T00:00:00+00:00</LastPlayed> <Achievements>6</Achievements> <GamerScore>120</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3a%15%18*iN%0er&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> <XboxUserGameInfo> <Game> <Name>Gears of War</Name> <TotalAchievements>57</TotalAchievements> <TotalGamerScore>1250</TotalGamerScore> <Image32Url> http://tiles.xbox.com/tiles/bU/l4/1Gdsb2JgbA9ECgR8GgMfWStWL2ljb24vMC84MDAwIAABAAAAAPtXSXI=.jpg </Image32Url> <Image64Url> http://tiles.xbox.com/tiles/Au/dM/02dsb2JhbC9ECgR8GgMfWStWL2ljb24vMC84MDAwAAAAAAAAAPxj5x0=.jpg </Image64Url> </Game> <LastPlayed>2008-11-15T21:38:09+00:00</LastPlayed> <Achievements>5</Achievements> <GamerScore>60</GamerScore> <DetailsURL> <![CDATA[http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3a%15%18*iAs%05&compareTo=SaintFX82]]> </DetailsURL> </XboxUserGameInfo> </RecentGames> </XboxInfo>"; #endregion XDocument xmlDoc = XDocument.Parse(result); var xboxInfo = from xi in xmlDoc.Descendants("XboxInfo") select new XboxInfo { AccountStatus = xi.Element("AccountStatus").Value, State = xi.Element("State").Value, Gamertag = xi.Element("Gamertag").Value, ProfileUrl = new Uri(xi.Element("ProfileUrl").Value), TileUrl = new Uri(xi.Element("TileUrl").Value), Country = xi.Element("Country").Value, Reputation = decimal.Parse(xi.Element("Reputation").Value), Bio = xi.Element("Bio").Value, Location = xi.Element("Location").Value, ReputationImageUrl = new Uri(xi.Element("ReputationImageUrl").Value), GamerScore = int.Parse(xi.Element("GamerScore").Value), Zone = xi.Element("Zone").Value, }; var presence = from p in xmlDoc.Descendants("PresenceInfo") select new PresenceInfo { Valid = bool.Parse(p.Element("Valid").Value), Info = p.Element("Info").Value, Info2 = p.Element("Info2").Value, LastSeen = p.Element("LastSeen").Value, Online = bool.Parse(p.Element("Online").Value), StatusText = p.Element("StatusText").Value, Title = p.Element("Title").Value }; xboxInfo.First <XboxInfo>().PresenceInfo = presence.First <PresenceInfo>(); var recentGames = from xugi in xmlDoc.Descendants("XboxUserGameInfo") select new XboxUserGameInfo { Game = new Game { Name = xugi.Element("Game").Element("Name").Value, TotalAchievements = int.Parse(xugi.Element("Game").Element("TotalAchievements").Value), TotalGamerScore = int.Parse(xugi.Element("Game").Element("TotalGamerScore").Value), Image32Url = new Uri(xugi.Element("Game").Element("Image32Url").Value), Image64Url = new Uri(xugi.Element("Game").Element("Image64Url").Value) }, LastPlayed = xugi.Element("LastPlayed").Value, Achievements = int.Parse(xugi.Element("Achievements").Value), GamerScore = int.Parse(xugi.Element("GamerScore").Value), DetailsUrl = new Uri(xugi.Element("DetailsURL").Value) }; XboxInfo xInfo = xboxInfo.First <XboxInfo>(); PresenceInfo pInfo = presence.First <PresenceInfo>(); List <XboxUserGameInfo> rGames = recentGames.ToList <XboxUserGameInfo>(); xInfo.PresenceInfo = pInfo; xInfo.RecentGames = rGames; propertyGrid1.SelectedObject = xInfo.PresenceInfo; this.xInfo = xInfo; }