Merge lp:~encukou/picard/move-complete-album-only into lp:~musicbrainz-developers/picard/trunk

Proposed by Petr Viktorin
Status: Needs review
Proposed branch: lp:~encukou/picard/move-complete-album-only
Merge into: lp:~musicbrainz-developers/picard/trunk
Diff against target: 250 lines (+77/-37)
5 files modified
picard/file.py (+10/-1)
picard/ui/options/moving.py (+3/-0)
picard/ui/options/renaming.py (+1/-0)
picard/ui/ui_options_moving.py (+19/-9)
ui/options_moving.ui (+44/-27)
To merge this branch: bzr merge lp:~encukou/picard/move-complete-album-only
Reviewer Review Type Date Requested Status
MusicBrainz Developers Pending
Review via email: mp+18651@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Petr Viktorin (encukou) wrote :

(as seen on mailing list:)
I've started using Picard, and I really like how I can make a clean collection
directory with the Move Files option. But then I clicked Save on an incomplete
album, which made a bit of a mess there. I think a "Move complete albums only"
option would be nice.
So here's a patch for it :)

Unmerged revisions

1025. By Petr Viktorin

Add option to for move only those files that are in complete albums.

For non-complete albums, the metadata is saved into the file, but files are not moved to the "collection" (move_files_to) folder.

