+(defun gnus-cloud-all-files ()
+ (let ((files nil))
+ (dolist (elem gnus-cloud-synced-files)
+ (cond
+ ((stringp elem)
+ (push elem files))
+ ((consp elem)
+ (dolist (file (directory-files (plist-get elem :directory)
+ nil
+ (plist-get elem :match)))
+ (push (expand-file-name file (plist-get elem :directory))
+ files)))))
+ (nreverse files)))
+
+(defvar gnus-cloud-file-timestamps nil)
+
+(defun gnus-cloud-files-to-upload (&optional full)
+ (let ((files nil))
+ (dolist (file (gnus-cloud-all-files))
+ (if (file-exists-p file)
+ (when (or full
+ (gnus-cloud-file-new-p file))
+ (push `(:file ,file) files))
+ (when (assoc file gnus-cloud-file-timestamps)
+ (push `(:delete ,file) files))))
+ (nreverse files)))
+
+(defun gnus-cloud-file-new-p (file)
+ (let ((timestamp (format-time-string
+ "%FT%T%z" (nth 5 (file-attributes file))))
+ (old (cadr (assoc file gnus-cloud-file-timestamps))))
+ (or (null old)
+ (string< old timestamp))))
+