public ImgListItem FindMd5(ImgListItem item) { foreach (var li in list) if (item == li) return li; return null; }
public bool ExistsMd5(ImgListItem item) { foreach (var li in list) if (item == li) return true; return false; }
public void RemoveItemAndSimilar(ImgListItem item) { int i, j; for (i = 0; i < Count; i++) if (this[i] == item) break; if (i == Count) return; list.RemoveAt(i); for (j = i; j < Count; j++) if (this[j] == item) list.RemoveAt(j); else break; }
public void AddUnsorted(ImgListItem item) { list.Add(item); }
public void Add(ImgListItem item) { AddUnsorted(item); list.Sort(CompareImgListItemsMd5Name); }
public void AddUnique(ImgListItem item) { if (!ExistsMd5(item)) Add(item); }
private void CheckRenamedFiles() { ImgListItem newItem, oldItem; string[] files; files = sio.Directory.GetFiles(extractDir, "*.png", sio.SearchOption.AllDirectories); foreach (var file in files) { newItem = new ImgListItem(file); if (rList.ExistsMd5(newItem)) { oldItem = rList.FindMd5(newItem); newItem.CopyValues(oldItem); newItem.pngAlias = file.Remove(0, extractDir.Length); if (newItem.pngAlias.Length == oldItem.pngAlias.Length) if (newItem.pngAlias.ToLower() == oldItem.pngAlias.ToLower()) continue; if (sio.File.Exists(extractDir + oldItem.pngAlias)) sio.File.Delete(extractDir + newItem.pngAlias); else { Console.WriteLine("File '{0}' was renamed to '{1}'", oldItem.pngAlias, newItem.pngAlias); rList.UpdateItemAndSimilar(newItem); } } } }
private void ExtractImg(string parentDir) { string[] files; string[] dirs; ImgListItem item; RawImgClass img; RawImgTypes type; img = null; files = sio.Directory.GetFiles(parentDir, "*.tmx"); if (files.Length > 0) Console.WriteLine("Extracting directory '{0}'", parentDir); foreach (var file in files) { switch (type = RawImgClass.GetImgType(file)) { case RawImgTypes.p3tmx: img = new TmxClass(file); break; } if (type != RawImgTypes.unknown) { item = new ImgListItem(imgDir, file, img); item.type = (int)type; if (!gList.ExistsMd5(item)) { item.pngAlias = string.Format("{0:x4}.{1}", globalCounter++, item.pngAlias); img.ToPng(extractDir + item.pngAlias); item.md5png = img.png.md5string; gList.AddUnique(item); } else { item.md5png = gList.FindMd5(item).md5png; item.pngAlias = gList.FindMd5(item).pngAlias; gList.Add(item); } } } dirs = sio.Directory.GetDirectories(parentDir); foreach (var dir in dirs) { ExtractImg(dir); } }
private void CheckChangedFiles() { ImgListItem item; string[] files; string fileName; int i; files = sio.Directory.GetFiles(extractDir, "*.png", sio.SearchOption.AllDirectories); foreach (var file in files) { item = new ImgListItem(file); if (!rList.ExistsMd5(item)) { fileName = file.Remove(0, extractDir.Length); for (i = 0; i < rList.Count; i++) if (rList[i].pngAlias.Length == fileName.Length) if (rList[i].pngAlias == fileName) { rList[i].SetMd5(item.md5string); rList[i].md5png = item.md5string; rList.UpdateItemAndSimilar(rList[i]); Console.WriteLine("File '{0}' was changed", rList[i].pngAlias); } } } }
public void CopyValues(ImgListItem item) { type = item.type; bitCount = item.bitCount; width = item.width; height = item.height; name = item.name; pngAlias = item.pngAlias; //fullName = item.fullName; SetMd5(item.md5string); md5png = item.md5string; }
private static int CompareImgListItemsMd5Name(ImgListItem a, ImgListItem b) { for (int i = 0; i < ImgListItem.hashLength; i++) if (a.md5bytes[i] > b.md5bytes[i]) return 1; else if (a.md5bytes[i] < b.md5bytes[i]) return -1; return a.fullName.CompareTo(b.fullName); }
private static int CompareImgListItemsMd5(ImgListItem a, ImgListItem b) { for (int i = 0; i < ImgListItem.hashLength; i++) if (a.md5bytes[i] > b.md5bytes[i]) return 1; else if (a.md5bytes[i] < b.md5bytes[i]) return -1; return 0; }
public void UpdateItemAndSimilar(ImgListItem item) { int i, j; for (i = 0; i < Count; i++) if (this[i] == item) break; for (j = i; j < Count; j++) if (this[j] == item) this[j].CopyValues(item); else break; }