コード例 #1
0
        public static void ScanLibrary()
        {
            List <Comic> comicsToAddToDb = new List <Comic>();

            foreach (string comicPath in Directory.GetDirectories(LIBRARY_PATH))
            {
                Comic comic = new Comic(comicPath);

                // search db.bin
                string[] dbFiles = Directory.GetFiles(comicPath, "db.bin");
                if (dbFiles.Length > 0)
                {
                    if (dbFiles.Length > 1)
                    {
                        Console.Error.WriteLine("Found conflicting db.bin files in directory " + comicPath);
                    }
                    else
                    {
                        // read comic info from db.bin
                        comic.ComicInfo = ComicInfo.FromBinary(Path.Combine(comicPath, "db.bin"));

                        // safety check for comic id
                        if (comic.ComicInfo.Id == 0)
                        {
                            Console.WriteLine("Broken id for comic '" + comic.ComicInfo.Title + "'");
                        }

                        // add comic to comics dictionary
                        if (comics.ContainsKey(comic.ComicInfo.Id))
                        {
                            Console.Error.WriteLine("Multiple comics with the same id exist. Offender: '" + comic.ComicInfo.Title + "' ");
                            continue;
                        }

                        comics.Add(comic.ComicInfo.Id, comic);
                    }
                }
                else
                {
                    comicsToAddToDb.Add(comic);
                }
            }

            // add db.bin for comics without it
            uint highestId = comics.Count > 0 ? comics.Aggregate((x, y) => x.Key > y.Key ? x : y).Key : 0; // gets the highest existing key

            foreach (Comic comic in comicsToAddToDb)
            {
                highestId++;
                ComicInfo ci = new ComicInfo()
                {
                    Id    = highestId,
                    Title = Path.GetFileName(comic.ComicDirectory)
                };

                comic.ComicInfo = ci;

                comics.Add(comic.ComicInfo.Id, comic);

                // Save ComicInfo
                ci.ToBinaryFile(Path.Combine(comic.ComicDirectory, "db.bin"));
            }
        }