Ejemplo n.º 1
0
        public static void ShowPxzExplorer(PxzFile file)
        => new PxzExplorer
        {
            Pxz = file
        }

        .ShowDialog();
Ejemplo n.º 2
0
        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");
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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");
            }
        }
Ejemplo n.º 6
0
        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);
        }