[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emms-patches] darcs patch: browser/cache: support deleting files, m...
From: |
Damien Elmes |
Subject: |
[Emms-patches] darcs patch: browser/cache: support deleting files, m... (and 1 more) |
Date: |
Sat, 23 Sep 2006 14:11:42 +0900 (JST) |
Fri Sep 22 18:05:53 JST 2006 Damien Elmes <address@hidden>
* browser/cache: support deleting files, make emms-cache-dirty a defsubst
Sat Sep 23 14:11:28 JST 2006 Damien Elmes <address@hidden>
* browser: add deletion started/finished message
New patches:
[browser/cache: support deleting files, make emms-cache-dirty a defsubst
Damien Elmes <address@hidden>**20060922090553] {
hunk ./emms-browser.el 75
+;; d emms-browser-delete-files
hunk ./emms-browser.el 242
+;; Deleting files
+;; -------------------------------------------------------------------
+
+;; You can use the browser to delete tracks from your hard disk.
+;; Because this is dangerous, it is disabled by default.
+
+;; The following code will delete covers at the same time, and remove
+;; parent directories if they're now empty.
+
+;; (defun de-kill-covers-and-parents (dir tracks)
+;; (when (> (length tracks) 1)
+;; ;; if we're not deleting an individual file, delete covers too
+;; (dolist (cover '("cover.jpg"
+;; "cover_med.jpg"
+;; "cover_small.jpg"
+;; "folder.jpg"))
+;; (condition-case nil
+;; (delete-file (concat dir cover))
+;; (error nil)))
+;; ;; try and delete empty parents - we actually do the work of the
+;; ;; calling function here, too
+;; (let (failed)
+;; (while (and (not (string= dir "/"))
+;; (not failed))
+;; (condition-case nil
+;; (delete-directory dir)
+;; (error (setq failed t)))
+;; (setq dir (file-name-directory (directory-file-name dir)))))))
+;; (add-hook 'emms-browser-delete-files-hook 'de-kill-covers-and-parents)
+
hunk ./emms-browser.el 387
+(defcustom emms-browser-delete-files-hook nil
+ "*Hook run after files have been deleted.
+This hook can be used to clean up extra files, such as album covers.
+Called once for each directory."
+ :group 'emms-browser
+ :type 'hook)
+
hunk ./emms-browser.el 429
+ (define-key map (kbd "D") 'emms-browser-delete-files)
hunk ./emms-browser.el 887
+(defun emms-browser-tracks-at-point (&optional node)
+ "Return a list of tracks at point."
+ (let (tracks)
+ (dolist (node (if node
+ node
+ (emms-browser-data-at-point)))
+ (if (not (emms-browser-bdata-p node))
+ (setq tracks (cons node tracks))
+ (setq tracks
+ (append tracks
+ (emms-browser-tracks-at-point
+ (emms-browser-bdata-data node))))))
+ tracks))
+
hunk ./emms-browser.el 1089
+(defun emms-browser-go-to-parent ()
+ "Move point to the parent of the current node.
+Return point. If at level one, return the current point."
+ (let ((current-level (emms-browser-level-at-point)))
+ (unless (eq current-level 1)
+ (while (<= current-level (emms-browser-level-at-point))
+ (forward-line -1)))
+ (point)))
+
+(defun emms-browser-delete-current-node ()
+ "Remove the current node, and empty parents."
+ ;; set the data to empty
+ (setcdr (assq 'data (emms-browser-bdata-at-point)) nil)
+ (emms-browser-delete-node-if-empty))
+
+(defun emms-browser-delete-node-if-empty ()
+ "If empty, remove node and empty parents."
+ (when (zerop (length (emms-browser-data-at-point)))
+ (save-excursion
+ (let ((child-bdata (emms-browser-bdata-at-point))
+ parent-data parent-point)
+ ;; record the parent's position before we delete anything
+ (save-excursion
+ (setq parent-point (emms-browser-go-to-parent)))
+ ;; delete the current line
+ (when (emms-browser-subitems-visible)
+ (emms-browser-kill-subitems))
+ (emms-with-inhibit-read-only-t
+ (goto-char (point-at-bol))
+ (kill-line 1))
+ (unless (eq (emms-browser-bdata-level child-bdata) 1)
+ ;; remove the node from the parent, and recurse
+ (goto-char parent-point)
+ (setq parent-bdata (emms-browser-bdata-at-point))
+ (setcdr (assq 'data parent-bdata)
+ (delq child-bdata
+ (emms-browser-bdata-data parent-bdata)))
+ (emms-browser-delete-node-if-empty))))))
+
hunk ./emms-browser.el 1228
+(defun emms-browser-delete-files ()
+ "Delete all files under point.
+Disabled by default."
+ (interactive)
+ (let ((tracks (emms-browser-tracks-at-point))
+ dirs path)
+ (unless (yes-or-no-p
+ (format "Really permanently delete these %d tracks? "
+ (length tracks)))
+ (error "Cancelled!"))
+ (dolist (track tracks)
+ (setq path (emms-track-get track 'name))
+ (delete-file path)
+ (add-to-list 'dirs (file-name-directory path))
+ (emms-cache-del path))
+ ;; remove empty dirs
+ (dolist (dir dirs)
+ (run-hook-with-args 'emms-browser-delete-files-hook dir tracks)
+ (condition-case nil
+ (delete-directory dir)
+ (error nil)))
+ ;; remove the item from the browser
+ (emms-browser-delete-current-node)))
+
+(put 'emms-browser-delete-files 'disabled t)
+
hunk ./emms-browser.el 1259
-
hunk ./emms-cache.el 107
-(defun emms-cache-dirty (&rest ignored)
+(defsubst emms-cache-dirty (&rest ignored)
hunk ./emms-cache.el 115
+;; Note we ignore TYPE, as it's stored in TRACK
hunk ./emms-cache.el 120
+
+(defun emms-cache-del (path)
+ "Remove a track from the cache, with key PATH."
+ (remhash path emms-cache-db)
+ (emms-cache-dirty))
}
[browser: add deletion started/finished message
Damien Elmes <address@hidden>**20060923051128] {
hunk ./emms-browser.el 1238
+ (message "Deleting files..")
hunk ./emms-browser.el 1251
- (emms-browser-delete-current-node)))
+ (emms-browser-delete-current-node)
+ (message "Deleting files..done")))
}
Context:
[TAG 2.1
address@hidden
Patch bundle hash:
63544b36d3525674e23602ff2fa6f20621f5fcaf
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emms-patches] darcs patch: browser/cache: support deleting files, m... (and 1 more),
Damien Elmes <=