internal static void PerformDvdMovieTasks(PluginClass pluginClass, string dataDirectory, IMeedioMessage Message, string CurDir,
             IMeedioSystem meedioSystem)
        {
            ///////////////////////DVD MOVIE CODE//////////////////////

            if (pluginClass.DVDMovieOptions == "Do not process movies" || pluginClass.tvShow) return;

            if (pluginClass.DVDMovieOptions == "Backup disc as one ISO file")
            {
                MeedioUtils.ShowPopUpScreen(CurDir, meedioSystem, Message, "Creating disc image...", 0, .05,
                                                    "center", pluginClass.vAlign, 10);
                MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - Ripping DVD to ISO file");
                string ISOName = StringFunctions.replaceIllegalCharacters(pluginClass.DVDTitle, " ");
                DiscIsoCreators.CreateDvdIsoFullDisc(pluginClass, ISOName, CurDir, dataDirectory);

                //MOVE MOVIE FILE TO NETWORK ON NEW THREAD
                MeedioUtils.ShowPopUpScreen(CurDir, meedioSystem, Message, "Moving file to movie directory...", 0,
                                                    .05, "center", pluginClass.vAlign, 10);
                string TempMovieDir = Path.Combine(dataDirectory, pluginClass.DVDTitle);
                string ISOFile = Path.Combine(TempMovieDir, ISOName + ".iso");
                PluginClass.argumentstruct MoveFileArguments = new PluginClass.argumentstruct(meedioSystem, Message, ISOFile, pluginClass.newDir, TempMovieDir, pluginClass.DVDTitle, CurDir, pluginClass.Log, pluginClass.swWriteLog);
                ParameterizedThreadStart paramthreadstart =
                    new ParameterizedThreadStart(obj1 => MediaFileMovers.MoveToMovieDir(pluginClass, obj1));
                Thread MoveFileThread = new Thread(paramthreadstart);
                MoveFileThread.Start(MoveFileArguments);
            }

            if (pluginClass.DVDMovieOptions == "Backup main movie as H264/MKV file")
            {
                //CREATE TEMPORARY ISO FOR HANDBRAKE
                MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - Ripping DVD to ISO file");
                string ISOName = StringFunctions.replaceIllegalCharacters(pluginClass.DVDTitle, " ");
                MeedioUtils.ShowPopUpScreen(CurDir, meedioSystem, Message, "Creating temporary disc image...", 0,
                                                    .05, "center", pluginClass.vAlign, 10);
                DiscIsoCreators.CreateDvdIsoFullDisc(pluginClass, ISOName, CurDir, dataDirectory);

                //LAUNCH THE REMAINING CODE IN A NEW THREAD SO NEW DISC CAN BE RIPPED (handbrake, move, run imports)
                MeedioUtils.ShowPopUpScreen(CurDir, meedioSystem, Message, "Encoding file with HandBrake...", 0, .05,
                                                    "center", pluginClass.vAlign, 10);
                string TempMovieDir = Path.Combine(dataDirectory, pluginClass.DVDTitle);
                string ISOFile = Path.Combine(TempMovieDir, ISOName + ".iso");
                PluginClass.HBargumentstruct HBArguments = new PluginClass.HBargumentstruct(pluginClass.HandBrake, pluginClass.HandBrakeQuality, pluginClass.vcd, "", pluginClass.HexID, ISOFile,
                                                                    TempMovieDir, pluginClass.newDir, "", pluginClass.Log, pluginClass.swWriteLog, meedioSystem);
                ParameterizedThreadStart HBthreadstart = new ParameterizedThreadStart(pluginClass.RunHandBrake);
                Thread HBThread = new Thread(HBthreadstart);
                HBThread.Start(HBArguments);
            }

            if (pluginClass.DVDMovieOptions == "Backup main movie as MPG file")
            {
                MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - Backing up main movie VOB files");
                string MPGName = StringFunctions.replaceIllegalCharacters(pluginClass.DVDTitle, " ");
                string MPGFile = Path.Combine(dataDirectory, MPGName + ".mpg");
                MeedioUtils.ShowPopUpScreen(CurDir, meedioSystem, Message, "Backing up main movie as mpg...", 0, .05,
                                                    "center", pluginClass.vAlign, 10);
                DVDUtils.BackUpMainMovieDVDFiles(pluginClass.Drive, dataDirectory, pluginClass.Log, pluginClass.swWriteLog);
                DVDUtils.VOBFilesToMpeg(MPGFile, dataDirectory, pluginClass.Log, pluginClass.swWriteLog);

                //MOVE MOVIE FILE TO NETWORK ON NEW THREAD
                MeedioUtils.ShowPopUpScreen(CurDir, meedioSystem, Message, "Moving file to movie directory...", 0,
                                                    .05, "center", pluginClass.vAlign, 10);
                PluginClass.argumentstruct MoveFileArguments = new PluginClass.argumentstruct(meedioSystem, Message, MPGFile, pluginClass.newDir, dataDirectory, pluginClass.DVDTitle, CurDir, pluginClass.Log, pluginClass.swWriteLog);
                ParameterizedThreadStart paramthreadstart =
                    new ParameterizedThreadStart(obj1 => MediaFileMovers.MoveToMovieDir(pluginClass, obj1));
                Thread MoveFileThread = new Thread(paramthreadstart);
                MoveFileThread.Start(MoveFileArguments);
            }

            //THE FOLLOWING CODE COPIES, BUT THE IFO FILE NEEDS TO BE ADJUSTED TO PROPERLY ADDRESS VOB FILES
            //if (DVDMovieOptions == "Backup main movie as IFO & VOB files")
            //{
            //    ToolBox.MeedioUtils.LogEntry(Log, swWriteLog, "[MAIN CODE] - Backing up main movie VOB files");
            //    ToolBox.MeedioUtils.ShowPopUpScreen(CurDir, MeedioSystem, Message, "Backing up main movie files...", 0, .05, "center", vAlign, 10);
            //    ToolBox.DVDUtils.BackUpMainMovieDVDFiles(Drive, newDir, Log, swWriteLog);
            //}

            if (pluginClass.DVDMovieOptions == "Backup disc as IFO & VOB files")
            {
                MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - Backing up IFO and VOB files");
                MeedioUtils.ShowPopUpScreen(CurDir, meedioSystem, Message, "Backing up movie files...", 0, .05,
                                                    "center", pluginClass.vAlign, 10);
                DVDUtils.BackUpAllDVDFiles(pluginClass.Drive, pluginClass.newDir, pluginClass.Log, pluginClass.swWriteLog);
            }

            //RUN EXTERNAL DVD PROGRAM
            if (pluginClass.DVDMovieOptions == "Backup with my specifed program" && pluginClass.extProgram != "" && Directory.Exists(pluginClass.newDir))
            {
                pluginClass.RunDVDProgram(pluginClass.extProgram, pluginClass.extParameters);
            }
        }
        internal static bool PerformDvdTvTasks(PluginClass pluginClass, IMeedioMessage Message, IMeedioSystem MeedioSystem,
             string DataDirectory, string CurDir)
        {
            ///////////////////////DVD TV CODE//////////////////////
            if (pluginClass.tvShow == true)
            {
                String TVServerDirectory = "";
                //CONFIRM DVD IS TV SERIES WITH DIALOG BOX
                string Description = (pluginClass.SeriesName +
                                      " has been identified as a disc that may contain television episodes.  Please confirm if this is a TV or Movie DVD.");
                MeedioUtils.ShowDialogBox(MeedioSystem, Message, "Please confirm disc type", Description, "yes/no",
                                                  "TV Series", "Movie", pluginClass.Log, pluginClass.swWriteLog);
                PluginClass.mre.WaitOne(); //Pause and wait for input
                PluginClass.mre.Reset(); //Reset thread wait

                if (pluginClass.tvShow == true)
                {
                    //SHOW ON SCREEN KEYBOARD AND CONFIRM SEASON NUMBER
                    string SeasonNumber = DVDUtils.GetSeasonNumber(pluginClass.D2, pluginClass.Log, pluginClass.swWriteLog);
                    MeedioUtils.ShowOnScreenKeyboard(MeedioSystem, Message, "Please confirm season number", SeasonNumber, pluginClass.Log, pluginClass.swWriteLog);
                    PluginClass.mre.WaitOne(); //Pause and wait for input
                    PluginClass.mre.Reset(); //Reset thread wait
                    string SeasonNumforFileName = pluginClass.DVDTitle.Trim().PadLeft(2, '0');
                    SeasonNumber = "Season " + pluginClass.DVDTitle.Trim().PadLeft(2, '0');

                    //SHOW ON SCREEN KEYBOARD AND CONFIRM DISC NUMBER
                    string DiscNumber = DVDUtils.GetSeasonDiscNumber(pluginClass.D2, pluginClass.Log, pluginClass.swWriteLog);
                    MeedioUtils.ShowOnScreenKeyboard(MeedioSystem, Message, "Please confirm disc number", DiscNumber, pluginClass.Log, pluginClass.swWriteLog);
                    PluginClass.mre.WaitOne(); //Pause and wait for input
                    PluginClass.mre.Reset(); //Reset thread wait
                    string DiscNumberforFileName = pluginClass.DVDTitle.Trim().PadLeft(2, '0');
                    DiscNumber = pluginClass.DVDTitle.Trim();

                    string SeriesforFileName = StringFunctions.replaceIllegalCharacters(pluginClass.SeriesName, " ");
                    string FileName = SeriesforFileName + " S" + SeasonNumforFileName + "D" + DiscNumberforFileName;
                    MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - Series name: " + pluginClass.SeriesName);

                    //CREATE DIRECTORY ON SERVER
                    pluginClass.SeriesName = (pluginClass.SeriesName + "\\" + SeasonNumber).Trim();
                    TVServerDirectory = DirectoryCreator.CreateDirectory(pluginClass, pluginClass.SeriesName, "", "", "TV");
                    MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - TV server directory: " + TVServerDirectory);

                    if (pluginClass.DVDTVOptions == "Backup individual episodes as mkv files")
                    {
                        //CREATE TEMPORARY ISO FOR HANDBRAKE
                        String OutputDirectory = "";
                        OutputDirectory = Path.Combine(DataDirectory, pluginClass.SeriesName);
                        if (!Directory.Exists(OutputDirectory))
                        {
                            Directory.CreateDirectory(OutputDirectory);
                        }
                        MeedioUtils.ShowPopUpScreen(CurDir, MeedioSystem, Message, "Creating temporary disc image...", 0,
                                                            .05, "center", pluginClass.vAlign, 10);
                        MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - Creating temporary ISO file");
                        string ISOFile = Path.Combine(OutputDirectory, FileName + ".iso");
                        string mkisofsPath = (CurDir + "\\mkisofs.exe");
                        DVDUtils.CreateISOwMKISOFS(mkisofsPath, ISOFile, pluginClass.Drive, pluginClass.Log, pluginClass.swWriteLog);

                        //LAUNCH THE REMAINING CODE IN A NEW THREAD SO NEW DISC CAN BE RIPPED (handbrake, move, run imports)
                        MeedioUtils.ShowPopUpScreen(CurDir, MeedioSystem, Message, "Encoding file with HandBrake...", 0,
                                                            .05, "center", pluginClass.vAlign, 10);
                        PluginClass.HBargumentstruct HBArguments = new PluginClass.HBargumentstruct(pluginClass.HandBrake, pluginClass.HandBrakeQuality, pluginClass.vcd, "", pluginClass.HexID, ISOFile,
                                                                            OutputDirectory, TVServerDirectory, DiscNumber, pluginClass.Log, pluginClass.swWriteLog, MeedioSystem);
                        ParameterizedThreadStart HBthreadstart = new ParameterizedThreadStart(pluginClass.RunHandBrake);
                        Thread HBThread = new Thread(HBthreadstart);
                        HBThread.Start(HBArguments);
                    }

                    if (pluginClass.DVDTVOptions == "Backup disc as one ISO file")
                    {
                        MeedioUtils.ShowPopUpScreen(CurDir, MeedioSystem, Message, "Creating disc image...", 0, .05,
                                                            "center", pluginClass.vAlign, 10);
                        MeedioUtils.LogEntry(pluginClass.Log, pluginClass.swWriteLog, "[MAIN CODE] - Ripping DVD to ISO file");
                        DiscIsoCreators.CreateDvdIsoFullDisc(pluginClass, FileName, CurDir, DataDirectory);

                        //MOVE ISO FILE TO NETWORK ON NEW THREAD
                        MeedioUtils.ShowPopUpScreen(CurDir, MeedioSystem, Message, "Moving file to movie directory...",
                                                            0, .05, "center", pluginClass.vAlign, 10);
                        string TempMovieDir = Path.Combine(DataDirectory, FileName);
                        string ISOFile = Path.Combine(TempMovieDir, FileName + ".iso");
                        PluginClass.argumentstruct MoveFileArguments = new PluginClass.argumentstruct(MeedioSystem, Message, ISOFile, TVServerDirectory,
                                                                              TempMovieDir, pluginClass.SeriesName, CurDir, pluginClass.Log, pluginClass.swWriteLog);
                        ParameterizedThreadStart paramthreadstart =
                            new ParameterizedThreadStart(obj1 => MediaFileMovers.MoveToMovieDir(pluginClass, obj1));
                        Thread MoveFileThread = new Thread(paramthreadstart);
                        MoveFileThread.Start(MoveFileArguments);
                    }
                }

                //EJECT DVD
                DVDUtils.MCICDROM.Eject(pluginClass.D2);

                //OPTIONAL DELAY TO ALLOW TIME FOR ANOTHER DISC INSERT
                if (pluginClass.ImportDelay != "0")
                {
                    if (pluginClass.RunImportDelay(CurDir, MeedioSystem) == true)
                    {
                        return true;
                    }
                }

                //RUN TV IMPORTS
                if (pluginClass.importTVModule != "" && Directory.Exists(TVServerDirectory))
                {
                    //RUN IF DIRECTORY IS NOT EMPTY
                    String[] fileEntries = Directory.GetFiles(TVServerDirectory, "*.*", SearchOption.AllDirectories);
                    int numFiles = fileEntries.Length;
                    if (numFiles > 0)
                    {
                        MeedioUtils.RunImports(pluginClass.importTVModule, MeedioSystem, pluginClass.Log, pluginClass.swWriteLog);
                    }
                }
            }
            return false;
        }