private void ProcessFolder(DriveService driveService, string folderPath)
            {
                try
                {
                  Log.Information("CleanupFileWatcher attempting to process folder " + folderPath);

                  string fileId = System.IO.Path.GetFileName(folderPath);
                  FileInfo fileInfo = null;

                  try
                  {
                fileInfo = driveService.GetFile(fileId);
                  }
                  catch (Exception exception)
                  {
                Log.Error(exception, false, false);
                  }

                  if (fileInfo != null)
                  {
                DriveService.Stream stream = null;

                if (IsStreamLocked(fileInfo.Id, fileInfo.FilePath, ref stream))
                {
                  Log.Warning("Stream " + fileId + " is locked (type=" + stream.Type + ")");
                }
                else if (IsFileLocked(fileInfo.Id, fileInfo.FilePath))
                {
                  Log.Warning("File " + fileId + " is locked");
                }
                else if (!CanOpenFile(fileInfo.FilePath, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite, 1))
                {
                  Log.Warning("File " + fileInfo.FilePath + " is being used by another application.");
                }
                else if (!HasFileOnDiskTimedout(fileInfo.FilePath))
                {
                  Log.Warning("File " + fileId + " has not timed out on disk");
                }
                else
                {
                  FileInfoStatus fileInfoStatus = GetFileInfoStatus(fileInfo);

                  if (fileInfoStatus == FileInfoStatus.ModifiedOnDisk)
                  {
                Log.Information("Attempting to upload file " + fileId);

                var uploadStream = new DriveService.UploadStream();

                uploadStream.OnProgressStarted += uploadStream_ProgressStarted;
                uploadStream.OnProgressChanged += uploadStream_ProgressChanged;
                uploadStream.OnProgressFinished += uploadStream_ProgressFinished;

                uploadStream.Init(fileInfo, null);

                driveService.UploadFile(uploadStream);
                  }
                  else
                  {
                Log.Information("Attempting to clean-up file " + fileId);

                driveService.CleanupFile(fileInfo, fileInfoStatus, false);
                  }
                }
                  }
                  else
                  {
                Log.Information("Attempting to clean-up directory " + folderPath + ": File was not found in google drive");

                System.IO.Directory.Delete(folderPath, true);
                  }
                }
                catch (Exception exception)
                {
                  Log.Error(exception, false);
                }
            }
Exemplo n.º 2
0
            private void ProcessFolder(DriveService driveService, string folderPath)
            {
                try
                {
                    Log.Information("CleanupFileWatcher attempting to process folder " + folderPath);

                    string   fileId   = System.IO.Path.GetFileName(folderPath);
                    FileInfo fileInfo = null;

                    try
                    {
                        fileInfo = driveService.GetFile(fileId);
                    }
                    catch (Exception exception)
                    {
                        Log.Error(exception, false, false);
                    }

                    if (fileInfo != null)
                    {
                        DriveService.Stream stream = null;

                        if (IsStreamLocked(fileInfo.Id, fileInfo.FilePath, ref stream))
                        {
                            Log.Warning("Stream " + fileId + " is locked (type=" + stream.Type + ")");
                        }
                        else if (IsFileLocked(fileInfo.Id, fileInfo.FilePath))
                        {
                            Log.Warning("File " + fileId + " is locked");
                        }
                        else if (!CanOpenFile(fileInfo.FilePath, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite, 1))
                        {
                            Log.Warning("File " + fileInfo.FilePath + " is being used by another application.");
                        }
                        else if (!HasFileOnDiskTimedout(fileInfo.FilePath))
                        {
                            Log.Warning("File " + fileId + " has not timed out on disk");
                        }
                        else
                        {
                            FileInfoStatus fileInfoStatus = GetFileInfoStatus(fileInfo);

                            if (fileInfoStatus == FileInfoStatus.ModifiedOnDisk)
                            {
                                Log.Information("Attempting to upload file " + fileId);

                                var uploadStream = new DriveService.UploadStream();

                                uploadStream.OnProgressStarted  += uploadStream_ProgressStarted;
                                uploadStream.OnProgressChanged  += uploadStream_ProgressChanged;
                                uploadStream.OnProgressFinished += uploadStream_ProgressFinished;

                                uploadStream.Init(fileInfo, null);

                                driveService.UploadFile(uploadStream);
                            }
                            else
                            {
                                Log.Information("Attempting to clean-up file " + fileId);

                                driveService.CleanupFile(fileInfo, fileInfoStatus, false);
                            }
                        }
                    }
                    else
                    {
                        Log.Information("Attempting to clean-up directory " + folderPath + ": File was not found in google drive");

                        System.IO.Directory.Delete(folderPath, true);
                    }
                }
                catch (Exception exception)
                {
                    Log.Error(exception, false);
                }
            }