From: kaliko <kaliko@azylum.org>
Date: Tue, 21 Nov 2017 15:35:06 +0000 (+0100)
Subject: Add option to prevent single|repeat to disable queuing (Closes #19)
X-Git-Tag: 0.15.0~14
X-Git-Url: http://git.kaliko.me/?a=commitdiff_plain;h=41e7f45be3c35a4630478211b2036ce496fdf588;p=mpd-sima.git

Add option to prevent single|repeat to disable queuing (Closes #19)
---

diff --git a/data/man/mpd_sima.cfg.5 b/data/man/mpd_sima.cfg.5
index b696d61..5d5aba6 100644
--- a/data/man/mpd_sima.cfg.5
+++ b/data/man/mpd_sima.cfg.5
@@ -212,6 +212,16 @@ Use MusicBrainzIdentifier to search music (mainly for artists)\&. Default is Tru
 Consider using these metadata as it enhances a lot artist/album/tracks identification\&. Use Picard to tag your file:
 \m[blue]\fB\%https://picard.musicbrainz.org/\fR\m[]\&.
 .RE
+.PP
+\fBrepeat_disable_queue=\fR\fItrue\fR
+.RS 4
+Prevent disabling queuing in repeat play mode\&.
+.RE
+.PP
+\fBsingle_disable_queue=\fR\fItrue\fR
+.RS 4
+Prevent disabling queuing in single play mode\&.
+.RE
 .SS "Crop section"
 .PP
 crop plugin\*(Aqs configuration:
diff --git a/data/man/mpd_sima.cfg.5.xml b/data/man/mpd_sima.cfg.5.xml
index 3f7172f..002b141 100644
--- a/data/man/mpd_sima.cfg.5.xml
+++ b/data/man/mpd_sima.cfg.5.xml
@@ -185,63 +185,77 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
                     <term><option>[sima]</option></term>
                     <listitem><para></para></listitem>
                 </varlistentry>
-            <variablelist>
-                <varlistentry> <!-- sima.contrib -->
-                    <term><option>contrib=</option><replaceable></replaceable></term>
-                    <listitem>
-                        <para></para>
-                    </listitem>
-                </varlistentry>
-                <varlistentry> <!-- sima.internal -->
-                    <term><option>internal=</option><replaceable>Lastfm, Random, Crop</replaceable></term>
-                    <listitem>
-                        <para>&dhpackage;'s plugin management for internal source plugin
-                            and contrib (ie. external plugins).<sbr /> Plugins list is a
-                            comma separated string list.<sbr /> Optional plugin's
-                            configuration lays in its own section.<sbr />For instance a
-                            "AwesomePlugin" declared here gets its configuration from the
-                            corresponding section "[awesomeplugin]".
-                        </para>
-                        <para>The default list of plugins to load at startup: <option>Lastfm</option>,<option>Random</option>,<option>Crop</option>.<sbr />
-                            <option>Crop</option> is an utility plugin, it does not queue any tracks (cf. below).<sbr />
-                            <option>Random</option> will queue a track at random if other plugins did not return any tracks.<sbr />
-                        </para>
-                        <para>You can add here as many plugins you want,
-                            currently shipping <option>Lastfm</option> only.<sbr />
-                            The priority may be used to order them.
-                        </para>
-                    </listitem>
-                </varlistentry>
-                <varlistentry> <!-- sima.history_duration -->
-                    <term><option>history_duration=</option><replaceable>8</replaceable></term>
-                    <listitem>
-                        <para>How far to look back in history to avoid to play
-                            twice the same track/title (duration in
-                            hours).<sbr />
-                            The <option>history_duration</option> is also used to give priority to not recently played artists.
-                        </para>
-                    </listitem>
-                </varlistentry>
-                <varlistentry> <!-- sima.queue_length -->
-                    <term><option>queue_length=</option><replaceable>2</replaceable></term>
-                    <listitem>
-                        <para>Threshold value triggering queue process.</para>
-                    </listitem>
-                </varlistentry>
-                <varlistentry> <!-- sima.musicbrainzid -->
-                    <term><option>musicbrainzid=</option><replaceable>true</replaceable></term>
-                    <listitem>
-                        <para>Use MusicBrainzIdentifier to search music (mainly
-                            for artists).
-                            Default is True, switch to False if you don't have
-                            MusicBrainzIdentifier set for at least 80% of you
-                            music library.<sbr /> Consider using these metadata as it
-                            enhances a lot artist/album/tracks identification.
-                            Use Picard to tag your file: <ulink url="https://picard.musicbrainz.org/"/>.
-                        </para>
-                    </listitem>
-                </varlistentry>
-            </variablelist>
+                <variablelist>
+                    <varlistentry> <!-- sima.contrib -->
+                        <term><option>contrib=</option><replaceable></replaceable></term>
+                        <listitem>
+                            <para></para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry> <!-- sima.internal -->
+                        <term><option>internal=</option><replaceable>Lastfm, Random, Crop</replaceable></term>
+                        <listitem>
+                            <para>&dhpackage;'s plugin management for internal source plugin
+                                and contrib (ie. external plugins).<sbr /> Plugins list is a
+                                comma separated string list.<sbr /> Optional plugin's
+                                configuration lays in its own section.<sbr />For instance a
+                                "AwesomePlugin" declared here gets its configuration from the
+                                corresponding section "[awesomeplugin]".
+                            </para>
+                            <para>The default list of plugins to load at startup: <option>Lastfm</option>,<option>Random</option>,<option>Crop</option>.<sbr />
+                                <option>Crop</option> is an utility plugin, it does not queue any tracks (cf. below).<sbr />
+                                <option>Random</option> will queue a track at random if other plugins did not return any tracks.<sbr />
+                            </para>
+                            <para>You can add here as many plugins you want,
+                                currently shipping <option>Lastfm</option> only.<sbr />
+                                The priority may be used to order them.
+                            </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry> <!-- sima.history_duration -->
+                        <term><option>history_duration=</option><replaceable>8</replaceable></term>
+                        <listitem>
+                            <para>How far to look back in history to avoid to play
+                                twice the same track/title (duration in
+                                hours).<sbr />
+                                The <option>history_duration</option> is also used to give priority to not recently played artists.
+                            </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry> <!-- sima.queue_length -->
+                        <term><option>queue_length=</option><replaceable>2</replaceable></term>
+                        <listitem>
+                            <para>Threshold value triggering queue process.</para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry> <!-- sima.musicbrainzid -->
+                        <term><option>musicbrainzid=</option><replaceable>true</replaceable></term>
+                        <listitem>
+                            <para>Use MusicBrainzIdentifier to search music (mainly
+                                for artists).
+                                Default is True, switch to False if you don't have
+                                MusicBrainzIdentifier set for at least 80% of you
+                                music library.<sbr /> Consider using these metadata as it
+                                enhances a lot artist/album/tracks identification.
+                                Use Picard to tag your file: <ulink url="https://picard.musicbrainz.org/"/>.
+                            </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry> <!-- sima.repeat_disable_queue -->
+                        <term><option>repeat_disable_queue=</option><replaceable>true</replaceable></term>
+                        <listitem>
+                            <para>Prevent disabling queuing in repeat play mode.
+                            </para>
+                        </listitem>
+                    </varlistentry>
+                    <varlistentry> <!-- sima.single_disable_queue -->
+                        <term><option>single_disable_queue=</option><replaceable>true</replaceable></term>
+                        <listitem>
+                            <para>Prevent disabling queuing in single play mode.
+                            </para>
+                        </listitem>
+                    </varlistentry>
+                </variablelist>
             </variablelist>
         </refsect2>
         <refsect2 id="crop">
diff --git a/doc/Changelog b/doc/Changelog
index 8b5e7c3..9aa9442 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -2,6 +2,7 @@ MPD_sima v0.15.0
 
  * Remove EchoNest support (Closes #10)
  * Enhanced queuing behavior in random mode (Closes #16)
+ * Add option to prevent single & repeat mode to disable queuing (Closes #19)
 
 -- kaliko jack <kaliko@azylum.org> UNRELEASED
 
diff --git a/doc/examples/all_settings.cfg b/doc/examples/all_settings.cfg
index b0df17f..a720375 100644
--- a/doc/examples/all_settings.cfg
+++ b/doc/examples/all_settings.cfg
@@ -106,6 +106,18 @@ queue_length = 2
 # description: Use of MusicBrainzIdentifier tag
 musicbrainzid = True
 
+## REPEAT_DISABLE_QUEUE
+# type: boolean
+# default: True
+# description: Prevent repeat play mode to disable queuing
+repeat_disable_queue = True
+
+## SINGLE_DISABLE_QUEUE
+# type: boolean
+# default: True
+# description: Prevent single play mode to disable queuing
+single_disable_queue  = True
+
 ######################### PLUGINS #####################################
 
 [crop]
diff --git a/sima/plugins/core/mpdoptions.py b/sima/plugins/core/mpdoptions.py
index fe368bd..47b0c04 100644
--- a/sima/plugins/core/mpdoptions.py
+++ b/sima/plugins/core/mpdoptions.py
@@ -18,7 +18,7 @@
 #
 #
 """
-    Deal with MPD options ‑ idle and repeat mode
+    Deal with MPD options ‑ single and repeat mode
 """
 
 # standard library import
@@ -44,11 +44,13 @@ class MpdOptions(Plugin):
         """
         player = self.daemon.player
         if player.playmode.get('single'):
-            self.log.info('MPD "single" mode activated.')
-            self.daemon.enabled = False
+            if self.daemon.config.getboolean('sima', 'single_disable_queue'):
+                self.log.info('MPD "single" mode activated.')
+                self.daemon.enabled = False
         elif player.playmode.get('repeat'):
-            self.log.info('MPD "repeat" mode activated.')
-            self.daemon.enabled = False
+            if self.daemon.config.getboolean('sima', 'repeat_disable_queue'):
+                self.log.info('MPD "repeat" mode activated.')
+                self.daemon.enabled = False
         else:
             if self.daemon.enabled is False:
                 self.log.debug('enabling queuing (leaving single|repeat mode)')
diff --git a/sima/utils/config.py b/sima/utils/config.py
index 0f13cba..dfa91e7 100644
--- a/sima/utils/config.py
+++ b/sima/utils/config.py
@@ -53,6 +53,8 @@ DEFAULT_CONF = {
             'queue_length': 2,
             'var_dir': 'empty',
             'musicbrainzid': "true",
+            'repeat_disable_queue': "true",
+            'single_disable_queue': "true",
             },
         'daemon':{
             'daemon': False,