예제 #1
0
        private bool ChangeFileDateToLocalAirDate(string filePath, string fileDate, string fileTime)
        {
            DateTime airDate;

            if (DateTime.TryParse(fileDate + ' ' + fileTime, out airDate))
            {
                // avoiding false +ve checks and set date skewing by not using UTC (Windows)
                DateTime oldDateTime = _diskProvider.FileGetLastWriteUtc(filePath);

                if (!DateTime.Equals(airDate, oldDateTime))
                {
                    try
                    {
                        _diskProvider.FileSetLastWriteTime(filePath, airDate);
                        _logger.Debug("Date of file [{0}] changed from '{1}' to '{2}'", filePath, oldDateTime, airDate);

                        return(true);
                    }

                    catch (Exception ex)
                    {
                        _logger.WarnException("Unable to set date of file [" + filePath + "]", ex);
                    }
                }
            }

            else
            {
                _logger.Debug("Could not create valid date to change file [{0}]", filePath);
            }

            return(false);
        }
예제 #2
0
        public void Cleanup()
        {
            if (String.IsNullOrWhiteSpace(_configService.RecycleBin))
            {
                logger.Info("Recycle Bin has not been configured, cannot cleanup.");
                return;
            }

            logger.Info("Removing items older than 7 days from the recycling bin");

            foreach (var folder in _diskProvider.GetDirectories(_configService.RecycleBin))
            {
                if (_diskProvider.FolderGetLastWrite(folder).AddDays(7) > DateTime.UtcNow)
                {
                    logger.Debug("Folder hasn't expired yet, skipping: {0}", folder);
                    continue;
                }

                _diskProvider.DeleteFolder(folder, true);
            }

            foreach (var file in _diskProvider.GetFiles(_configService.RecycleBin, SearchOption.TopDirectoryOnly))
            {
                if (_diskProvider.FileGetLastWriteUtc(file).AddDays(7) > DateTime.UtcNow)
                {
                    logger.Debug("File hasn't expired yet, skipping: {0}", file);
                    continue;
                }

                _diskProvider.DeleteFile(file);
            }

            logger.Debug("Recycling Bin has been cleaned up.");
        }
예제 #3
0
        public bool IsSatisfiedBy(LocalEpisode localEpisode)
        {
            if (localEpisode.ExistingFile)
            {
                _logger.Debug("{0} is in series folder, unpacking check", localEpisode.Path);
                return(true);
            }

            foreach (var workingFolder in _configService.DownloadClientWorkingFolders.Split('|'))
            {
                DirectoryInfo parent = Directory.GetParent(localEpisode.Path);
                while (parent != null)
                {
                    if (parent.Name.StartsWith(workingFolder))
                    {
                        if (OsInfo.IsMono)
                        {
                            _logger.Debug("{0} is still being unpacked", localEpisode.Path);
                            return(false);
                        }

                        if (_diskProvider.FileGetLastWriteUtc(localEpisode.Path) > DateTime.UtcNow.AddMinutes(-5))
                        {
                            _logger.Debug("{0} appears to be unpacking still", localEpisode.Path);
                            return(false);
                        }
                    }

                    parent = parent.Parent;
                }
            }

            return(true);
        }
예제 #4
0
        public List <Backup> GetBackups()
        {
            var backups = new List <Backup>();

            foreach (var backupType in Enum.GetValues(typeof(BackupType)).Cast <BackupType>())
            {
                var folder = GetBackupFolder(backupType);

                if (_diskProvider.FolderExists(folder))
                {
                    backups.AddRange(GetBackupFiles(folder).Select(b => new Backup
                    {
                        Path = Path.GetFileName(b),
                        Type = backupType,
                        Time = _diskProvider.FileGetLastWriteUtc(b)
                    }));
                }
            }

            return(backups);
        }
예제 #5
0
        public void ConvertToLocalUrls(int seriesId, IEnumerable <MediaCover> covers)
        {
            foreach (var mediaCover in covers)
            {
                var filePath = GetCoverPath(seriesId, mediaCover.CoverType);

                mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/" + seriesId + "/" + mediaCover.CoverType.ToString().ToLower() + ".jpg";

                if (_diskProvider.FileExists(filePath))
                {
                    var lastWrite = _diskProvider.FileGetLastWriteUtc(filePath);
                    mediaCover.Url += "?lastWrite=" + lastWrite.Ticks;
                }
            }
        }
예제 #6
0
        private List <LogFileResource> GetLogFiles()
        {
            var result = new List <LogFileResource>();

            var files = _diskProvider.GetFiles(_appFolderInfo.GetLogFolder(), SearchOption.TopDirectoryOnly);

            for (int i = 0; i < files.Length; i++)
            {
                var file = files[i];

                result.Add(new LogFileResource
                {
                    Id            = i + 1,
                    Filename      = Path.GetFileName(file),
                    LastWriteTime = _diskProvider.FileGetLastWriteUtc(file)
                });
            }

            return(result.OrderByDescending(l => l.LastWriteTime).ToList());
        }
예제 #7
0
        private List <LogFileResource> GetLogFilesResponse()
        {
            var result = new List <LogFileResource>();

            var files = GetLogFiles().ToList();

            for (int i = 0; i < files.Count; i++)
            {
                var file     = files[i];
                var filename = Path.GetFileName(file);

                result.Add(new LogFileResource
                {
                    Id            = i + 1,
                    Filename      = filename,
                    LastWriteTime = _diskProvider.FileGetLastWriteUtc(file),
                    ContentsUrl   = String.Format("{0}/api/{1}/{2}", _configFileProvider.UrlBase, Resource, filename),
                    DownloadUrl   = String.Format("{0}/{1}/{2}", _configFileProvider.UrlBase, DownloadUrlRoot, filename)
                });
            }

            return(result.OrderByDescending(l => l.LastWriteTime).ToList());
        }