Esempio n. 1
0
        private void encodingBackgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bw = sender as BackgroundWorker;

            EncoderParams args = (EncoderParams)e.Argument;

            EncoderResults results = new EncoderResults("", "", args.JobQueue.Count);

            bw.ReportProgress(0, results);

            //encodeStatus.Text = "Setting up threads...";

            // set up encoder
            Encoder encoderManager = new Encoder(args, bw);

            List <Thread> threadList = new List <Thread>();

            // set up 'n' threads for processing the queue
            for (int i = 0; i < args.Threads; i++)
            {
                Thread encoderThread = new Thread(
                    new ThreadStart(encoderManager.encoderThread));
                encoderThread.IsBackground = true;
                threadList.Add(encoderThread);

                // Start the thread.
                encoderThread.Start();
            }

            for (int i = 0; i < args.Threads; i++)
            {
                threadList[i].Join();
            }
        }
Esempio n. 2
0
        private void recursingBackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            /*FolderRecurser recurser = new FolderRecurser(flacDir.Text, ignoreList.ToArray(), copyFiles, rwl);
             *
             * Thread recurserThread = new Thread(new ThreadStart(recurser.recurseDirs));
             * recurserThread.IsBackground = false;
             * recurserThread.Start();
             *
             * while(recurserThread.IsAlive) {
             * }
             * recurserThread.Join();*/

            BackgroundWorker bw = sender as BackgroundWorker;

            EncoderParams args = (EncoderParams)e.Argument;

            FolderRecurser recurser = args.Recurser;

            recurser.recurseDirs();

            args.JobQueue = recurser.getJobQueue();
            jobQueue      = args.JobQueue;

            e.Result = args;

            bw.ReportProgress(20, args.JobQueue.Count);
        }
Esempio n. 3
0
        public Encoder(EncoderParams encoderParams, BackgroundWorker backworker)
        {
            EncoderParams args = encoderParams;

            flacPath       = args.FlacDir;
            outputPath     = args.OutputDir;
            encoderChoice  = args.SelectedEncoder;
            options        = args.CliParams;
            threadCount    = args.Threads;
            jobQueue       = args.JobQueue;
            copyFiles      = args.CopyFiles;
            ignoreList     = args.IgnoreList;
            copyList       = args.CopyList;
            hidewin        = args.Hidewin;
            thirdPartyLame = args.ThirdPartyLame;
            replayGainType = args.GainType;
            maxImageSize   = args.MaxImageSize;

            flacexe      = args.FlacExe;
            oggPath      = args.OggPath;
            lamePath     = args.LamePath;
            metaflacPath = args.MetaflacPath;
            opusPath     = args.OpusPath;

            bw = backworker;
        }
Esempio n. 4
0
        public void encode()
        {
            // this section should be kept in case of bad config files, etc.
            if (encoder.SelectedIndex == 0)
            {
                if (String.IsNullOrEmpty(oggPath))
                {
                    oggPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + dirSeparator + "oggenc.exe";
                }
            }
            else
            {
                if (String.IsNullOrEmpty(lamePath))
                {
                    lamePath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + dirSeparator + "lame.exe";
                }
                if (String.IsNullOrEmpty(flacexe))
                {
                    flacexe = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + dirSeparator + "flac.exe";
                }
            }

            // set up status bar
            encodeStatus.Text    = "Recursing directories...";
            encodeProgress.Width = 175;             // this seems to change the width in Mono, but only the Designer seems to affect the width in Windows
            encodeProgress.Value = 0;
            encodeProgress.MarqueeAnimationSpeed = 50;
            encodeProgress.Style   = ProgressBarStyle.Marquee;
            encodeProgress.Visible = true;

            encodeAborted = false;

            ignoreList = new List <String>();
            String[] split = new String[0];
            if (!String.IsNullOrEmpty(ignoredExts))
            {
                split = ignoredExts.Split(' ');
                foreach (String ext in split)
                {
                    if (!String.IsNullOrEmpty(ext))
                    {
                        ignoreList.Add(ext);
                    }
                }
            }

            copyList = new List <String>();
            if (!String.IsNullOrEmpty(copiedExts))
            {
                split = copiedExts.Split(' ');
                foreach (String ext in split)
                {
                    if (!String.IsNullOrEmpty(ext))
                    {
                        copyList.Add(ext);
                    }
                }
            }

            // make sure source and destination directories are given
            if (String.IsNullOrEmpty(flacDir.Text) || String.IsNullOrEmpty(outputDir.Text))
            {
                MessageBox.Show("The Flac directory and destination directory must both be specified", "Specify directories", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly, false);
                encodeStatus.Text      = "Ready";
                encodeProgress.Visible = false;
                encodeButton.Enabled   = true;
                return;
            }

            // make sure source directory exists
            if (!Directory.Exists(flacDir.Text))
            {
                MessageBox.Show("The source directory does not exist.", "Non-existent source directory", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly, false);
                encodeStatus.Text      = "Ready";
                encodeProgress.Visible = false;
                encodeButton.Enabled   = true;
                return;
            }

            resultsList = new List <EncoderResults>();

            String flacDirString = flacDir.Text.Trim();

            if (flacDirString.EndsWith(dirSeparator))
            {
                flacDirString = flacDirString.TrimEnd(new char[1] {
                    System.IO.Path.DirectorySeparatorChar
                });
            }
            String outputDirString = outputDir.Text.Trim();

            if (outputDirString.EndsWith(dirSeparator))
            {
                outputDirString = outputDirString.TrimEnd(new char[1] {
                    System.IO.Path.DirectorySeparatorChar
                });
            }

            FolderRecurser recurser = new FolderRecurser(flacDirString, ignoreList.ToArray(), copyList.ToArray(), copyFiles, rwl);

            int threads;

            rwl.AcquireWriterLock(-1);              // -1 == wait forever for the lock
            try {
                threads = (int)threadCounter.Value; // Value is a System::Decimal, hence the cast
            }
            finally {
                rwl.ReleaseWriterLock();
            }

            EncoderParams args = new EncoderParams();

            args.Recurser        = recurser;
            args.FlacDir         = flacDirString;
            args.OutputDir       = outputDirString;
            args.SelectedEncoder = (EncoderParams.EncoderChoice)encoder.SelectedIndex;
            args.CliParams       = cliParams.Text;
            args.Threads         = threads;
            args.CopyFiles       = copyFiles;
            args.FlacExe         = flacexe;
            args.OggPath         = oggPath;
            args.LamePath        = lamePath;
            args.MetaflacPath    = metaflacPath;
            args.OpusPath        = opusPath;
            args.Hidewin         = hidewin;
            args.IgnoreList      = ignoreList;
            args.CopyList        = copyList;
            args.ThirdPartyLame  = thirdPartyLame;
            args.GainType        = replayGainType;
            args.MaxImageSize    = maxImageSize;

            this.recursingBackgroundWorker1.RunWorkerAsync(args);
        }