Beispiel #1
0
        private void action_add()
        {
            //запоминаем старое положени трекбара
            string[] oldfiles = m.infileslist;
            Massive x = m.Clone();

            try
            {
                FilesListWindow f = new FilesListWindow(x);
                if (f.m == null) return;
                x = f.m.Clone();

                //если что-то изменилось
                bool needupdate = false;
                if (oldfiles.Length != x.infileslist.Length)
                    needupdate = true;
                else
                {
                    for (int i = 0; i < x.infileslist.Length; i++)
                    {
                        //Файлы поменялись местами
                        if (oldfiles[i] != x.infileslist[i])
                        {
                            needupdate = true; break;
                        }
                    }
                }

                if (needupdate)
                {
                    string ext = Path.GetExtension(x.infilepath).ToLower();

                    //Для MPEG2Source и DGSource надо переиндексировать - проще закрыть и открыть файл(ы) заново
                    if (x.vdecoder == AviSynthScripting.Decoders.MPEG2Source && !string.IsNullOrEmpty(x.indexfile) && ext != ".d2v" ||
                        x.vdecoder == AviSynthScripting.Decoders.DGSource && !string.IsNullOrEmpty(x.indexfile) && ext != ".dgi")
                    {
                        //Тут должна удалиться индекс-папка
                        CloseFile(true);

                        x.inaudiostreams = new ArrayList();
                        x.outaudiostreams = new ArrayList();
                        action_open(x);
                        return;
                    }

                    //Обновляем возможные индекс-файлы от FFmpegSource2
                    if (!x.ffms_indexintemp)
                    {
                        foreach (string file in x.infileslist)
                        {
                            if (!ffcache.Contains(file + ".ffindex"))
                                ffcache.Add(file + ".ffindex");
                        }
                    }

                    //Переиндексация для FFmpegSource2
                    if (x.vdecoder == AviSynthScripting.Decoders.FFmpegSource2)
                    {
                        Indexing_FFMS ffindex = new Indexing_FFMS(x);
                        if (ffindex.m == null)
                        {
                            CloseFile(false);
                            return;
                        }
                    }

                    //Возможные индекс-файлы от LSMASH
                    foreach (string file in x.infileslist)
                    {
                        if (!lsmashcache.Contains(file + ".lwi"))
                            lsmashcache.Add(file + ".lwi");
                    }

                    if (x.inaudiostreams.Count > 0)
                    {
                        AudioStream s = (AudioStream)x.inaudiostreams[x.inaudiostream];
                        ArrayList afiles = new ArrayList();
                        if (ext == ".d2v" || ext == ".dga" || ext == ".dgi")
                        {
                            foreach (string file in x.infileslist)
                            {
                                ArrayList afileslist = Indexing.GetTracks(file);
                                if (afileslist.Count > 0)
                                    afiles.Add(afileslist[Math.Min(x.inaudiostream, afileslist.Count - 1)]);
                            }
                        }
                        else if (!x.isvideo) //Для аудио файлов
                        {
                            foreach (string file in x.infileslist)
                                afiles.Add(file);

                            x.inframes = 0;
                            x.induration = TimeSpan.Zero;
                        }
                        else
                            afiles.Add(s.audiopath);

                        s.audiofiles = Calculate.ConvertArrayListToStringArray(afiles);
                    }

                    //создаём новый AviSynth скрипт
                    x = AviSynthScripting.CreateAutoAviSynthScript(x);

                    //подсчитываем размер
                    long sizeb = 0;
                    foreach (string file in x.infileslist)
                    {
                        sizeb += new FileInfo(file).Length;
                    }
                    x.infilesize = Calculate.ConvertDoubleToPointString((double)sizeb / 1049511, 1) + " mb";
                    x.infilesizeint = (int)((double)sizeb / 1049511);

                    //получаем длительность и фреймы
                    Caching cach = new Caching(x, false);
                    if (cach.m == null) return;
                    x = cach.m.Clone();

                    //Нужно обновить кол-во кадров в BlankClip()
                    if (x.vdecoder == AviSynthScripting.Decoders.BlankClip)
                        x = AviSynthScripting.CreateAutoAviSynthScript(x);

                    x = Calculate.UpdateOutFrames(x);

                    //загружаем обновлённый скрипт
                    m = x.Clone();
                    LoadVideo(MediaLoad.load);
                    UpdateTaskMassive(m);
                }
            }
            catch (Exception ex)
            {
                ErrorException("AppendFile: " + ex.Message, ex.StackTrace);
            }
        }
