public static void ShowPxzExplorer(PxzFile file) => new PxzExplorer { Pxz = file } .ShowDialog();
private void DoPxzLoad(string fileName) { try { //ensure the file exists if (File.Exists(fileName)) { //attempt PXZ load var pxz = LoadPxz(fileName); //set the global Pxz = pxz; //perform UI load DoPxzLoad(); } else { //alert the user UIMessages.Error(@"Couldn't find the specified PXZ file", @"Validation Error"); } } catch (Exception ex) { UIMessages.Error(ex.ToString(), @"Load PXZ File Error"); } }
private static PxzFile LoadPxz(string fileName, bool waitWindow = true) { //multi-threaded handler if (waitWindow) { return((PxzFile)WaitWindow.WaitWindow.Show(LoadPxz, @"Loading PXZ file", fileName)); } try { //ensure the file exists if (File.Exists(fileName)) { //attempt PXZ load var pxz = new PxzFile(); pxz.Load(fileName); //return the loaded PXZ file return(pxz); } } catch (Exception ex) { UIMessages.Error(ex.ToString(), @"Load PXZ File Error"); } //default return(null); }
public static PxzFile LoadMetadataArchive(string fileName, bool waitWindow = true) { if (waitWindow) { var waitArgs = new object[] { fileName }; return((PxzFile)WaitWindow.WaitWindow.Show(LoadMetadataArchive, @"Loading PXZ", waitArgs)); } try { var pxz = new PxzFile(); pxz.Load(fileName); return(pxz); } catch (Exception ex) { LoggingHelpers.RecordException(ex.Message, "XmlMetadataLoadError"); return(null); } }
public static void MetadataToFile(string fileName, PlexObject contentToExport, Bitmap poster = null, bool silent = false) { try { //try and obtain a poster if one wasn't provided var p = poster ?? ImageHandler.GetPoster(contentToExport); //create each new PXZ record in memory var rawMetadata = new PxzRecord(contentToExport.RawMetadata, @"raw"); var objMetadata = new PxzRecord(contentToExport.ToXml(), @"obj"); var ptrMetadata = new PxzRecord(p, @"poster"); //the records to save to the PXZ file are contained in a list var data = new List <PxzRecord> { rawMetadata, objMetadata, ptrMetadata }; //export the actor images (if any) if (contentToExport.Actors != null) { if (contentToExport.Actors.Count > 0) { //loop through each actor and attempt an image download foreach (var a in contentToExport.Actors) { //download var image = ImageHandler.GetImageFromUrl(a.ThumbnailUri); //verify if (image != Resources.unavailable) { //create a new record for the image var record = new PxzRecord(image, $"actor_{MD5Helper.CalculateMd5Hash(a.ThumbnailUri)}"); //add it to the collection data.Add(record); } } } } //embedded in PXZ indexing information var plexdlVersion = Assembly.GetEntryAssembly()?.GetName().Version; //initialise the PXZ file and flush it to disk var pxz = new PxzFile(data, plexdlVersion, BuildState.State); pxz.Save(fileName); //show a message indicating success if allowed if (!silent) { UIMessages.Info(@"Successfully exported metadata!"); } } catch (Exception ex) { if (!silent) { UIMessages.Error("An error occurred\n\n" + ex, @"Metadata Export Error"); } LoggingHelpers.RecordException(ex.Message, "XmlMetadataSaveError"); } }
public static PlexObject MetadataFromFile(PxzFile file, bool waitWindow = true, bool silent = false) { if (waitWindow) { return((PlexObject)WaitWindow.WaitWindow.Show(MetadataFromFile, @"Reading data", file, silent)); } if (file != null) { try { //load the object record (encoded XML that contains metadata/attributes) var rec = file.LoadRecord(@"obj"); //it'll be null if the load above failed for whatever reason if (rec != null) { var obj = FromXml(rec.Content.ToXmlDocument()); //apply raw XML from PXZ file obj.RawMetadata = file.LoadRecord(@"raw").Content.ToXmlDocument(); //apply poster from PXZ file obj.StreamInformation.ContentThumbnail = file.LoadRecord(@"poster").Content.ToImage(); //check if the PXZ has any actor thumbnails stored var bitmaps = file.SelectType(PxzRecordType.Bitmap); //find any actor images if (bitmaps != null) { //loop through each bitmap foreach (var b in bitmaps) { //check if the record is an actor thumbnail if (b.Header.Naming.RecordName.StartsWith(@"actor_")) { //find out which actor this image belongs to foreach (var a in obj.Actors) { //record naming is just the URL hashed var recordName = $"actor_{MD5Helper.CalculateMd5Hash(a.ThumbnailUri)}"; //verify if (recordName == b.Header.Naming.RecordName) { //apply image a.Thumbnail = b.Content.ToImage(); break; } } } } } //return the new PlexObject return(obj); } } catch (Exception ex) { if (!silent) { UIMessages.Error("An error occurred\n\n" + ex, @"Metadata Load Error"); } LoggingHelpers.RecordException(ex.Message, "XmlMetadataLoadError"); } } //default return(null); }