mirror of
				https://github.com/Kareadita/Kavita.git
				synced 2025-11-03 19:17:05 -05:00 
			
		
		
		
	Fix Backups (#750)
* Fixed an issue where backups were failing due to files being in config directory * Changed up the exception messages to be more clear when a unique constraint fails on adding a new series. * Added the actual index that is causing the conflict.
This commit is contained in:
		
							parent
							
								
									a24ca2b46b
								
							
						
					
					
						commit
						ae5c6594e4
					
				@ -22,6 +22,7 @@ namespace API.Services
 | 
			
		||||
       public static readonly string CoverImageDirectory = Path.Join(Directory.GetCurrentDirectory(), "config", "covers");
 | 
			
		||||
       public static readonly string BackupDirectory = Path.Join(Directory.GetCurrentDirectory(), "config", "backups");
 | 
			
		||||
       public static readonly string StatsDirectory = Path.Join(Directory.GetCurrentDirectory(), "config", "stats");
 | 
			
		||||
       public static readonly string ConfigDirectory = Path.Join(Directory.GetCurrentDirectory(), "config");
 | 
			
		||||
 | 
			
		||||
       public DirectoryService(ILogger<DirectoryService> logger)
 | 
			
		||||
       {
 | 
			
		||||
 | 
			
		||||
@ -89,7 +89,7 @@ namespace API.Services.Tasks
 | 
			
		||||
            _logger.LogDebug("Backing up to {BackupDirectory}", backupDirectory);
 | 
			
		||||
            if (!DirectoryService.ExistOrCreate(backupDirectory))
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError("Could not write to {BackupDirectory}; aborting backup", backupDirectory);
 | 
			
		||||
                _logger.LogCritical("Could not write to {BackupDirectory}; aborting backup", backupDirectory);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -107,7 +107,7 @@ namespace API.Services.Tasks
 | 
			
		||||
            DirectoryService.ClearDirectory(tempDirectory);
 | 
			
		||||
 | 
			
		||||
            _directoryService.CopyFilesToDirectory(
 | 
			
		||||
                _backupFiles.Select(file => Path.Join(Directory.GetCurrentDirectory(), file)).ToList(), tempDirectory);
 | 
			
		||||
                _backupFiles.Select(file => Path.Join(DirectoryService.ConfigDirectory, file)).ToList(), tempDirectory);
 | 
			
		||||
 | 
			
		||||
            await CopyCoverImagesToBackupDirectory(tempDirectory);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -359,9 +359,9 @@ namespace API.Services.Tasks
 | 
			
		||||
              // Key is normalized already
 | 
			
		||||
              Series existingSeries;
 | 
			
		||||
              try
 | 
			
		||||
              {// NOTE: Maybe use .Equals() here
 | 
			
		||||
              {
 | 
			
		||||
                  existingSeries = allSeries.SingleOrDefault(s =>
 | 
			
		||||
                      (s.NormalizedName == key.NormalizedName || Parser.Parser.Normalize(s.OriginalName) == key.NormalizedName)
 | 
			
		||||
                      (s.NormalizedName.Equals(key.NormalizedName) || Parser.Parser.Normalize(s.OriginalName).Equals(key.NormalizedName))
 | 
			
		||||
                      && (s.Format == key.Format || s.Format == MangaFormat.Unknown));
 | 
			
		||||
              }
 | 
			
		||||
              catch (Exception e)
 | 
			
		||||
@ -393,31 +393,24 @@ namespace API.Services.Tasks
 | 
			
		||||
                  series.Pages = series.Volumes.Sum(v => v.Pages);
 | 
			
		||||
                  series.LibraryId = library.Id; // We have to manually set this since we aren't adding the series to the Library's series.
 | 
			
		||||
                  _unitOfWork.SeriesRepository.Attach(series);
 | 
			
		||||
                  if (await _unitOfWork.CommitAsync())
 | 
			
		||||
                  {
 | 
			
		||||
                  await _unitOfWork.CommitAsync();
 | 
			
		||||
                  _logger.LogInformation(
 | 
			
		||||
                      "[ScannerService] Added {NewSeries} series in {ElapsedScanTime} milliseconds for {LibraryName}",
 | 
			
		||||
                      newSeries.Count, stopwatch.ElapsedMilliseconds, library.Name);
 | 
			
		||||
 | 
			
		||||
                  // Inform UI of new series added
 | 
			
		||||
                  await _messageHub.Clients.All.SendAsync(SignalREvents.SeriesAdded, MessageFactory.SeriesAddedEvent(series.Id, series.Name, library.Id));
 | 
			
		||||
                      var progress =  Math.Max(0F, Math.Min(100F, i * 1F / newSeries.Count));
 | 
			
		||||
                      await _messageHub.Clients.All.SendAsync(SignalREvents.ScanLibraryProgress,
 | 
			
		||||
                          MessageFactory.ScanLibraryProgressEvent(library.Id, progress));
 | 
			
		||||
                  }
 | 
			
		||||
                  else
 | 
			
		||||
                  {
 | 
			
		||||
                      // This is probably not needed. Better to catch the exception.
 | 
			
		||||
                      _logger.LogCritical(
 | 
			
		||||
                          "[ScannerService] There was a critical error that resulted in a failed scan. Please check logs and rescan");
 | 
			
		||||
                  }
 | 
			
		||||
 | 
			
		||||
                  i++;
 | 
			
		||||
              }
 | 
			
		||||
              catch (Exception ex)
 | 
			
		||||
              {
 | 
			
		||||
                  _logger.LogError(ex, "[ScannerService] There was an exception updating volumes for {SeriesName}", series.Name);
 | 
			
		||||
                  _logger.LogCritical(ex, "[ScannerService] There was a critical exception adding new series entry for {SeriesName} with a duplicate index key: {IndexKey}",
 | 
			
		||||
                      series.Name, $"{series.Name}_{series.NormalizedName}_{series.LocalizedName}_{series.LibraryId}_{series.Format}");
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              var progress =  Math.Max(0F, Math.Min(100F, i * 1F / newSeries.Count));
 | 
			
		||||
              await _messageHub.Clients.All.SendAsync(SignalREvents.ScanLibraryProgress,
 | 
			
		||||
                  MessageFactory.ScanLibraryProgressEvent(library.Id, progress));
 | 
			
		||||
              i++;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          _logger.LogInformation(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user