Beispiel #2
0
        public static Massive GetFriendFilesList(Massive m)
        {
            string friendfile;
            ArrayList fileslist = new ArrayList();

            if (Calculate.IsValidVOBName(m.infilepath))
            {
                if (Path.GetFileName(m.infilepath).ToUpper() != "VIDEO_TS.VOB")
                {
                    string title = Calculate.GetTitleNum(m.infilepath);
                    string dir = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }); //C:\, но C:\Some_Path
                    for (int i = 1; i <= 20; i++)
                    {
                        friendfile = dir + "\\VTS_" + title + "_" + i.ToString() + ".VOB";
                        if (File.Exists(friendfile)) fileslist.Add(friendfile);
                    }

                    //Если каким-то чудесным образом ни одного файла не нашлось
                    if (fileslist.Count == 0) fileslist.Add(m.infilepath);
                }
                else
                    fileslist.Add(m.infilepath);
            }
            else
            {
                fileslist.Add(m.infilepath);
                char[] chars = Path.GetFileNameWithoutExtension(m.infilepath).ToCharArray();
                int pos = 0;
                foreach (char c in chars)
                {
                    pos += 1;
                    string cstring = c.ToString();
                    if (cstring == "1")
                    {
                        string dir = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }) + "\\"; //Так надо
                        string file_name = Path.GetFileNameWithoutExtension(m.infilepath);
                        string ext = Path.GetExtension(m.infilepath);
                        for (int i = 2; i <= 9; i++)
                        {
                            friendfile = dir + file_name.Remove(pos - 1, 1).Insert(pos - 1, i.ToString()) + ext;
                            if (File.Exists(friendfile)) fileslist.Add(friendfile);
                        }
                    }
                }
            }

            //забиваем все найденные файлы
            m.infileslist = Calculate.ConvertArrayListToStringArray(fileslist);

            //диалог выбора файлов если их больше одного
            if (fileslist.Count > 1)
            {
                FilesListWindow f = new FilesListWindow(m);
                if (f.m != null) m = f.m.Clone();
                else m = null;
            }

            return m;
        }
Beispiel #3
0
        public static Massive GetFriendFilesList(Massive m)
        {
            string    friendfile;
            ArrayList fileslist = new ArrayList();

            if (Calculate.IsValidVOBName(m.infilepath))
            {
                if (Path.GetFileName(m.infilepath).ToUpper() != "VIDEO_TS.VOB")
                {
                    string title = Calculate.GetTitleNum(m.infilepath);
                    string dir   = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }); //C:\, но C:\Some_Path
                    for (int i = 1; i <= 20; i++)
                    {
                        friendfile = dir + "\\VTS_" + title + "_" + i.ToString() + ".VOB";
                        if (File.Exists(friendfile))
                        {
                            fileslist.Add(friendfile);
                        }
                    }

                    //Если каким-то чудесным образом ни одного файла не нашлось
                    if (fileslist.Count == 0)
                    {
                        fileslist.Add(m.infilepath);
                    }
                }
                else
                {
                    fileslist.Add(m.infilepath);
                }
            }
            else
            {
                fileslist.Add(m.infilepath);
                char[] chars = Path.GetFileNameWithoutExtension(m.infilepath).ToCharArray();
                int    pos   = 0;
                foreach (char c in chars)
                {
                    pos += 1;
                    string cstring = c.ToString();
                    if (cstring == "1")
                    {
                        string dir       = Path.GetDirectoryName(m.infilepath).TrimEnd(new char[] { '\\' }) + "\\"; //Так надо
                        string file_name = Path.GetFileNameWithoutExtension(m.infilepath);
                        string ext       = Path.GetExtension(m.infilepath);
                        for (int i = 2; i <= 9; i++)
                        {
                            friendfile = dir + file_name.Remove(pos - 1, 1).Insert(pos - 1, i.ToString()) + ext;
                            if (File.Exists(friendfile))
                            {
                                fileslist.Add(friendfile);
                            }
                        }
                    }
                }
            }

            //забиваем все найденные файлы
            m.infileslist = Calculate.ConvertArrayListToStringArray(fileslist);

            //диалог выбора файлов если их больше одного
            if (fileslist.Count > 1)
            {
                FilesListWindow f = new FilesListWindow(m);
                if (f.m != null)
                {
                    m = f.m.Clone();
                }
                else
                {
                    m = null;
                }
            }

            return(m);
        }