예제 #1
0
        private void ImportMedia(XmlNode node,
                                 string borrow,
                                 string comment,
                                 long volumeID)
        {
            FileSystemVolume v         = new FileSystemVolume(targetDb);
            VolumeDriveType  driveType = driveTypeMapping[node.Attributes["type"].Value];
            DateTime         added;

            if (!DateTime.TryParseExact(node.Attributes["time"].Value, DATETIME_FORMAT,
                                        ci.DateTimeFormat, DateTimeStyles.None, out added))
            {
                added = DateTime.MinValue;
            }

            v.SetVolumeFields(volumeID,
                              node.Attributes["name"].Value,
                              added,
                              false,
                              node.Attributes["number"].Value,
                              driveType,
                              borrow,
                              DateTime.MinValue,
                              DateTime.MinValue,
                              null,
                              comment,
                              null);

            v.SetFileSystemVolumeFields(counters[TOTAL_FILES],
                                        counters[TOTAL_DIRS],
                                        counters[TOTAL_SIZE]);

            v.InsertIntoDB();

            // insert root item
            DirectoryVolumeItem item = new DirectoryVolumeItem(targetDb);

            item.SetFileSystemVolumeItemFields(null,
                                               DateTime.MinValue,
                                               VolumeDatabase.ID_NONE);

            item.SetVolumeItemFields(volumeID,
                                     1L,
                                     0L,
                                     "/",
                                     VolumeScanner.FilesystemVolumeScanner.MIME_TYPE_DIRECTORY,
                                     MetadataStore.Empty,
                                     null,
                                     null);

            item.InsertIntoDB();
        }
예제 #2
0
        private static void ImportDisk(IDataReader reader,
		                               long volumeID,
		                               VolumeDatabase db,
		                               long[] counters)
        {
            FileSystemVolume v = new FileSystemVolume(db);

            // try to guess the drivetype
            VolumeDriveType driveType;
            string root = (string)reader["root"];
            if (root.ToUpper().Contains("CDROM") || root.ToUpper().Contains("DVD"))
                driveType = VolumeDriveType.CDRom;
            else if (root.StartsWith("/media"))
                driveType = VolumeDriveType.Removable;
            else
                driveType = VolumeDriveType.Harddisk;

            v.SetVolumeFields(volumeID,
                              Util.ReplaceDBNull<string>(reader["name"], null),
                              DateTime.Now,
                              false,
                              null,
                              driveType,
                              Util.ReplaceDBNull<string>(reader["borrow"], null),
                              DateTime.MinValue,
                              DateTime.MinValue,
                              null,
                              Util.ReplaceDBNull<string>(reader["comment"], null),
                              null);

            v.SetFileSystemVolumeFields(counters[TOTAL_FILES],
                                        counters[TOTAL_DIRS],
                                        counters[TOTAL_SIZE]);

            v.InsertIntoDB();

            // insert root item
            DirectoryVolumeItem item = new DirectoryVolumeItem(db);

            item.SetFileSystemVolumeItemFields(null,
                                               DateTime.MinValue,
                                               VolumeDatabase.ID_NONE);

            item.SetVolumeItemFields(volumeID,
                                     1L,
                                     0L,
                                     "/",
                                     VolumeScanner.FilesystemVolumeScanner.MIME_TYPE_DIRECTORY,
                                     MetadataStore.Empty,
                                     null,
                                     null);

            item.InsertIntoDB();
        }
예제 #3
0
        private static void ImportDisk(IDataReader reader,
                                       long volumeID,
                                       VolumeDatabase db,
                                       long[] counters)
        {
            FileSystemVolume v = new FileSystemVolume(db);

            // try to guess the drivetype
            VolumeDriveType driveType;
            string          root = (string)reader["root"];

            if (root.ToUpper().Contains("CDROM") || root.ToUpper().Contains("DVD"))
            {
                driveType = VolumeDriveType.CDRom;
            }
            else if (root.StartsWith("/media"))
            {
                driveType = VolumeDriveType.Removable;
            }
            else
            {
                driveType = VolumeDriveType.Harddisk;
            }

            v.SetVolumeFields(volumeID,
                              Util.ReplaceDBNull <string>(reader["name"], null),
                              DateTime.Now,
                              false,
                              null,
                              driveType,
                              Util.ReplaceDBNull <string>(reader["borrow"], null),
                              DateTime.MinValue,
                              DateTime.MinValue,
                              null,
                              Util.ReplaceDBNull <string>(reader["comment"], null),
                              null);

            v.SetFileSystemVolumeFields(counters[TOTAL_FILES],
                                        counters[TOTAL_DIRS],
                                        counters[TOTAL_SIZE]);

            v.InsertIntoDB();

            // insert root item
            DirectoryVolumeItem item = new DirectoryVolumeItem(db);

            item.SetFileSystemVolumeItemFields(null,
                                               DateTime.MinValue,
                                               VolumeDatabase.ID_NONE);

            item.SetVolumeItemFields(volumeID,
                                     1L,
                                     0L,
                                     "/",
                                     VolumeScanner.FilesystemVolumeScanner.MIME_TYPE_DIRECTORY,
                                     MetadataStore.Empty,
                                     null,
                                     null);

            item.InsertIntoDB();
        }
예제 #4
0
        private long InsertDir(string rootPath,
                               DirectoryInfo dir,
                               BufferedVolumeItemWriter writer,
                               long parentID)
        {
            /* if scanner has no db associated, just update the counters
             * and return */
            if (!this.HasDB)
            {
                // TODO :
                // increase dircounter for symlink to dirs as well?
                // nautilus refers to selected symlinks to dirs as dirs too.
                Interlocked.Increment(ref VolumeInfo.directories);
                return(VolumeDatabase.ID_NONE);
            }

            string location;
            string name;

            /* if parentID is ID_NONE, the directory is the volumes root dir
             * -> location = null, name = "/" (analog System.IO.DirectoryInfo)
             */
            if (parentID == VolumeDatabase.ID_NONE)
            {
                location = null;
                name     = PATH_SEPARATOR.ToString();
            }
            else
            {
                location = GetLocation(dir.FullName, rootPath);
                name     = dir.Name;
            }

            DateTime lastWriteTime = GetLastWriteTime(dir);

            DirectoryVolumeItem item = GetNewVolumeItem <DirectoryVolumeItem>(parentID,
                                                                              name,
                                                                              MIME_TYPE_DIRECTORY,
                                                                              MetadataStore.Empty,
                                                                              VolumeItemType.DirectoryVolumeItem);

            item.SetFileSystemVolumeItemFields(location, lastWriteTime, VolumeDatabase.ID_NONE);
            //item.Name = name; // set the items name (defined on VolumeItem baseclass)

//			  if (isSymlink) {
//				  /* don't dump symlink dirs directly into the database,
//				   * they're required to have a target item assigned.
//				   * target items are resolved in an additional step.
//				   */
//				   symLinkItems.add(symLinkTarget, item);
//			  } else {
            writer.Write(item);
//			  }

            // TODO :
            // increase dircounter for symlink to dirs as well?
            // nautilus refers to selected symlinks to dirs as dirs too.
            Interlocked.Increment(ref VolumeInfo.directories);

            if (!Options.DiscardSymLinks)
            {
                symLinkHelper.AddFile(dir.FullName, item.ItemID);
            }

            return(item.ItemID);
        }