public static async Task <Dictionary <string, List <MyFileInfo> > > GetDuplicateAvFile() { var ignore = SettingService.GetSetting().Result.CannotMergeFileTag; Dictionary <string, List <MyFileInfo> > ret = new(); var files = await GetAllLocalMyFile(); foreach (var file in files) { var nameArray = file.Name.Split('-'); if (nameArray.Length >= 3 && !file.Name.Contains(ignore)) { var key = nameArray[0] + "-" + nameArray[1]; if (ret.ContainsKey(key)) { ret[key].Add(file); } else { ret.Add(key, new List <MyFileInfo> { file }); } } } return(ret.Where(x => x.Value.Count > 1).ToDictionary(x => x.Key, x => x.Value)); }
public async static void SendBarkNotice(string barkId, string content) { var setting = await SettingService.GetSetting(); using (HttpClient client = new()) { await client.GetAsync($"{setting.BarkSite}/{barkId}/{content}"); } }
public async static Task RefreshOneOneFiveFinFilesCache() { NoticeService.SendBarkNotice(SettingService.GetSetting().Result.BarkId, $"开始更新115文件缓存"); var startTime = DateTime.Now; var ret = await Get115AllFilesModel(OneOneFiveFolder.Fin, OneOneFiveSearchType.Video); RedisService.DeleteHash("115", "allfiles"); RedisService.SetHash("115", "allfiles", JsonConvert.SerializeObject(ret)); NoticeService.SendBarkNotice(SettingService.GetSetting().Result.BarkId, $"更新115文件缓存结束,更新了 {ret.Count} 条,耗时 {(DateTime.Now - startTime).TotalSeconds} 秒"); }
public async static Task <List <FileInfo> > GetAllLocalFile() { List <FileInfo> ret = new(); var searchFolder = await SettingService.GetSetting(); var drives = Environment.GetLogicalDrives(); foreach (var drive in drives) { foreach (var folder in searchFolder.LocalSearchFolder.Split(',')) { if (Directory.Exists(drive + folder)) { ret.AddRange(new DirectoryInfo(drive + folder).GetFiles().ToList()); } } } return(ret); }
//获取JavLibraryCookie public async static Task <(CookieContainer, string)> GetJavLibraryCookie() { string userAgent = ""; CookieContainer ret = null; var mode = SettingService.GetSetting().Result.JavLibrarySettings.CookieMode; if (mode == JavLibraryGetCookieMode.MockBroswer) { //TODO 如果有需要JavLibraryCookie的接口调用失败(认为Cookie失效)则删除数据库中Cookie记录,走False分支 if (new JavLibraryDAL().GetJavLibraryCookie().Result != null) { var res = await GetJavChromeCookieFromDB(); if (res.cc != null && !string.IsNullOrEmpty(res.userAgent)) { ret = res.cc; userAgent = res.userAgent; } } else { var res = await GetJavCookieChromeProcess(); if (res.cc != null && !string.IsNullOrEmpty(res.userAgent)) { ret = res.cc; userAgent = res.userAgent; } } } if (mode == JavLibraryGetCookieMode.Easy) { ret = new CookieContainer(); userAgent = DefaultUserAgent; } return(new (ret, userAgent)); }
public static async Task RemoveFolder(string folder, IProgress <string> progress) { if (!string.IsNullOrEmpty(folder) && Directory.Exists(folder)) { Dictionary <string, string> remainSize = new Dictionary <string, string>(); Dictionary <string, int> moveRecord = new Dictionary <string, int>(); var moveSubFolder = @"\movefiles\"; var moveFolder = folder + moveSubFolder; if (!Directory.Exists(moveFolder)) { Directory.CreateDirectory(moveFolder); } progress.Report($"初始化移动到的文件夹为 -> {moveFolder}"); var setting = await SettingService.GetSetting(); var exclude = setting.ExcludeFolder + "," + moveSubFolder; var filters = setting.AvNameFilter.Split(',').ToList(); int limitSize = 200; List <FileInfo> fis = new List <FileInfo>(); var status = FileUtility.GetFilesRecursive(folder, exclude, filters, FileUtility.VideoExtensions, fis, limitSize); if (string.IsNullOrEmpty(status)) { progress.Report($"一共获取了 {fis.Count} 个 大于等于 {limitSize}MB 的文件"); } else { progress.Report($"获取文件异常 {status}"); } foreach (var fi in fis) { var n = fi.Name.Replace(fi.Extension, ""); var e = fi.Extension; progress.Report($"开始处理 {fi.FullName}, 文件名 {n} 扩展名 {e}"); if (fi.Name.Contains("-5" + fi.Extension) && fi.Length < 1 * 1024 * 1024 * 1024) { progress.Report("\t删除dummy文件"); continue; } if (moveRecord.ContainsKey(fi.Name)) { moveRecord[fi.Name]++; progress.Report($"\t存在移动记录,添加后缀 {moveRecord[fi.Name]}"); } else { moveRecord.Add(fi.Name, 1); } if (File.Exists(moveFolder + n + e)) { var oldN = n; n += "_" + moveRecord[fi.Name]; progress.Report($"\t存在重名文件,修改文件名 {(n + "_" + moveRecord[fi.Name])}"); if (moveRecord[fi.Name] == 2) { File.Move(moveFolder + oldN + e, moveFolder + oldN + "_1" + e); } } progress.Report($"\t移动文件 >= {fi.FullName} 到 => {moveFolder + n + e}"); File.Move(fi.FullName, moveFolder + n + e); } progress.Report("开始计算剩余各子文件夹大小"); var subFolders = Directory.GetDirectories(folder); foreach (var sub in subFolders) { if (!exclude.Contains(Path.GetFileName(sub), StringComparison.OrdinalIgnoreCase)) { List <FileInfo> tempFi = new(); string tempStatus = FileUtility.GetFilesRecursive(sub, exclude, filters, FileUtility.VideoExtensions + ";!qB", tempFi); double tempSize = 0D; if (string.IsNullOrEmpty(tempStatus)) { foreach (var fi in tempFi) { tempSize += fi.Length; } remainSize.Add(sub, FileUtility.GetAutoSizeString(tempSize, 1)); if (tempSize >= 500 * 1024 * 1024) { progress.Report($"\t =============={sub} 的大小为 {FileUtility.GetAutoSizeString(tempSize, 1)}=============="); } else { progress.Report($"\t {sub} 的大小为 {FileUtility.GetAutoSizeString(tempSize, 1)}"); } } } } } }
public static async Task <(string name, List <AvModel> av)> GetPossibleAvNameAndInfo(string fileName) { (string name, List <AvModel> av)ret = new(); var imgFolder = SettingService.GetSetting().Result.JavLibraryImageFolder; string name = ""; var fi = new FileInfo(fileName); var allPrefix = new SettingsDAL().GetPrefix().Result.OrderByDescending(x => x.Length).ToList(); var fileNameWithoutFormat = fi.Name.Replace(fi.Extension, ""); foreach (var prefix in allPrefix) { if (fileNameWithoutFormat.Contains(prefix, StringComparison.OrdinalIgnoreCase)) { var pattern = prefix + "{1}-?\\d{1,5}"; var possibleId = Regex.Match(fileNameWithoutFormat, pattern, RegexOptions.IgnoreCase).Value; if (possibleId.Contains("-")) { name = possibleId; } else { bool isFirst = true; StringBuilder sb = new StringBuilder(); foreach (var c in possibleId) { if (c >= '0' && c <= '9') { if (isFirst) { sb.Append("-"); isFirst = false; } } sb.Append(c); } name = sb.ToString(); } break; } } ret.name = name.ToUpper(); if (!string.IsNullOrWhiteSpace(name)) { var avs = await new JavLibraryDAL().GetAvModelByWhere($" AND AvId='{name}'"); if (avs != null && avs.Any()) { //foreach (var av in avs) //{ // av.PicUrl = "file://" + (imgFolder + av.AvId + "-" + av.Name + ".jpg").Replace("\\", "/"); //} ret.av = avs; } else { ret.av = new List <AvModel>(); } } else { ret.av = new List <AvModel>(); } return(ret); }