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
=== modified file 'picard/file.py'
--- picard/file.py 2010-01-11 22:53:17 +0000
+++ picard/file.py 2010-02-04 23:38:12 +0000
@@ -209,7 +209,16 @@
209209
210 def _make_filename(self, filename, metadata, settings):210 def _make_filename(self, filename, metadata, settings):
211 """Constructs file name based on metadata and file naming formats."""211 """Constructs file name based on metadata and file naming formats."""
212 if settings["move_files"]:212 move_file = settings["move_files"]
213 if move_file and settings["move_complete_albums_only"]:
214 # Reset the move_file flag if if the album is not complete
215 try:
216 if not self.tagger.get_album_by_id(metadata['musicbrainz_albumid']).is_complete():
217 move_file = False
218 except (IndexError, AttributeError):
219 # Something is missing; assume album is not complete
220 move_file = False
221 if move_file:
213 new_dirname = settings["move_files_to"]222 new_dirname = settings["move_files_to"]
214 if not os.path.isabs(new_dirname):223 if not os.path.isabs(new_dirname):
215 new_dirname = os.path.normpath(os.path.join(os.path.dirname(filename), new_dirname))224 new_dirname = os.path.normpath(os.path.join(os.path.dirname(filename), new_dirname))
216225
=== modified file 'picard/ui/options/moving.py'
--- picard/ui/options/moving.py 2009-01-04 19:08:29 +0000
+++ picard/ui/options/moving.py 2010-02-04 23:38:12 +0000
@@ -41,6 +41,7 @@
41 BoolOption("setting", "move_additional_files", False),41 BoolOption("setting", "move_additional_files", False),
42 TextOption("setting", "move_additional_files_pattern", "*.jpg *.png"),42 TextOption("setting", "move_additional_files_pattern", "*.jpg *.png"),
43 BoolOption("setting", "delete_empty_dirs", True),43 BoolOption("setting", "delete_empty_dirs", True),
44 BoolOption("setting", "move_complete_albums_only", False),
44 ]45 ]
4546
46 def __init__(self, parent=None):47 def __init__(self, parent=None):
@@ -58,6 +59,7 @@
58 self.ui.move_additional_files_pattern.setText(self.config.setting["move_additional_files_pattern"])59 self.ui.move_additional_files_pattern.setText(self.config.setting["move_additional_files_pattern"])
59 self.update_move_additional_files()60 self.update_move_additional_files()
60 self.ui.delete_empty_dirs.setChecked(self.config.setting["delete_empty_dirs"])61 self.ui.delete_empty_dirs.setChecked(self.config.setting["delete_empty_dirs"])
62 self.ui.move_complete_albums_only.setChecked(self.config.setting["move_complete_albums_only"])
6163
6264
63 def check(self):65 def check(self):
@@ -70,6 +72,7 @@
70 self.config.setting["move_additional_files"] = self.ui.move_additional_files.isChecked()72 self.config.setting["move_additional_files"] = self.ui.move_additional_files.isChecked()
71 self.config.setting["move_additional_files_pattern"] = unicode(self.ui.move_additional_files_pattern.text())73 self.config.setting["move_additional_files_pattern"] = unicode(self.ui.move_additional_files_pattern.text())
72 self.config.setting["delete_empty_dirs"] = self.ui.delete_empty_dirs.isChecked()74 self.config.setting["delete_empty_dirs"] = self.ui.delete_empty_dirs.isChecked()
75 self.config.setting["move_complete_albums_only"] = self.ui.move_complete_albums_only.isChecked()
73 self.tagger.window.enable_moving_action.setChecked(self.config.setting["move_files"])76 self.tagger.window.enable_moving_action.setChecked(self.config.setting["move_files"])
7477
75 def move_files_to_browse(self):78 def move_files_to_browse(self):
7679
=== modified file 'picard/ui/options/renaming.py'
--- picard/ui/options/renaming.py 2009-10-03 22:28:16 +0000
+++ picard/ui/options/renaming.py 2010-02-04 23:38:12 +0000
@@ -80,6 +80,7 @@
80 'file_naming_format': unicode(self.ui.file_naming_format.toPlainText()),80 'file_naming_format': unicode(self.ui.file_naming_format.toPlainText()),
81 'va_file_naming_format': unicode(self.ui.va_file_naming_format.toPlainText()),81 'va_file_naming_format': unicode(self.ui.va_file_naming_format.toPlainText()),
82 'move_files_to': os.path.normpath(unicode(self.config.setting["move_files_to"])),82 'move_files_to': os.path.normpath(unicode(self.config.setting["move_files_to"])),
83 'move_complete_albums_only': self.config.setting["move_complete_albums_only"],
83 } 84 }
84 try:85 try:
85 if self.config.setting["enable_tagger_script"]:86 if self.config.setting["enable_tagger_script"]:
8687
=== modified file 'picard/ui/ui_options_moving.py'
--- picard/ui/ui_options_moving.py 2009-01-30 20:46:55 +0000
+++ picard/ui/ui_options_moving.py 2010-02-04 23:38:12 +0000
@@ -2,8 +2,8 @@
22
3# Form implementation generated from reading ui file 'ui/options_moving.ui'3# Form implementation generated from reading ui file 'ui/options_moving.ui'
4#4#
5# Created: Fri Jan 30 21:45:34 20095# Created: Thu Feb 4 00:06:55 2010
6# by: PyQt4 UI code generator 4.4.36# by: PyQt4 UI code generator 4.6
7#7#
8# WARNING! All changes made in this file will be lost!8# WARNING! All changes made in this file will be lost!
99
@@ -16,13 +16,13 @@
16 self.gridlayout = QtGui.QGridLayout(MovingOptionsPage)16 self.gridlayout = QtGui.QGridLayout(MovingOptionsPage)
17 self.gridlayout.setObjectName("gridlayout")17 self.gridlayout.setObjectName("gridlayout")
18 spacerItem = QtGui.QSpacerItem(378, 16, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)18 spacerItem = QtGui.QSpacerItem(378, 16, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
19 self.gridlayout.addItem(spacerItem, 8, 0, 1, 1)19 self.gridlayout.addItem(spacerItem, 9, 0, 1, 1)
20 self.move_additional_files_pattern = QtGui.QLineEdit(MovingOptionsPage)20 self.move_additional_files_pattern = QtGui.QLineEdit(MovingOptionsPage)
21 self.move_additional_files_pattern.setObjectName("move_additional_files_pattern")21 self.move_additional_files_pattern.setObjectName("move_additional_files_pattern")
22 self.gridlayout.addWidget(self.move_additional_files_pattern, 5, 0, 1, 1)22 self.gridlayout.addWidget(self.move_additional_files_pattern, 6, 0, 1, 1)
23 self.move_additional_files = QtGui.QCheckBox(MovingOptionsPage)23 self.move_additional_files = QtGui.QCheckBox(MovingOptionsPage)
24 self.move_additional_files.setObjectName("move_additional_files")24 self.move_additional_files.setObjectName("move_additional_files")
25 self.gridlayout.addWidget(self.move_additional_files, 4, 0, 1, 1)25 self.gridlayout.addWidget(self.move_additional_files, 5, 0, 1, 1)
26 self.hboxlayout = QtGui.QHBoxLayout()26 self.hboxlayout = QtGui.QHBoxLayout()
27 self.hboxlayout.setSpacing(2)27 self.hboxlayout.setSpacing(2)
28 self.hboxlayout.setMargin(0)28 self.hboxlayout.setMargin(0)
@@ -45,13 +45,23 @@
45 self.move_files.setSizePolicy(sizePolicy)45 self.move_files.setSizePolicy(sizePolicy)
46 self.move_files.setObjectName("move_files")46 self.move_files.setObjectName("move_files")
47 self.gridlayout.addWidget(self.move_files, 1, 0, 1, 1)47 self.gridlayout.addWidget(self.move_files, 1, 0, 1, 1)
48 self.move_complete_albums_only = QtGui.QCheckBox(MovingOptionsPage)
49 self.move_complete_albums_only.setObjectName("move_complete_albums_only")
50 self.gridlayout.addWidget(self.move_complete_albums_only, 4, 0, 1, 1)
4851
49 self.retranslateUi(MovingOptionsPage)52 self.retranslateUi(MovingOptionsPage)
50 QtCore.QMetaObject.connectSlotsByName(MovingOptionsPage)53 QtCore.QMetaObject.connectSlotsByName(MovingOptionsPage)
54 MovingOptionsPage.setTabOrder(self.move_files, self.move_files_to)
55 MovingOptionsPage.setTabOrder(self.move_files_to, self.move_files_to_browse)
56 MovingOptionsPage.setTabOrder(self.move_files_to_browse, self.delete_empty_dirs)
57 MovingOptionsPage.setTabOrder(self.delete_empty_dirs, self.move_complete_albums_only)
58 MovingOptionsPage.setTabOrder(self.move_complete_albums_only, self.move_additional_files)
59 MovingOptionsPage.setTabOrder(self.move_additional_files, self.move_additional_files_pattern)
5160
52 def retranslateUi(self, MovingOptionsPage):61 def retranslateUi(self, MovingOptionsPage):
53 self.move_additional_files.setText(_("Move additional files:"))62 self.move_additional_files.setText(QtGui.QApplication.translate("MovingOptionsPage", "Move additional files:", None, QtGui.QApplication.UnicodeUTF8))
54 self.move_files_to_browse.setText(_("Browse..."))63 self.move_files_to_browse.setText(QtGui.QApplication.translate("MovingOptionsPage", "Browse...", None, QtGui.QApplication.UnicodeUTF8))
55 self.delete_empty_dirs.setText(_("Delete empty directories"))64 self.delete_empty_dirs.setText(QtGui.QApplication.translate("MovingOptionsPage", "Delete empty directories", None, QtGui.QApplication.UnicodeUTF8))
56 self.move_files.setText(_("Move files to this directory when saving:"))65 self.move_files.setText(QtGui.QApplication.translate("MovingOptionsPage", "Move files to this directory when saving:", None, QtGui.QApplication.UnicodeUTF8))
66 self.move_complete_albums_only.setText(QtGui.QApplication.translate("MovingOptionsPage", "Move complete albums only", None, QtGui.QApplication.UnicodeUTF8))
5767
5868
=== modified file 'ui/options_moving.ui'
--- ui/options_moving.ui 2009-01-30 20:46:55 +0000
+++ ui/options_moving.ui 2010-02-04 23:38:12 +0000
@@ -1,7 +1,8 @@
1<ui version="4.0" >1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
2 <class>MovingOptionsPage</class>3 <class>MovingOptionsPage</class>
3 <widget class="QWidget" name="MovingOptionsPage" >4 <widget class="QWidget" name="MovingOptionsPage">
4 <property name="geometry" >5 <property name="geometry">
5 <rect>6 <rect>
6 <x>0</x>7 <x>0</x>
7 <y>0</y>8 <y>0</y>
@@ -9,13 +10,13 @@
9 <height>563</height>10 <height>563</height>
10 </rect>11 </rect>
11 </property>12 </property>
12 <layout class="QGridLayout" >13 <layout class="QGridLayout">
13 <item row="8" column="0" >14 <item row="9" column="0">
14 <spacer>15 <spacer>
15 <property name="orientation" >16 <property name="orientation">
16 <enum>Qt::Vertical</enum>17 <enum>Qt::Vertical</enum>
17 </property>18 </property>
18 <property name="sizeHint" stdset="0" >19 <property name="sizeHint" stdset="0">
19 <size>20 <size>
20 <width>378</width>21 <width>378</width>
21 <height>16</height>22 <height>16</height>
@@ -23,58 +24,74 @@
23 </property>24 </property>
24 </spacer>25 </spacer>
25 </item>26 </item>
26 <item row="5" column="0" >27 <item row="6" column="0">
27 <widget class="QLineEdit" name="move_additional_files_pattern" />28 <widget class="QLineEdit" name="move_additional_files_pattern"/>
28 </item>29 </item>
29 <item row="4" column="0" >30 <item row="5" column="0">
30 <widget class="QCheckBox" name="move_additional_files" >31 <widget class="QCheckBox" name="move_additional_files">
31 <property name="text" >32 <property name="text">
32 <string>Move additional files:</string>33 <string>Move additional files:</string>
33 </property>34 </property>
34 </widget>35 </widget>
35 </item>36 </item>
36 <item row="2" column="0" >37 <item row="2" column="0">
37 <layout class="QHBoxLayout" >38 <layout class="QHBoxLayout">
38 <property name="spacing" >39 <property name="spacing">
39 <number>2</number>40 <number>2</number>
40 </property>41 </property>
41 <property name="margin" >42 <property name="margin">
42 <number>0</number>43 <number>0</number>
43 </property>44 </property>
44 <item>45 <item>
45 <widget class="QLineEdit" name="move_files_to" />46 <widget class="QLineEdit" name="move_files_to"/>
46 </item>47 </item>
47 <item>48 <item>
48 <widget class="QPushButton" name="move_files_to_browse" >49 <widget class="QPushButton" name="move_files_to_browse">
49 <property name="text" >50 <property name="text">
50 <string>Browse...</string>51 <string>Browse...</string>
51 </property>52 </property>
52 </widget>53 </widget>
53 </item>54 </item>
54 </layout>55 </layout>
55 </item>56 </item>
56 <item row="3" column="0" >57 <item row="3" column="0">
57 <widget class="QCheckBox" name="delete_empty_dirs" >58 <widget class="QCheckBox" name="delete_empty_dirs">
58 <property name="text" >59 <property name="text">
59 <string>Delete empty directories</string>60 <string>Delete empty directories</string>
60 </property>61 </property>
61 </widget>62 </widget>
62 </item>63 </item>
63 <item row="1" column="0" >64 <item row="1" column="0">
64 <widget class="QCheckBox" name="move_files" >65 <widget class="QCheckBox" name="move_files">
65 <property name="sizePolicy" >66 <property name="sizePolicy">
66 <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >67 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
67 <horstretch>0</horstretch>68 <horstretch>0</horstretch>
68 <verstretch>0</verstretch>69 <verstretch>0</verstretch>
69 </sizepolicy>70 </sizepolicy>
70 </property>71 </property>
71 <property name="text" >72 <property name="text">
72 <string>Move files to this directory when saving:</string>73 <string>Move files to this directory when saving:</string>
73 </property>74 </property>
74 </widget>75 </widget>
75 </item>76 </item>
77 <item row="4" column="0">
78 <widget class="QCheckBox" name="move_complete_albums_only">
79 <property name="text">
80 <string>Move complete albums only</string>
81 </property>
82 </widget>
83 </item>
76 </layout>84 </layout>
77 </widget>85 </widget>
86 <tabstops>
87 <tabstop>move_files</tabstop>
88 <tabstop>move_files_to</tabstop>
89 <tabstop>move_files_to_browse</tabstop>
90 <tabstop>delete_empty_dirs</tabstop>
91 <tabstop>move_complete_albums_only</tabstop>
92 <tabstop>move_additional_files</tabstop>
93 <tabstop>move_additional_files_pattern</tabstop>
94 </tabstops>
78 <resources/>95 <resources/>
79 <connections/>96 <connections/>
80</ui>97</ui>

Subscribers

People subscribed via source and target branches

to status/vote changes: