@@ -10,6 +10,7 @@ import (
1010 "regexp"
1111 "slices"
1212 "strings"
13+ "time"
1314
1415 "patreon-crawler/patreon"
1516 "patreon-crawler/patreon/api"
@@ -113,49 +114,57 @@ func getFileExtension(mimeType string) (string, error) {
113114 return mimeTypeSplits [1 ], nil
114115}
115116
116- func downloadMedia (media patreon.Media , downloadDir string ) error {
117+ func downloadMedia (media patreon.Media , downloadDir string ) ( string , error ) {
117118 extension , err := getFileExtension (media .MimeType )
118119 if err != nil {
119- return err
120+ return "" , err
120121 }
121122 downloadedFilePath := fmt .Sprintf ("%s/%s.%s" , downloadDir , media .ID , extension )
122123
123124 if _ , err := os .Stat (downloadedFilePath ); err == nil {
124125 fmt .Printf ("\t - skiped %s (already downloaded)\n " , media .ID )
125- return nil
126+ return downloadedFilePath , nil
126127 }
127128
128129 response , err := http .Get (media .DownloadURL )
129130 if err != nil {
130- return fmt .Errorf ("failed to download media: %w" , err )
131+ return "" , fmt .Errorf ("failed to download media: %w" , err )
131132 }
132133 defer response .Body .Close ()
133134
134135 if response .StatusCode != http .StatusOK {
135- return fmt .Errorf ("failed to download media: %s" , response .Status )
136+ return "" , fmt .Errorf ("failed to download media: %s" , response .Status )
136137 }
137138
138139 tempDownloadFilePath := downloadedFilePath + ".tmp"
139140
140141 out , err := os .Create (tempDownloadFilePath )
141142 if err != nil {
142- return fmt .Errorf ("failed to create file: %w" , err )
143+ return "" , fmt .Errorf ("failed to create file: %w" , err )
143144 }
144145 defer out .Close ()
145146
146147 _ , err = io .Copy (out , response .Body )
147148 if err != nil {
148- return fmt .Errorf ("failed to write file: %w" , err )
149+ return "" , fmt .Errorf ("failed to write file: %w" , err )
149150 }
150151
151152 out .Close ()
152153
153154 err = os .Rename (tempDownloadFilePath , downloadedFilePath )
154155 if err != nil {
155- return fmt .Errorf ("failed to rename file: %w" , err )
156+ return "" , fmt .Errorf ("failed to rename file: %w" , err )
156157 }
157158
158159 fmt .Printf ("\t - saved %s\n " , media .ID )
160+ return downloadedFilePath , nil
161+ }
162+
163+ func adjustFileTime (file string , time time.Time ) error {
164+ err := os .Chtimes (file , time , time )
165+ if err != nil {
166+ return fmt .Errorf ("failed to adjust file time: %w" , err )
167+ }
159168 return nil
160169}
161170
@@ -170,7 +179,11 @@ func downloadPost(downloadDirectory string, post patreon.Post) error {
170179 }
171180
172181 for _ , media := range post .Media {
173- err := downloadMedia (media , downloadDirectory )
182+ file , err := downloadMedia (media , downloadDirectory )
183+ if err != nil {
184+ return err
185+ }
186+ err = adjustFileTime (file , post .PublishedAt )
174187 if err != nil {
175188 return err
176189 }
0 commit comments