public void RequestWaveOnly(
            string filename,
            bool forceRegenerate = false,
            Action <string, string, string> customCallback = null)
        {
            taskThread.QueueThisUpPlease(() =>
            {
                var filenameWave    = fileMapping.AddGetWaveFilenameDat(filename);
                var filenameWaveJpg = fileMapping.AddGetWaveFilenameJpg(filename);
                fileMapping.MakeSureDataFolderExists(filenameWave);

                if (!File.Exists(filenameWaveJpg))
                {
                    // generates the waveform
                    UiConsolePush(VidkaConsoleLogLevel.Info, "generating wave " + Path.GetFileName(filenameWaveJpg));
                    var op3 = new WaveformExtraction(filename, filenameWave, filenameWaveJpg, true);
                    UiPushResult(op3);
                }
                if (WaveformReady != null)
                {
                    WaveformReady(filename, filenameWave, filenameWaveJpg);
                }
                if (customCallback != null)
                {
                    customCallback(filename, filenameWave, filenameWaveJpg);
                }
            });
        }
        public void RequestThumbsAndWave(string filename)
        {
            taskThread.QueueThisUpPlease(() =>
            {
                var filenameThumb   = fileMapping.AddGetThumbnailFilename(filename);
                var filenameWave    = fileMapping.AddGetWaveFilenameDat(filename);
                var filenameWaveJpg = fileMapping.AddGetWaveFilenameJpg(filename);
                fileMapping.MakeSureDataFolderExists(filenameThumb);

                if (!File.Exists(filenameThumb))
                {
                    // generates the thumbnails
                    UiConsolePush(VidkaConsoleLogLevel.Info, "generating thumbs " + Path.GetFileName(filenameThumb));
                    var op2 = new ThumbnailExtraction(filename, filenameThumb);
                    op2.PleaseUnlockThisFile += dispatch_pleaseUnlockThisFile;
                    op2.run();
                    UiPushResult(op2);
                }
                if (ThumbnailsReady != null)
                {
                    ThumbnailsReady(filename, filenameThumb);
                }

                if (!File.Exists(filenameWaveJpg))
                {
                    // generates the waveform
                    UiConsolePush(VidkaConsoleLogLevel.Info, "generating wave " + Path.GetFileName(filenameWaveJpg));
                    var op3 = new WaveformExtraction(filename, filenameWave, filenameWaveJpg, true);
                    UiPushResult(op3);
                }
                if (WaveformReady != null)
                {
                    WaveformReady(filename, filenameWave, filenameWaveJpg);
                }
            });
        }
        public void RequestThumbsAndWave(string filename)
        {
            taskThread.QueueThisUpPlease(() =>
            {
                var filenameThumb = fileMapping.AddGetThumbnailFilename(filename);
                var filenameWave = fileMapping.AddGetWaveFilenameDat(filename);
                var filenameWaveJpg = fileMapping.AddGetWaveFilenameJpg(filename);
                fileMapping.MakeSureDataFolderExists(filenameThumb);

                if (!File.Exists(filenameThumb)) {
                    // generates the thumbnails
                    UiConsolePush(VidkaConsoleLogLevel.Info, "generating thumbs " + Path.GetFileName(filenameThumb));
                    var op2 = new ThumbnailExtraction(filename, filenameThumb);
                    op2.PleaseUnlockThisFile += dispatch_pleaseUnlockThisFile;
                    op2.run();
                    UiPushResult(op2);
                }
                if (ThumbnailsReady != null)
                    ThumbnailsReady(filename, filenameThumb);

                if (!File.Exists(filenameWaveJpg)) {
                    // generates the waveform
                    UiConsolePush(VidkaConsoleLogLevel.Info, "generating wave " + Path.GetFileName(filenameWaveJpg));
                    var op3 = new WaveformExtraction(filename, filenameWave, filenameWaveJpg, true);
                    UiPushResult(op3);
                }
                if (WaveformReady != null)
                    WaveformReady(filename, filenameWave, filenameWaveJpg);
            });
        }
        public void RequestWaveOnly(
			string filename,
			bool forceRegenerate = false,
			Action<string, string, string> customCallback = null)
        {
            taskThread.QueueThisUpPlease(() =>
            {
                var filenameWave = fileMapping.AddGetWaveFilenameDat(filename);
                var filenameWaveJpg = fileMapping.AddGetWaveFilenameJpg(filename);
                fileMapping.MakeSureDataFolderExists(filenameWave);

                if (!File.Exists(filenameWaveJpg))
                {
                    // generates the waveform
                    UiConsolePush(VidkaConsoleLogLevel.Info, "generating wave " + Path.GetFileName(filenameWaveJpg));
                    var op3 = new WaveformExtraction(filename, filenameWave, filenameWaveJpg, true);
                    UiPushResult(op3);
                }
                if (WaveformReady != null)
                    WaveformReady(filename, filenameWave, filenameWaveJpg);
                if (customCallback != null)
                    customCallback(filename, filenameWave, filenameWaveJpg);
            });
        }