示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
            }
        }