public static Photos GetPhotos(SessionToken token, PhotoDirectory obj) { PhotoDB odb = new PhotoDB(token.DBConnection); Photos photos = odb.GetPhotos(token, obj); Photos photos2 = (Photos)photos.Clone(); FileInfo[] files = new DirectoryInfo(token.MapPath(obj.FullVirtualPath)).GetFiles("*.*"); if (photos.Count != files.Length) { foreach (FileInfo info2 in files) { string fullVirtualPath = GetVirtualPath(token, info2.FullName); if (!photos.Contains(fullVirtualPath)) { string virtualPath = fullVirtualPath.Substring(0, (fullVirtualPath.Length - info2.Name.Length) - 1); DateTime dateTaken = DateTime.MinValue; try { using (Image image = Image.FromFile(info2.FullName)) { try { dateTaken = ParseExifDateTime(image.GetPropertyItem(0x9003).Value); } catch (ArgumentException) { } } Photo photo = new Photo(token, info2.Name, virtualPath, dateTaken, info2.Length); odb.Insert(obj, photo); photos.Add(photo); } catch { } } photos2.Remove(fullVirtualPath); } foreach (Photo photo in photos2) { ThumbnailUtilities.DeleteThumbnail(token.MapPath(photo.FullThumbnailVirtualPath)); odb.Delete(photo); photos.Remove(photo); } } return(photos); }
public static PhotoDirectories GetDirectorie(PhotoDirectory parent, SessionToken token, string path) { PhotoDirectoryDB ydb = new PhotoDirectoryDB(token.DBConnection); if (!Directory.Exists(path)) { path = path.Substring(token.PhotosRootFullPath.Length, path.Length - token.PhotosRootFullPath.Length); string name = path.Substring(path.LastIndexOf(Path.DirectorySeparatorChar) + 1); string virtualPath = path.Substring(0, path.LastIndexOf(Path.DirectorySeparatorChar)); ydb.Delete(name, virtualPath); return(new PhotoDirectories()); } PhotoDirectories directories = ydb.GetDirectorie(token, "", parent.Name); PhotoDirectories directories2 = (PhotoDirectories)directories.Clone(); DirectoryInfo[] infoArray = new DirectoryInfo(path).GetDirectories(); return(directories); }
public static PhotoDirectories GetDirectories(PhotoDirectory parent, SessionToken token, string path) { string virtualPath; PhotoDirectoryDB ydb = new PhotoDirectoryDB(token.DBConnection); if (!Directory.Exists(path)) { path = path.Substring(token.PhotosRootFullPath.Length, path.Length - token.PhotosRootFullPath.Length); string name = path.Substring(path.LastIndexOf(Path.DirectorySeparatorChar) + 1); virtualPath = path.Substring(0, path.LastIndexOf(Path.DirectorySeparatorChar)); ydb.Delete(name, virtualPath); return(new PhotoDirectories()); } PhotoDirectories directories = ydb.GetDirectories(token, GetVirtualPath(token, path)); PhotoDirectories directories2 = (PhotoDirectories)directories.Clone(); DirectoryInfo[] infoArray = new DirectoryInfo(path).GetDirectories(); if (directories2.Count != infoArray.Length) { foreach (DirectoryInfo info2 in infoArray) { if (!info2.Name.Equals(ThumbnailUtilities.ThumbnailDirectory)) { virtualPath = GetVirtualPath(token, info2.FullName); if (!directories.Contains(virtualPath)) { string text3 = virtualPath.Substring(0, (virtualPath.Length - info2.Name.Length) - 1); PhotoDirectory photoDirectory = new PhotoDirectory(token, info2.Name, text3); ydb.Insert(parent, photoDirectory); directories.Add(photoDirectory); } directories2.Remove(virtualPath); } } foreach (PhotoDirectory directory in directories2) { ydb.Delete(directory); new PhotoDB(token.DBConnection).DeleteDirectoryPhotos(directory); directories.Remove(directory); } } return(directories); }
/// <summary> /// Returns the details of the photos contained within a directory. /// </summary> /// <param name="token">A reference to the current session token object.</param> /// <param name="obj">The directory whos photos we want to retrieve.</param> /// <returns>A collection of Photo objects.</returns> public static Photos GetPhotos(SessionToken token, PhotoDirectory obj) { PhotoDB db = new PhotoDB(token.DBConnection); Photos results = db.GetPhotos(token, obj); Photos originalResults = (Photos)results.Clone(); // Get a list of directories from the root path from the file system DirectoryInfo dirInfo = new DirectoryInfo(token.MapPath(obj.FullVirtualPath)); FileInfo[] fileInfos = dirInfo.GetFiles("*.jpg"); // Only need to update the database if the number of files in the database are // different to those on the file system. // TODO: Currently won't detect changes in file names. Ideas to enable this // and still be fast? if (results.Count != fileInfos.Length) { foreach (FileInfo file in fileInfos) { string virtualPath = GetVirtualPath(token, file.FullName); // Do we have a Photo for this directory already? If not then we need to // add it to the database if (!results.Contains(virtualPath)) { string dirVirtualPath = virtualPath.Substring(0, virtualPath.Length - file.Name.Length - 1); DateTime dateTaken = DateTime.MinValue; using (Image image = Image.FromFile(file.FullName)) { try { PropertyItem date = image.GetPropertyItem((int)KnownEXIFIDCodes.DateTimeOriginal); dateTaken = ParseExifDateTime(date.Value); } catch (ArgumentException) { // image does not have a date value } } Photo photo = new Photo(token, file.Name, dirVirtualPath, dateTaken, file.Length); // insert this fire into the database db.Insert(obj, photo); results.Add(photo); } originalResults.Remove(virtualPath); } // Are there any Photo objects in the original result set that aren't in // the list of files from the file system? If so, delete 'em foreach (Photo photo in originalResults) { // Delete the associated thumbnail ThumbnailUtilities.DeleteThumbnail(token.MapPath(photo.FullThumbnailVirtualPath)); db.Delete(photo); results.Remove(photo); } } return(results); }
/// <summary> /// Returns the details of the sub-directories contained within a given path. /// </summary> /// <param name="parent">The parent directory, or null it at the root.</param> /// <param name="token">A reference to the current directory browser session token object.</param> /// <param name="path">The physical path of the directory in question.</param> /// <returns>A collection of PhotoDirectory objects.</returns> public static PhotoDirectories GetDirectories(PhotoDirectory parent, SessionToken token, string path) { PhotoDirectoryDB db = new PhotoDirectoryDB(token.DBConnection); // If the directory doesn't exist then a directory must have been deleted if (!Directory.Exists(path)) { // extract out the name and virtual path from the full physical path path = path.Substring(token.PhotosRootFullPath.Length, path.Length - token.PhotosRootFullPath.Length); string name = path.Substring(path.LastIndexOf(Path.DirectorySeparatorChar) + 1); string virtualPath = path.Substring(0, path.LastIndexOf(Path.DirectorySeparatorChar)); db.Delete(name, virtualPath); return(new PhotoDirectories()); } else { // Get a list of directories from the database PhotoDirectories results = db.GetDirectories(token, GetVirtualPath(token, path)); PhotoDirectories originalResults = (PhotoDirectories)results.Clone(); // Get a list of directories from the root path from the file system DirectoryInfo dirInfo = new DirectoryInfo(path); DirectoryInfo[] dirInfos = dirInfo.GetDirectories(); // Only need to update the database if the number of directories in the database are // different to those on the file system. // TODO: Currently won't detect changes in directory names. Ideas to enable this // as still be fast? if (originalResults.Count != dirInfos.Length) { foreach (DirectoryInfo dir in dirInfos) { // Ignore thumbnail directories if (!dir.Name.Equals(ThumbnailUtilities.ThumbnailDirectory)) { string virtualPath = GetVirtualPath(token, dir.FullName); // Do we have a PhotoDirectory for this directory already? If not then we need to // add it to the database if (!results.Contains(virtualPath)) { string parentVirtualPath = virtualPath.Substring(0, virtualPath.Length - dir.Name.Length - 1); PhotoDirectory photoDirectory = new PhotoDirectory(token, dir.Name, parentVirtualPath); // insert this directory into the database db.Insert(parent, photoDirectory); results.Add(photoDirectory); } originalResults.Remove(virtualPath); } } // Are there any PhotoDirectory objects in the original result set that aren't in // the list of directories from the file system? If so, delete 'em foreach (PhotoDirectory photoDirectory in originalResults) { db.Delete(photoDirectory); PhotoDB photoDB = new PhotoDB(token.DBConnection); photoDB.DeleteDirectoryPhotos(photoDirectory); results.Remove(photoDirectory); } } return(results); } }