@ -18,6 +18,32 @@ class NetworkManager {
try ? FileManager . default . removeItem ( at : destinationFileUrl )
}
// f u n c h e a d e r D a t a R a n k i n g D a t a ( l a s t D a t e S t r i n g : S t r i n g , f i l e N a m e : S t r i n g ) a s y n c t h r o w s {
// l e t d a t e S t r i n g = [ " C L A S S E M E N T - P A D E L " , f i l e N a m e , l a s t D a t e S t r i n g ] . j o i n e d ( s e p a r a t o r : " - " ) + " . c s v "
//
// l e t d o c u m e n t s U r l : U R L = S o u r c e F i l e M a n a g e r . s h a r e d . r a n k i n g S o u r c e D i r e c t o r y
// l e t d e s t i n a t i o n F i l e U r l = d o c u m e n t s U r l . a p p e n d i n g P a t h C o m p o n e n t ( " \ ( d a t e S t r i n g ) " )
// l e t f i l e U R L = U R L ( s t r i n g : " h t t p s : / / x l r . a l w a y s d a t a . n e t / s t a t i c / r a n k i n g s / \ ( d a t e S t r i n g ) " )
//
// v a r r e q u e s t = U R L R e q u e s t ( u r l : f i l e U R L ! )
// r e q u e s t . h t t p M e t h o d = " H E A D "
// r e q u e s t . a d d V a l u e ( " a t t a c h m e n t ; f i l e n a m e = \ ( d a t e S t r i n g ) " , f o r H T T P H e a d e r F i e l d : " C o n t e n t - D i s p o s i t i o n " )
// r e q u e s t . a d d V a l u e ( " t e x t / c s v " , f o r H T T P H e a d e r F i e l d : " C o n t e n t - T y p e " )
// l e t t a s k = t r y a w a i t U R L S e s s i o n . s h a r e d . d a t a T a s k ( w i t h : r e q u e s t )
// i f l e t u r l R e s p o n s e = t a s k . 1 a s ? H T T P U R L R e s p o n s e {
// p r i n t ( u r l R e s p o n s e . a l l H e a d e r F i e l d s )
// }
// }
//
func formatDateForHTTPHeader ( _ date : Date ) -> String {
let formatter = DateFormatter ( )
formatter . dateFormat = " EEE, dd MMM yyyy HH:mm:ss 'GMT' "
formatter . locale = Locale ( identifier : " en_US_POSIX " )
formatter . timeZone = TimeZone ( secondsFromGMT : 0 ) // G M T t i m e z o n e
return formatter . string ( from : date )
}
func downloadRankingData ( lastDateString : String , fileName : String ) async throws {
let dateString = [ " CLASSEMENT-PADEL " , fileName , lastDateString ] . joined ( separator : " - " ) + " .csv "
@ -26,15 +52,16 @@ class NetworkManager {
let destinationFileUrl = documentsUrl . appendingPathComponent ( " \( dateString ) " )
let fileURL = URL ( string : " https://xlr.alwaysdata.net/static/rankings/ \( dateString ) " )
if FileManager . default . fileExists ( atPath : destinationFileUrl . path ( ) ) {
return
}
var request = URLRequest ( url : fileURL ! )
request . addValue ( " attachment;filename= \( dateString ) " , forHTTPHeaderField : " Content-Disposition " )
if FileManager . default . fileExists ( atPath : destinationFileUrl . path ( ) ) , let modificationDate = destinationFileUrl . creationDate ( ) {
request . addValue ( formatDateForHTTPHeader ( modificationDate ) , forHTTPHeaderField : " If-Modified-Since " )
}
request . addValue ( " text/csv " , forHTTPHeaderField : " Content-Type " )
let task = try await URLSession . shared . download ( for : request )
if let urlResponse = task . 1 as ? HTTPURLResponse {
print ( dateString , urlResponse . statusCode )
if urlResponse . statusCode = = 200 {
// t o d o à v o i r s i o n e n a b e s o i n , p e r m e t d e r e - t é l é c h a r g e r u n c s v s i o n d é t e c t e q u ' i l a é t é m i s à j o u r
@ -47,12 +74,18 @@ class NetworkManager {
// }
// }
// }
try ? FileManager . default . removeItem ( at : destinationFileUrl )
try FileManager . default . copyItem ( at : task . 0 , to : destinationFileUrl )
print ( " dl rank data ok " , lastDateString , fileName )
} else if urlResponse . statusCode = = 404 && fileName = = " MESSIEURS " {
print ( " dl rank data failed " , lastDateString , fileName )
print ( " dl rank data failedm fileNotYetAvailable " , lastDateString , fileName )
throw NetworkManagerError . fileNotYetAvailable
} else if urlResponse . statusCode = = 304 {
print ( " dl rank data failed, fileNotModified " , lastDateString , fileName )
throw NetworkManagerError . fileNotModified
} else {
print ( " dl rank data failed, fileNotDownloaded " , lastDateString , fileName , urlResponse . statusCode )
throw NetworkManagerError . fileNotDownloaded ( urlResponse . statusCode )
}
}
}