-(defun emus-play-nearby (offset)
- (let ((idx (seq-position emus-records emus-current-record)))
- (if idx
- (let ((next-record (elt emus-records (+ idx offset))))
- (if next-record
- (if (eq emus-state 'playing)
- (emus-play-record next-record)
- (emus-select-record next-record))
- (error "Track does not exist")))
- (error "No track is currently selected"))))
+(defun emus--play-adjacent-track (&optional prev)
+ (emus--with-library
+ (let ((idx (seq-position emus-records emus-current-record))
+ (offset (if prev -1 +1)))
+ (if idx
+ (let ((next-record (elt emus-records (+ idx offset))))
+ (if next-record
+ (if (eq emus-state 'playing)
+ (emus-play-record next-record)
+ (emus-select-record next-record))
+ (error "Track does not exist")))
+ (error "No track selected")))))
+
+(defun emus--play-adjacent-album (&optional prev)
+ (emus--with-library
+ (let ((idx (seq-position emus-records emus-current-record)))
+ (if idx
+ (let* ((search-list (if prev
+ (reverse (seq-subseq emus-records 0 idx))
+ (seq-subseq emus-records (+ idx 1))))
+ (current-album (emus-record-album emus-current-record))
+ (next-record (seq-some (lambda (r)
+ (if (string= (emus-record-album r)
+ current-album)
+ nil
+ r))
+ search-list)))
+ (if next-record
+ (if (eq emus-state 'playing)
+ (emus-play-record next-record)
+ (emus-select-record next-record))
+ (error "Track does not exist")))
+ (error "No track selected")))))