Also fixed tab order in options_moving.ui

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'picard/file.py'
2--- picard/file.py 2010-01-11 22:53:17 +0000
3+++ picard/file.py 2010-02-04 23:38:12 +0000
4@@ -209,7 +209,16 @@
5
6 def _make_filename(self, filename, metadata, settings):
7 """Constructs file name based on metadata and file naming formats."""
8- if settings["move_files"]:
9+ move_file = settings["move_files"]
10+ if move_file and settings["move_complete_albums_only"]:
11+ # Reset the move_file flag if if the album is not complete
12+ try:
13+ if not self.tagger.get_album_by_id(metadata['musicbrainz_albumid']).is_complete():
14+ move_file = False
15+ except (IndexError, AttributeError):
16+ # Something is missing; assume album is not complete
17+ move_file = False
18+ if move_file:
19 new_dirname = settings["move_files_to"]
20 if not os.path.isabs(new_dirname):
21 new_dirname = os.path.normpath(os.path.join(os.path.dirname(filename), new_dirname))
22
23=== modified file 'picard/ui/options/moving.py'
24--- picard/ui/options/moving.py 2009-01-04 19:08:29 +0000
25+++ picard/ui/options/moving.py 2010-02-04 23:38:12 +0000
26@@ -41,6 +41,7 @@
27 BoolOption("setting", "move_additional_files", False),
28 TextOption("setting", "move_additional_files_pattern", "*.jpg *.png"),
29 BoolOption("setting", "delete_empty_dirs", True),
30+ BoolOption("setting", "move_complete_albums_only", False),
31 ]
32
33 def __init__(self, parent=None):
34@@ -58,6 +59,7 @@
35 self.ui.move_additional_files_pattern.setText(self.config.setting["move_additional_files_pattern"])
36 self.update_move_additional_files()
37 self.ui.delete_empty_dirs.setChecked(self.config.setting["delete_empty_dirs"])
38+ self.ui.move_complete_albums_only.setChecked(self.config.setting["move_complete_albums_only"])
39
40
41 def check(self):
42@@ -70,6 +72,7 @@
43 self.config.setting["move_additional_files"] = self.ui.move_additional_files.isChecked()
44 self.config.setting["move_additional_files_pattern"] = unicode(self.ui.move_additional_files_pattern.text())
45 self.config.setting["delete_empty_dirs"] = self.ui.delete_empty_dirs.isChecked()
46+ self.config.setting["move_complete_albums_only"] = self.ui.move_complete_albums_only.isChecked()
47 self.tagger.window.enable_moving_action.setChecked(self.config.setting["move_files"])
48
49 def move_files_to_browse(self):
50
51=== modified file 'picard/ui/options/renaming.py'
52--- picard/ui/options/renaming.py 2009-10-03 22:28:16 +0000
53+++ picard/ui/options/renaming.py 2010-02-04 23:38:12 +0000
54@@ -80,6 +80,7 @@
55 'file_naming_format': unicode(self.ui.file_naming_format.toPlainText()),
56 'va_file_naming_format': unicode(self.ui.va_file_naming_format.toPlainText()),
57 'move_files_to': os.path.normpath(unicode(self.config.setting["move_files_to"])),
58+ 'move_complete_albums_only': self.config.setting["move_complete_albums_only"],
59 }
60 try:
61 if self.config.setting["enable_tagger_script"]:
62
63=== modified file 'picard/ui/ui_options_moving.py'
64--- picard/ui/ui_options_moving.py 2009-01-30 20:46:55 +0000
65+++ picard/ui/ui_options_moving.py 2010-02-04 23:38:12 +0000
66@@ -2,8 +2,8 @@
67
68 # Form implementation generated from reading ui file 'ui/options_moving.ui'
69 #
70-# Created: Fri Jan 30 21:45:34 2009
71-# by: PyQt4 UI code generator 4.4.3
72+# Created: Thu Feb 4 00:06:55 2010
73+# by: PyQt4 UI code generator 4.6
74 #
75 # WARNING! All changes made in this file will be lost!
76
77@@ -16,13 +16,13 @@
78 self.gridlayout = QtGui.QGridLayout(MovingOptionsPage)
79 self.gridlayout.setObjectName("gridlayout")
80 spacerItem = QtGui.QSpacerItem(378, 16, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
81- self.gridlayout.addItem(spacerItem, 8, 0, 1, 1)
82+ self.gridlayout.addItem(spacerItem, 9, 0, 1, 1)
83 self.move_additional_files_pattern = QtGui.QLineEdit(MovingOptionsPage)
84 self.move_additional_files_pattern.setObjectName("move_additional_files_pattern")
85- self.gridlayout.addWidget(self.move_additional_files_pattern, 5, 0, 1, 1)
86+ self.gridlayout.addWidget(self.move_additional_files_pattern, 6, 0, 1, 1)
87 self.move_additional_files = QtGui.QCheckBox(MovingOptionsPage)
88 self.move_additional_files.setObjectName("move_additional_files")
89- self.gridlayout.addWidget(self.move_additional_files, 4, 0, 1, 1)
90+ self.gridlayout.addWidget(self.move_additional_files, 5, 0, 1, 1)
91 self.hboxlayout = QtGui.QHBoxLayout()
92 self.hboxlayout.setSpacing(2)
93 self.hboxlayout.setMargin(0)
94@@ -45,13 +45,23 @@
95 self.move_files.setSizePolicy(sizePolicy)
96 self.move_files.setObjectName("move_files")
97 self.gridlayout.addWidget(self.move_files, 1, 0, 1, 1)
98+ self.move_complete_albums_only = QtGui.QCheckBox(MovingOptionsPage)
99+ self.move_complete_albums_only.setObjectName("move_complete_albums_only")
100+ self.gridlayout.addWidget(self.move_complete_albums_only, 4, 0, 1, 1)
101
102 self.retranslateUi(MovingOptionsPage)
103 QtCore.QMetaObject.connectSlotsByName(MovingOptionsPage)
104+ MovingOptionsPage.setTabOrder(self.move_files, self.move_files_to)
105+ MovingOptionsPage.setTabOrder(self.move_files_to, self.move_files_to_browse)
106+ MovingOptionsPage.setTabOrder(self.move_files_to_browse, self.delete_empty_dirs)
107+ MovingOptionsPage.setTabOrder(self.delete_empty_dirs, self.move_complete_albums_only)
108+ MovingOptionsPage.setTabOrder(self.move_complete_albums_only, self.move_additional_files)
109+ MovingOptionsPage.setTabOrder(self.move_additional_files, self.move_additional_files_pattern)
110
111 def retranslateUi(self, MovingOptionsPage):
112- self.move_additional_files.setText(_("Move additional files:"))
113- self.move_files_to_browse.setText(_("Browse..."))
114- self.delete_empty_dirs.setText(_("Delete empty directories"))
115- self.move_files.setText(_("Move files to this directory when saving:"))
116+ self.move_additional_files.setText(QtGui.QApplication.translate("MovingOptionsPage", "Move additional files:", None, QtGui.QApplication.UnicodeUTF8))
117+ self.move_files_to_browse.setText(QtGui.QApplication.translate("MovingOptionsPage", "Browse...", None, QtGui.QApplication.UnicodeUTF8))
118+ self.delete_empty_dirs.setText(QtGui.QApplication.translate("MovingOptionsPage", "Delete empty directories", None, QtGui.QApplication.UnicodeUTF8))
119+ self.move_files.setText(QtGui.QApplication.translate("MovingOptionsPage", "Move files to this directory when saving:", None, QtGui.QApplication.UnicodeUTF8))
120+ self.move_complete_albums_only.setText(QtGui.QApplication.translate("MovingOptionsPage", "Move complete albums only", None, QtGui.QApplication.UnicodeUTF8))
121
122
123=== modified file 'ui/options_moving.ui'
124--- ui/options_moving.ui 2009-01-30 20:46:55 +0000
125+++ ui/options_moving.ui 2010-02-04 23:38:12 +0000
126@@ -1,7 +1,8 @@
127-<ui version="4.0" >
128+<?xml version="1.0" encoding="UTF-8"?>
129+<ui version="4.0">
130 <class>MovingOptionsPage</class>
131- <widget class="QWidget" name="MovingOptionsPage" >
132- <property name="geometry" >
133+ <widget class="QWidget" name="MovingOptionsPage">
134+ <property name="geometry">
135 <rect>
136 <x>0</x>
137 <y>0</y>
138@@ -9,13 +10,13 @@
139 <height>563</height>
140 </rect>
141 </property>
142- <layout class="QGridLayout" >
143- <item row="8" column="0" >
144+ <layout class="QGridLayout">
145+ <item row="9" column="0">
146 <spacer>
147- <property name="orientation" >
148+ <property name="orientation">
149 <enum>Qt::Vertical</enum>
150 </property>
151- <property name="sizeHint" stdset="0" >
152+ <property name="sizeHint" stdset="0">
153 <size>
154 <width>378</width>
155 <height>16</height>
156@@ -23,58 +24,74 @@
157 </property>
158 </spacer>
159 </item>
160- <item row="5" column="0" >
161- <widget class="QLineEdit" name="move_additional_files_pattern" />
162+ <item row="6" column="0">
163+ <widget class="QLineEdit" name="move_additional_files_pattern"/>
164 </item>
165- <item row="4" column="0" >
166- <widget class="QCheckBox" name="move_additional_files" >
167- <property name="text" >
168+ <item row="5" column="0">
169+ <widget class="QCheckBox" name="move_additional_files">
170+ <property name="text">
171 <string>Move additional files:</string>
172 </property>
173 </widget>
174 </item>
175- <item row="2" column="0" >
176- <layout class="QHBoxLayout" >
177- <property name="spacing" >
178+ <item row="2" column="0">
179+ <layout class="QHBoxLayout">
180+ <property name="spacing">
181 <number>2</number>
182 </property>
183- <property name="margin" >
184+ <property name="margin">
185 <number>0</number>
186 </property>
187 <item>
188- <widget class="QLineEdit" name="move_files_to" />
189+ <widget class="QLineEdit" name="move_files_to"/>
190 </item>
191 <item>
192- <widget class="QPushButton" name="move_files_to_browse" >
193- <property name="text" >
194+ <widget class="QPushButton" name="move_files_to_browse">
195+ <property name="text">
196 <string>Browse...</string>
197 </property>
198 </widget>
199 </item>
200 </layout>
201 </item>
202- <item row="3" column="0" >
203- <widget class="QCheckBox" name="delete_empty_dirs" >
204- <property name="text" >
205+ <item row="3" column="0">
206+ <widget class="QCheckBox" name="delete_empty_dirs">
207+ <property name="text">
208 <string>Delete empty directories</string>
209 </property>
210 </widget>
211 </item>
212- <item row="1" column="0" >
213- <widget class="QCheckBox" name="move_files" >
214- <property name="sizePolicy" >
215- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
216+ <item row="1" column="0">
217+ <widget class="QCheckBox" name="move_files">
218+ <property name="sizePolicy">
219+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
220 <horstretch>0</horstretch>
221 <verstretch>0</verstretch>
222 </sizepolicy>
223 </property>
224- <property name="text" >
225+ <property name="text">
226 <string>Move files to this directory when saving:</string>
227 </property>
228 </widget>
229 </item>
230+ <item row="4" column="0">
231+ <widget class="QCheckBox" name="move_complete_albums_only">
232+ <property name="text">
233+ <string>Move complete albums only</string>
234+ </property>
235+ </widget>
236+ </item>
237 </layout>
238 </widget>
239+ <tabstops>
240+ <tabstop>move_files</tabstop>
241+ <tabstop>move_files_to</tabstop>
242+ <tabstop>move_files_to_browse</tabstop>
243+ <tabstop>delete_empty_dirs</tabstop>
244+ <tabstop>move_complete_albums_only</tabstop>
245+ <tabstop>move_additional_files</tabstop>
246+ <tabstop>move_additional_files_pattern</tabstop>
247+ </tabstops>
248 <resources/>
249 <connections/>
250 </ui>

Subscribers

People subscribed via source and target branches

to status/vote changes: