Example #1
0
        /// <summary>
        /// 上传一个srt文件
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="fileName"></param>
        /// <param name="context"></param>
        /// <param name="ismerge">是否合并弹幕</param>
        /// <returns></returns>
        public SrtFile UploadSrtFile(int userId, string fileName, byte[] context, bool ismerge = true)
        {
            var saveFile = Path.Combine("upfiles/", userId + "_" + fileName);

            File.WriteAllBytes(saveFile, context);
            var fileBattuate = new SrtManager().LoadBattuteByFile(saveFile);

            // 因为本地文件的srt与原始的不一样了,这里要做一下转换
            var jsonObj = new SrtJsonFile();

            jsonObj.Battutas = ConverSrtToSubtitles(fileBattuate);
            jsonObj.FileName = fileName;
            jsonObj.Version  = 1;

            var jsonSaveFile = Path.Combine("jsonfiles/", userId + "_" + fileName + ".json");

            File.WriteAllText(jsonSaveFile, JsonConvert.SerializeObject(jsonObj, Formatting.Indented));

            var srtItem = new SrtFile()
            {
                UserId              = userId,
                LastUpdate          = DateTime.Now,
                UploadTime          = DateTime.Now,
                SourceLocalFileName = saveFile,
                SrtFileName         = fileName,
                JsonSrtFileName     = jsonSaveFile
            };

            using (var db = DbSet.GetDb())
            {
                db.Insert(srtItem);
            }

            return(srtItem);
        }
Example #2
0
        /// <summary>
        /// 上传一个vtt文件
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="fileName"></param>
        /// <param name="context"></param>
        /// <param name="ismerge">是否合并弹幕</param>
        /// <returns></returns>
        public SrtFile UploadVttFile(int userId, string fileName, byte[] context, bool ismerge = true)
        {
            var saveFile = Path.Combine("upfiles/", userId + "_" + fileName);

            File.WriteAllBytes(saveFile, context);

            // 加载vtt文件
            var vtt = VTTHelper.GetVTTFromFile(saveFile);

            var jsonObj = new SrtJsonFile();

            if (ismerge)
            {
                vtt = VvtRebuild.Rebuild(vtt);
            }

            jsonObj.Battutas = ConverVttToSubtitles(vtt.Lines);
            jsonObj.FileName = fileName;
            jsonObj.Version  = 1;

            var jsonSaveFile = Path.Combine("jsonfiles/", userId + "_" + fileName + ".json");

            File.WriteAllText(jsonSaveFile, JsonConvert.SerializeObject(jsonObj, Formatting.Indented));

            var srtItem = new SrtFile()
            {
                UserId              = userId,
                LastUpdate          = DateTime.Now,
                UploadTime          = DateTime.Now,
                SourceLocalFileName = saveFile,
                SrtFileName         = fileName,
                JsonSrtFileName     = jsonSaveFile
            };

            using (var db = DbSet.GetDb())
            {
                db.Insert(srtItem);
            }

            return(srtItem);
        }
Example #3
0
        /// <summary>
        /// 延迟保存文件内容
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="content"></param>
        void DelaySaveFile(SrtFile srtFile, SrtJsonFile jsonObj)
        {
            lock (delaySaveFileMap)
            {
                delaySaveFileMap[srtFile.JsonSrtFileName] = jsonObj;
            }

            if (isSaveing)
            {
                return;
            }

            isSaveing = true;
            ThreadPool.QueueUserWorkItem(o =>
            {
                // 延迟1分钟后统一做一次数据保存
                Thread.Sleep(1000 * 60);    // 你没看错,我就是这么牛,这么写延迟保存

                try
                {
                    lock (delaySaveFileMap)
                    {
                        foreach (var item in delaySaveFileMap)
                        {
                            File.WriteAllText(item.Key, JsonConvert.SerializeObject(item.Value));
                            Console.WriteLine($"save file:{item.Key}");
                        }
                        delaySaveFileMap.Clear();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }

                isSaveing = false;
            });
        }