commit/StationPlaylist: 20 new changesets

  • From: commits-noreply@xxxxxxxxxxxxx
  • To: nvda-addons-commits@xxxxxxxxxxxxx
  • Date: Mon, 15 Aug 2016 16:11:20 -0000

20 new commits in StationPlaylist:

https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/1c8b17b8a494/
Changeset:   1c8b17b8a494
Branch:      None
User:        josephsl
Date:        2016-06-03 10:24:02+00:00
Summary:     7.3 or future: Foundation to support update channel changing.

Because add-on 7.x will be anchored to 8.x, provide a way to change update 
channels. For now, these routines are disabled, but will be enabled once 8.0 
enters beta testing phase.
Code foundation laid in 7.3, to be unlocked in the future.

Affected #:  4 files

diff --git a/addon/appModules/splstudio/__init__.py 
b/addon/appModules/splstudio/__init__.py
index 2439d50..68073e2 100755
--- a/addon/appModules/splstudio/__init__.py
+++ b/addon/appModules/splstudio/__init__.py
@@ -495,7 +495,9 @@ class AppModule(appModuleHandler.AppModule):
                self.noMoreHandle = threading.Event()
                threading.Thread(target=self._locateSPLHwnd).start()
                # Check for add-on update if told to do so.
-               if splconfig.SPLConfig["Update"]["AutoUpdateCheck"]:
+               # LTS: Only do this if channel hasn't changed.
+               # To be unlocked in 8.0 beta 1.
+               if splconfig.SPLConfig["Update"]["AutoUpdateCheck"]: # 7lts: or 
splupdate._updateNow:
                        # 7.0: Have a timer call the update function indirectly.
                        queueHandler.queueFunction(queueHandler.eventQueue, 
splconfig.updateInit)
                # Display startup dialogs if any.

diff --git a/addon/appModules/splstudio/splconfig.py 
b/addon/appModules/splstudio/splconfig.py
index 1537bfe..bb61374 100755
--- a/addon/appModules/splstudio/splconfig.py
+++ b/addon/appModules/splstudio/splconfig.py
@@ -696,6 +696,13 @@ def autoUpdateCheck():
 # The timer itself.
 # A bit simpler than NVDA Core's auto update checker.
 def updateInit():
+       # LTS: Launch updater if channel change is detected.
+       # To be unlocked in 8.0 beta 1.
+       #if splupdate._updateNow:
+               #splupdate.updateCheck(auto=True, 
lts=splupdate.SPLUpdateChannel == "lts") # No repeat here.
+               #splupdate._SPLUpdateT = wx.PyTimer(autoUpdateCheck)
+               #splupdate._updateNow = False
+               #return
        currentTime = time.time()
        nextCheck = splupdate.SPLAddonCheck+86400.0
        if splupdate.SPLAddonCheck < currentTime < nextCheck:

diff --git a/addon/appModules/splstudio/splconfui.py 
b/addon/appModules/splstudio/splconfui.py
index 1e8daa0..b9c63c1 100755
--- a/addon/appModules/splstudio/splconfui.py
+++ b/addon/appModules/splstudio/splconfui.py
@@ -307,6 +307,9 @@ class SPLConfigDialog(gui.SettingsDialog):
                self.splConPassthrough = 
splconfig.SPLConfig["Advanced"]["SPLConPassthrough"]
                self.compLayer = 
splconfig.SPLConfig["Advanced"]["CompatibilityLayer"]
                self.autoUpdateCheck = 
splconfig.SPLConfig["Update"]["AutoUpdateCheck"]
+               # To be unlocked in 8.0 beta 1.
+               #self.updateChannel = splupdate.SPLUpdateChannel
+               #self.pendingChannelChange = False
                settingsSizer.Add(item)
 
                # Translators: The label for a button in SPL add-on 
configuration dialog to reset settings to defaults.
@@ -350,6 +353,9 @@ class SPLConfigDialog(gui.SettingsDialog):
                splconfig.SPLConfig["Advanced"]["SPLConPassthrough"] = 
self.splConPassthrough
                splconfig.SPLConfig["Advanced"]["CompatibilityLayer"] = 
self.compLayer
                splconfig.SPLConfig["Update"]["AutoUpdateCheck"] = 
self.autoUpdateCheck
+               # To be unlocked in 8.0 beta 1.
+               #self.pendingChannelChange = splupdate.SPLUpdateChannel != 
self.updateChannel
+               #splupdate.SPLUpdateChannel = self.updateChannel
                splconfig.SPLConfig["ActiveIndex"] = profileIndex
                # Reverse of merge: save profile specific sections to 
individual config dictionaries.
                splconfig.applySections(profileIndex)
@@ -401,9 +407,17 @@ class SPLConfigDialog(gui.SettingsDialog):
                                dataLo = 0x00010000 if 
splconfig.SPLConfig["MetadataStreaming"]["MetadataEnabled"][url] else 0xffff0000
                                user32.SendMessageW(hwnd, 1024, dataLo | url, 
36)
                # Coordinate auto update timer restart routine if told to do so.
-               if not splconfig.SPLConfig["Update"]["AutoUpdateCheck"]:
+               # To be unlocked in 8.0 beta 1.
+               if not splconfig.SPLConfig["Update"]["AutoUpdateCheck"]: # 
7lts: or self.pendingChannelChange:
                        if splupdate._SPLUpdateT is not None and 
splupdate._SPLUpdateT.IsRunning(): splupdate._SPLUpdateT.Stop()
                        splupdate._SPLUpdateT = None
+                       # To be unlocked in 8.0 beta 1.
+                       #if self.pendingChannelChange:
+                               #splupdate._pendingChannelChange = True
+                               # Translators: A dialog message shown when 
add-on update channel has changed.
+                               #wx.CallAfter(gui.messageBox, _("You have 
changed the add-on update channel. You must restart NVDA for the change to take 
effect. Be sure to answer yes when you are asked to install the new version 
when prompted after restarting NVDA."),
+                               # Translators: Title of the update channel 
dialog.
+                               #_("Add-on update channel changed"), 
wx.OK|wx.ICON_INFORMATION)
                else:
                        if splupdate._SPLUpdateT is None: splconfig.updateInit()
 
@@ -1272,6 +1286,18 @@ class AdvancedOptionsDialog(wx.Dialog):
                sizer.Add(self.autoUpdateCheckbox, border=10,flag=wx.TOP)
                mainSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
+               # LTS and 8.x only.
+               # To be unlocked in 8.0 beta 1.
+               #sizer = wx.BoxSizer(wx.HORIZONTAL)
+               # Translators: The label for a combo box to select update 
channel.
+               #label = wx.StaticText(self, wx.ID_ANY, label=_("&Add-on update 
channel:"))
+               #self.channels= wx.Choice(self, wx.ID_ANY, choices=["stable", 
"longterm"])
+               #self.updateChannels = ("stable", "lts")
+               
#self.channels.SetSelection(self.updateChannels.index(self.Parent.updateChannel))
+               #sizer.Add(label)
+               #sizer.Add(self.channels)
+               #mainSizer.Add(sizer, border=10, flag=wx.BOTTOM)
+
                sizer = wx.BoxSizer(wx.HORIZONTAL)
                # Translators: A checkbox to toggle if SPL Controller command 
can be used to invoke Assistant layer.
                
self.splConPassthroughCheckbox=wx.CheckBox(self,wx.NewId(),label=_("Allow SPL 
C&ontroller command to invoke SPL Assistant layer"))
@@ -1308,6 +1334,8 @@ class AdvancedOptionsDialog(wx.Dialog):
                parent.splConPassthrough = self.splConPassthroughCheckbox.Value
                parent.compLayer = 
self.compatibilityLayouts[self.compatibilityList.GetSelection()][0]
                parent.autoUpdateCheck = self.autoUpdateCheckbox.Value
+               # To be unlocked in 8.0 beta 1.
+               #parent.updateChannel = ("stable", 
"lts")[self.channels.GetSelection()]
                parent.profiles.SetFocus()
                parent.Enable()
                self.Destroy()

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 69f693a..56f5ce5 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -26,6 +26,10 @@ SPLAddonCheck = 0
 SPLAddonState = {}
 # Update URL (the only way to change it is installing a different version from 
a different branch).
 SPLUpdateURL = "http://addons.nvda-project.org/files/get.php?file=spl";
+# To be unlocked in 8.0 beta 1.
+#_pendingChannelChange = False
+#_updateNow = False
+#SPLUpdateChannel = "stable"
 # Update check timer.
 _SPLUpdateT = None
 # How long it should wait between automatic checks.
@@ -35,16 +39,29 @@ _retryAfterFailure = False
 # Stores update state.
 _updatePickle = os.path.join(globalVars.appArgs.configPath, "splupdate.pickle")
 
+# Remove comment in 8.0 beta 1.
+"""channels={
+       "stable":"http://addons.nvda-project.org/files/get.php?file=spl";,
+       "lts":"http://spl.nvda-kr.org/files/get.php?file=spl-lts7";,
+}"""
+
 # Come forth, update check routines.
 def initialize():
-       global SPLAddonState, SPLAddonSize, SPLAddonCheck
+       # To be unlocked in 8.0 beta 1.
+       global SPLAddonState, SPLAddonSize, SPLAddonCheck #, _updateNow, 
SPLUpdateChannel
        try:
                SPLAddonState = cPickle.load(file(_updatePickle, "r"))
                SPLAddonCheck = SPLAddonState["PDT"]
                if "PSZ" in SPLAddonState: del SPLAddonState["PSZ"]
                if "PCH" in SPLAddonState: del SPLAddonState["PCH"]
+               # Unlock in 8.0 beta 1.
+               #_updateNow = "pendingChannelChange" in SPLAddonState
+               #if "UpdateChannel" in SPLAddonState:
+                       #SPLUpdateChannel = SPLAddonState["UpdateChannel"]
        except IOError:
                SPLAddonState["PDT"] = 0
+               #_updateNow = False
+               #SPLUpdateChannel = "stable"
 
 def terminate():
        global SPLAddonState
@@ -52,6 +69,10 @@ def terminate():
        stateChanged = SPLAddonState["PDT"] != SPLAddonCheck
        if stateChanged:
                SPLAddonState["PDT"] = SPLAddonCheck
+               # To be unlocked in 8.0 beta 1.
+               #SPLAddonState["UpdateChannel"] = SPLUpdateChannel
+               #if _pendingChannelChange:
+                       #SPLAddonState["pendingChannelChange"] = True
                cPickle.dump(SPLAddonState, file(_updatePickle, "wb"))
        SPLAddonState = None
 
@@ -77,14 +98,16 @@ def stopUpdateProgress():
        _progressThread.Stop()
        _progressThread = None
 
-def updateQualify(url):
+def updateQualify(url): # 7lts: , longterm=False):
        # The add-on version is of the form "major.minor". The "-dev" suffix 
indicates development release.
        # Anything after "-dev" indicates a try or a custom build.
        # LTS: Support upgrading between LTS releases.
        # 7.0: Just worry about version label differences (suggested by Jamie 
Teh from NV Access).
-       curVersion =SPLAddonVersion
+       curVersion = "7.0" if longterm else SPLAddonVersion
+       # LTS: Fool the add-on that it is running 7.0.
+       # To be unlocked in 8.0 beta 1.
+       #curVersion = "7.0" if longterm else SPLAddonVersion
        version = _versionFromURL(url.url)
-       # In case we are running the latest version, check the content length 
(size).
        if version == curVersion:
                return None
        elif version > curVersion:
@@ -96,6 +119,10 @@ def updateQualify(url):
 # Auto is whether to respond with UI (manual check only), continuous takes in 
auto update check variable for restarting the timer.
 # LTS: The "lts" flag is used to obtain update metadata from somewhere else 
(typically the LTS server).
 def updateCheck(auto=False, continuous=False, lts=False):
+       # Unlock in 8.0 beta 1.
+       #if _pendingChannelChange:
+               #wx.CallAfter(gui.messageBox, _("Did you recently tell SPL 
add-on to use a different update channel? If so, please restart NVDA before 
checking for add-on updates."), _("Update channel changed"), wx.ICON_ERROR)
+               #return
        global _SPLUpdateT, SPLAddonCheck, _retryAfterFailure
        # Regardless of whether it is an auto check, update the check time.
        # However, this shouldnt' be done if this is a retry after a failed 
attempt.
@@ -110,6 +137,8 @@ def updateCheck(auto=False, continuous=False, lts=False):
        updateCandidate = False
        try:
                url = urllib.urlopen(SPLUpdateURL)
+               # Replace in 8.0 beta 1.
+               #url = urllib.urlopen(channels[SPLUpdateChannel])
                url.close()
        except IOError:
                _retryAfterFailure = True
@@ -132,6 +161,8 @@ def updateCheck(auto=False, continuous=False, lts=False):
        else:
                # Am I qualified to update?
                qualified = updateQualify(url)
+               # Replace in 8.0 beta 1.
+               #qualified = updateQualify(url, longterm=SPLUpdateChannel == 
"lts")
                if qualified is None:
                        if auto:
                                if continuous: 
_SPLUpdateT.Start(_updateInterval*1000, True)


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/2dc9154b8946/
Changeset:   2dc9154b8946
Branch:      None
User:        josephsl
Date:        2016-06-14 02:49:31+00:00
Summary:     Merge branch 'stable' into 7.x

Affected #:  7 files

diff --git a/addon/locale/ar/LC_MESSAGES/nvda.po 
b/addon/locale/ar/LC_MESSAGES/nvda.po
index a841acd..45ca417 100755
--- a/addon/locale/ar/LC_MESSAGES/nvda.po
+++ b/addon/locale/ar/LC_MESSAGES/nvda.po
@@ -1370,6 +1370,7 @@ msgstr ""
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
+#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1385,7 +1386,8 @@ msgid ""
 "S: Stop with fade.\n"
 "T: Instant stop.\n"
 "E: Announce if any encoders are being monitored.\n"
-"R: Remainig time for the playing track.\n"
+"I: Announce listener count.\n"
+"R: Remaining time for the playing track.\n"
 "Shift+R: Library scan progress."
 msgstr ""
 "\n"
@@ -1442,6 +1444,11 @@ msgstr ""
 "لا يوجد مسار مشغل في الوقت الراهن. حاول استخدام التوقف المؤقت أثناء تشغيل "
 "أحد المسارات."
 
+#. Translators: Announces number of stream listeners.
+#, fuzzy, python-brace-format
+msgid "Listener count: {listenerCount}"
+msgstr "عدد المستمعين غير موجود"
+
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."
 msgstr "لا يوجد مسار مشغل حاليا"

diff --git a/addon/locale/de/LC_MESSAGES/nvda.po 
b/addon/locale/de/LC_MESSAGES/nvda.po
index 81f9ad3..be5b053 100644
--- a/addon/locale/de/LC_MESSAGES/nvda.po
+++ b/addon/locale/de/LC_MESSAGES/nvda.po
@@ -1444,6 +1444,7 @@ msgstr ""
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
+#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1459,7 +1460,8 @@ msgid ""
 "S: Stop with fade.\n"
 "T: Instant stop.\n"
 "E: Announce if any encoders are being monitored.\n"
-"R: Remainig time for the playing track.\n"
+"I: Announce listener count.\n"
+"R: Remaining time for the playing track.\n"
 "Shift+R: Library scan progress."
 msgstr ""
 "\n"
@@ -1517,6 +1519,11 @@ msgstr ""
 "Es wird momentan kein Titel Widergegeben. Sie können einen Titel anhalten, "
 "während ein Titel abgespielt wird."
 
+#. Translators: Announces number of stream listeners.
+#, fuzzy, python-brace-format
+msgid "Listener count: {listenerCount}"
+msgstr "Die Anzahl der Zuhörer konnten nicht ermittelt werden."
+
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."
 msgstr "Es wird momentan kein Titel wiedergegeben."

diff --git a/addon/locale/es/LC_MESSAGES/nvda.po 
b/addon/locale/es/LC_MESSAGES/nvda.po
index dba920a..f5c8277 100755
--- a/addon/locale/es/LC_MESSAGES/nvda.po
+++ b/addon/locale/es/LC_MESSAGES/nvda.po
@@ -1447,6 +1447,7 @@ msgstr ""
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
+#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1462,7 +1463,8 @@ msgid ""
 "S: Stop with fade.\n"
 "T: Instant stop.\n"
 "E: Announce if any encoders are being monitored.\n"
-"R: Remainig time for the playing track.\n"
+"I: Announce listener count.\n"
+"R: Remaining time for the playing track.\n"
 "Shift+R: Library scan progress."
 msgstr ""
 "\n"
@@ -1520,6 +1522,11 @@ msgstr ""
 "No hay pistas en reproducción. Trata de hacer una pausa mientras se "
 "reproduce una pista."
 
+#. Translators: Announces number of stream listeners.
+#, fuzzy, python-brace-format
+msgid "Listener count: {listenerCount}"
+msgstr "Recuento de oyentes no encontrado"
+
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."
 msgstr "No hay pista en reproducción."

diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po 
b/addon/locale/fr/LC_MESSAGES/nvda.po
index 5f7c719..45d0769 100755
--- a/addon/locale/fr/LC_MESSAGES/nvda.po
+++ b/addon/locale/fr/LC_MESSAGES/nvda.po
@@ -1446,6 +1446,7 @@ msgstr ""
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
+#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1461,7 +1462,8 @@ msgid ""
 "S: Stop with fade.\n"
 "T: Instant stop.\n"
 "E: Announce if any encoders are being monitored.\n"
-"R: Remainig time for the playing track.\n"
+"I: Announce listener count.\n"
+"R: Remaining time for the playing track.\n"
 "Shift+R: Library scan progress."
 msgstr ""
 "\n"
@@ -1519,6 +1521,11 @@ msgstr ""
 "Il n'y a aucune piste en cours de lecture. Essayez une pause lorsqu'une "
 "piste est jouée."
 
+#. Translators: Announces number of stream listeners.
+#, fuzzy, python-brace-format
+msgid "Listener count: {listenerCount}"
+msgstr "Nombre d'auditeurs introuvable"
+
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."
 msgstr "Il n'y a aucune piste en cours de lecture."

diff --git a/addon/locale/gl/LC_MESSAGES/nvda.po 
b/addon/locale/gl/LC_MESSAGES/nvda.po
index 24abe65..2c556d0 100755
--- a/addon/locale/gl/LC_MESSAGES/nvda.po
+++ b/addon/locale/gl/LC_MESSAGES/nvda.po
@@ -1437,6 +1437,7 @@ msgstr ""
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
+#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1452,7 +1453,8 @@ msgid ""
 "S: Stop with fade.\n"
 "T: Instant stop.\n"
 "E: Announce if any encoders are being monitored.\n"
-"R: Remainig time for the playing track.\n"
+"I: Announce listener count.\n"
+"R: Remaining time for the playing track.\n"
 "Shift+R: Library scan progress."
 msgstr ""
 "\n"
@@ -1510,6 +1512,11 @@ msgstr ""
 "Non hai pistas en reprodución. Tenta facer unha pausa mentras se reproduce "
 "unha pista."
 
+#. Translators: Announces number of stream listeners.
+#, fuzzy, python-brace-format
+msgid "Listener count: {listenerCount}"
+msgstr "Reconto de oíntes non atopado"
+
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."
 msgstr "Non hai pista en reprodución."

diff --git a/buildVars.py b/buildVars.py
index 0cd1688..f90ab29 100755
--- a/buildVars.py
+++ b/buildVars.py
@@ -20,7 +20,7 @@ addon_info = {
        "addon_description" : _("""Enhances support for Station Playlist Studio.
 In addition, adds global commands for the studio from everywhere."""),
        # version
-       "addon_version" : "7.1",
+       "addon_version" : "7.2",
        # Author(s)
        "addon_author" : u"Geoff Shang, Joseph Lee and other contributors",
        # URL for the add-on documentation support

diff --git a/readme.md b/readme.md
index ee83b83..583bb81 100755
--- a/readme.md
+++ b/readme.md
@@ -24,7 +24,7 @@ IMPORTANT: This add-on requires NVDA 2015.3 or later and 
StationPlaylist Studio
 * Alt+NVDA+R from Studio window: Steps through library scan announcement 
settings.
 * Control+Shift+X from Studio window: Steps through braille timer settings.
 * Control+Alt+right/left arrow (while focused on a track): Announce 
next/previous track column.
-* Control+NVDA+0 from Studio window: Opens the Studio add-on configuration 
dialog.
+* Control+NVDA+0 or Alt+NVDA+0 from Studio window: Opens the Studio add-on 
configuration dialog.
 * Control+NVDA+- (hyphen) from Studio window: Send feedback to add-on 
developer using the default email client.
 
 ## Unassigned commands
@@ -57,7 +57,7 @@ The following commands are available when using Sam or SPL 
encoders:
 * Control+F11: Toggles background monitoring of the selected encoder.
 * F12: Opens a dialog to enter custom label for the selected encoder or stream.
 * Control+F12: opens a dialog to select the encoder you have deleted (to 
realign stream labels and encoder settings).
-* Control+NVDA+0: Opens encoder settings dialog to configure options such as 
stream label.
+* Control+NVDA+0 or Alt+NVDA+0: Opens encoder settings dialog to configure 
options such as stream label.
 
 In addition, column review commands are available, including:
 
@@ -124,6 +124,7 @@ The available SPL Controller commands are:
 * Press R to hear remaining time for the currently playing track.
 * Press Shift+R to get a report on library scan progress.
 * Press E to get count and labels for encoders being monitored.
+* Press I to obtain listener count.
 * Press F1 to show a help dialog which lists available commands.
 
 ## Track alarms
@@ -160,7 +161,7 @@ By pressing SPL Assistant, 1 through 0 (6 for Studio 5.01 
and earlier), you can
 
 ## Configuration dialog
 
-From studio window, you can press Control+NVDA+0 to open the add-on 
configuration dialog. Alternatively, go to NVDA's preferences menu and select 
SPL Studio Settings item. This dialog is also used to manage broadcast profiles.
+From studio window, you can press Control+NVDA+0 or Alt+NVDA+0 to open the 
add-on configuration dialog. Alternatively, go to NVDA's preferences menu and 
select SPL Studio Settings item. This dialog is also used to manage broadcast 
profiles.
 
 ## SPL touch mode
 
@@ -172,6 +173,7 @@ If you are using Studio on a touchscreen computer running 
Windows 8 or later and
 * Added a command in SPL Controller to report listener count (I).
 * You can now open SPL add-on settings and encoder settings dialogs by 
pressing Alt+NVDA+0. You can still use Control+NVDA+0 to open these dialogs (to 
be removed in add-on 8.0).
 * In Track Tool, you can use Control+Alt+left or right arrow keys to navigate 
between columns.
+* Contents of various Studio dialogs such as About dialog in Studio 5.1x are 
now announced.
 * In SPL Encoders, NVDA will silence connection tone if auto-connect is 
enabled and then turned off from encoder context menu while the selected 
encoder is connecting.
 * Updated translations.
 


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/ffd2c4faad2b/
Changeset:   ffd2c4faad2b
Branch:      None
User:        josephsl
Date:        2016-07-04 19:55:24+00:00
Summary:     Merge branch 'stable' into 7.x

Affected #:  3 files

diff --git a/addon/appModules/splstudio/__init__.py 
b/addon/appModules/splstudio/__init__.py
index 68073e2..0a47ca7 100755
--- a/addon/appModules/splstudio/__init__.py
+++ b/addon/appModules/splstudio/__init__.py
@@ -1451,7 +1451,7 @@ class AppModule(appModuleHandler.AppModule):
        SPLScheduled = 7
 
        # Table of child constants based on versions
-       # These are scattered throughout the screen, so one can use 
foreground.children[index] to fetch them.
+       # These are scattered throughout the screen, so one can use 
foreground.getChild(index) to fetch them (getChild tip from Jamie Teh (NV 
Access)).
        # Because 5.x (an perhaps future releases) uses different screen 
layout, look up the needed constant from the table below (row = info needed, 
column = version).
        statusObjs={
                SPLPlayStatus:[5, 6], # Play status, mic, etc.
@@ -1477,7 +1477,7 @@ class AppModule(appModuleHandler.AppModule):
                        else: statusObj = self.statusObjs[infoIndex][1]
                        # 7.0: sometimes (especially when first loaded), 
OBJID_CLIENT fails, so resort to retrieving focused object instead.
                        if fg is not None and fg.childCount > 1:
-                               self._cachedStatusObjs[infoIndex] = 
fg.children[statusObj]
+                               self._cachedStatusObjs[infoIndex] = 
fg.getChild(statusObj)
                        else: return api.getFocusObject()
                return self._cachedStatusObjs[infoIndex]
 
@@ -1492,27 +1492,27 @@ class AppModule(appModuleHandler.AppModule):
                ui.message(msg)
 
        def script_sayAutomationStatus(self, gesture):
-               obj = self.status(self.SPLPlayStatus).children[1]
+               obj = self.status(self.SPLPlayStatus).getChild(1)
                msg = obj.name if 
splconfig.SPLConfig["General"]["MessageVerbosity"] == "beginner" else 
obj.name.split()[-1]
                ui.message(msg)
 
        def script_sayMicStatus(self, gesture):
-               obj = self.status(self.SPLPlayStatus).children[2]
+               obj = self.status(self.SPLPlayStatus).getChild(2)
                msg = obj.name if 
splconfig.SPLConfig["General"]["MessageVerbosity"] == "beginner" else 
obj.name.split()[-1]
                ui.message(msg)
 
        def script_sayLineInStatus(self, gesture):
-               obj = self.status(self.SPLPlayStatus).children[3]
+               obj = self.status(self.SPLPlayStatus).getChild(3)
                msg = obj.name if 
splconfig.SPLConfig["General"]["MessageVerbosity"] == "beginner" else 
obj.name.split()[-1]
                ui.message(msg)
 
        def script_sayRecToFileStatus(self, gesture):
-               obj = self.status(self.SPLPlayStatus).children[4]
+               obj = self.status(self.SPLPlayStatus).getChild(4)
                msg = obj.name if 
splconfig.SPLConfig["General"]["MessageVerbosity"] == "beginner" else 
obj.name.split()[-1]
                ui.message(msg)
 
        def script_sayCartEditStatus(self, gesture):
-               obj = self.status(self.SPLPlayStatus).children[5]
+               obj = self.status(self.SPLPlayStatus).getChild(5)
                msg = obj.name if 
splconfig.SPLConfig["General"]["MessageVerbosity"] == "beginner" else 
obj.name.split()[-1]
                ui.message(msg)
 
@@ -1543,7 +1543,7 @@ class AppModule(appModuleHandler.AppModule):
 
        def script_sayPlaylistModified(self, gesture):
                try:
-                       obj = self.status(self.SPLSystemStatus).children[5]
+                       obj = self.status(self.SPLSystemStatus).getChild(5)
                        ui.message(obj.name)
                except IndexError:
                        # Translators: Presented when playlist modification is 
unavailable (for Studio 4.33 and earlier)
@@ -1603,13 +1603,13 @@ class AppModule(appModuleHandler.AppModule):
                ui.message(obj.name)
 
        def script_sayListenerCount(self, gesture):
-               obj = self.status(self.SPLSystemStatus).children[3]
+               obj = self.status(self.SPLSystemStatus).getChild(3)
                # Translators: Presented when there is no listener count 
information.
                ui.message(obj.name) if obj.name is not None else 
ui.message(_("Listener count not found"))
 
        def script_sayTrackPitch(self, gesture):
                try:
-                       obj = self.status(self.SPLSystemStatus).children[4]
+                       obj = self.status(self.SPLSystemStatus).getChild(4)
                        ui.message(obj.name)
                except IndexError:
                        # Translators: Presented when there is no information 
on song pitch (for Studio 4.33 and earlier).

diff --git a/addon/locale/es/LC_MESSAGES/nvda.po 
b/addon/locale/es/LC_MESSAGES/nvda.po
index f5c8277..69e9e51 100755
--- a/addon/locale/es/LC_MESSAGES/nvda.po
+++ b/addon/locale/es/LC_MESSAGES/nvda.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: StationPlaylist 1.1-dev\n"
 "Report-Msgid-Bugs-To: nvda-translations@xxxxxxxxxxxxx\n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-05-16 10:25+0100\n"
+"PO-Revision-Date: 2016-06-15 18:43+0100\n"
 "Last-Translator: Juan C. Buño <oprisniki@xxxxxxxxx>\n"
 "Language-Team: Add-ons translation team <LL@xxxxxx>\n"
 "Language: es_ES\n"
@@ -1447,7 +1447,6 @@ msgstr ""
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
-#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1468,7 +1467,7 @@ msgid ""
 "Shift+R: Library scan progress."
 msgstr ""
 "\n"
-"Después de introducir SPL Controller, pulsa:\n"
+"Después de entrar en SPL Controller, pulsa:\n"
 "A: Enciende la automatización.\n"
 "Shift+A: Apaga la automatización.\n"
 "M: Enciende el micrófono.\n"
@@ -1481,6 +1480,7 @@ msgstr ""
 "S: Detener con fade.\n"
 "T: Detener instantáneamente.\n"
 "E: Anuncia si cualquier codificador está siendo monitorizado.\n"
+"I: anuncia el recuento de oyentes.\n"
 "R: Tiempo restante para la pista en reproducción.\n"
 "Shift+R: Progreso del escaneado de la biblioteca."
 
@@ -1523,9 +1523,9 @@ msgstr ""
 "reproduce una pista."
 
 #. Translators: Announces number of stream listeners.
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Listener count: {listenerCount}"
-msgstr "Recuento de oyentes no encontrado"
+msgstr "Recuento de oyentes: {listenerCount}"
 
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."

diff --git a/addon/locale/gl/LC_MESSAGES/nvda.po 
b/addon/locale/gl/LC_MESSAGES/nvda.po
index 2c556d0..f8fdb74 100755
--- a/addon/locale/gl/LC_MESSAGES/nvda.po
+++ b/addon/locale/gl/LC_MESSAGES/nvda.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: StationPlaylist 1.1-dev\n"
 "Report-Msgid-Bugs-To: nvda-translations@xxxxxxxxxxxxx\n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-05-16 10:28+0100\n"
+"PO-Revision-Date: 2016-06-15 18:46+0100\n"
 "Last-Translator: Juan C. Buño <oprisniki@xxxxxxxxx>\n"
 "Language-Team: Add-ons translation team <oprisniki@xxxxxxxxx>\n"
 "Language: gl\n"
@@ -1437,7 +1437,6 @@ msgstr ""
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
-#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1458,7 +1457,7 @@ msgid ""
 "Shift+R: Library scan progress."
 msgstr ""
 "\n"
-"Despois de introducir SPL Controller, preme:\n"
+"Despois de entrar no SPL Controller, preme:\n"
 "A: Encende a automatización.\n"
 "Shift+A: Apaga a automatización.\n"
 "M: Encende o micrófono.\n"
@@ -1471,6 +1470,7 @@ msgstr ""
 "S: Deter co fade.\n"
 "T: Deter instantáneamente.\n"
 "E: Anuncia se calquera codificador está a ser monitorizado.\n"
+"I: anuncia o reconto de oíntes.\n"
 "R: Tempo restante para a pista en reprodución.\n"
 "Shift+R: Progreso do escaneado da biblioteca."
 
@@ -1513,9 +1513,9 @@ msgstr ""
 "unha pista."
 
 #. Translators: Announces number of stream listeners.
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Listener count: {listenerCount}"
-msgstr "Reconto de oíntes non atopado"
+msgstr "Reconto de oíntes: {listenerCount}"
 
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/760c2e28c12c/
Changeset:   760c2e28c12c
Branch:      None
User:        josephsl
Date:        2016-07-05 19:25:20+00:00
Summary:     7.4 or later: Allow broadcasters to configure auto update interval.

Because stable versions are released less frequently, it would be safe to 
assume that users would check for updates once a week. Thus introduce a new 
setting in advanced options dialog that'll let users specify update interval 
between 1 and 30 days. The overall switch is still auto update checkbox.
This is destined for add-on 7.4 and later.

Affected #:  4 files

diff --git a/addon/appModules/splstudio/__init__.py 
b/addon/appModules/splstudio/__init__.py
index 0a47ca7..66814b9 100755
--- a/addon/appModules/splstudio/__init__.py
+++ b/addon/appModules/splstudio/__init__.py
@@ -1766,7 +1766,7 @@ class AppModule(appModuleHandler.AppModule):
        def script_updateCheck(self, gesture):
                self.finish()
                if splupdate._SPLUpdateT is not None and 
splupdate._SPLUpdateT.IsRunning(): splupdate._SPLUpdateT.Stop()
-               
splupdate.updateCheck(continuous=splconfig.SPLConfig["Update"]["AutoUpdateCheck"])
+               
splupdate.updateCheck(continuous=splconfig.SPLConfig["Update"]["AutoUpdateCheck"],
 confUpdateInterval=splconfig.SPLConfig["Update"]["UpdateInterval"])
 
 
        __SPLAssistantGestures={

diff --git a/addon/appModules/splstudio/splconfig.py 
b/addon/appModules/splstudio/splconfig.py
index bb61374..0888bd6 100755
--- a/addon/appModules/splstudio/splconfig.py
+++ b/addon/appModules/splstudio/splconfig.py
@@ -61,6 +61,7 @@ CompatibilityLayer = option("off", "jfw", "wineyes", 
default="off")
 ProfileTriggerThreshold = integer(min=5, max=60, default=15)
 [Update]
 AutoUpdateCheck = boolean(default=true)
+UpdateInterval = integer(min=1, max=30, default=7)
 [Startup]
 AudioDuckingReminder = boolean(default=true)
 """), encoding="UTF-8", list_values=False)
@@ -691,7 +692,7 @@ def triggerProfileSwitch():
 # Its only job is to call the update check function (splupdate) with the auto 
check enabled.
 # The update checker will not be engaged if an instant switch profile is 
active or it is not time to check for it yet (check will be done every 24 
hours).
 def autoUpdateCheck():
-       splupdate.updateCheck(auto=True, 
continuous=SPLConfig["Update"]["AutoUpdateCheck"])
+       splupdate.updateCheck(auto=True, 
continuous=SPLConfig["Update"]["AutoUpdateCheck"], 
confUpdateInterval=SPLConfig["Update"]["UpdateInterval"])
 
 # The timer itself.
 # A bit simpler than NVDA Core's auto update checker.
@@ -704,11 +705,11 @@ def updateInit():
                #splupdate._updateNow = False
                #return
        currentTime = time.time()
-       nextCheck = splupdate.SPLAddonCheck+86400.0
+       nextCheck = 
splupdate.SPLAddonCheck+(SPLConfig["Update"]["UpdateInterval"]* 86400.0)
        if splupdate.SPLAddonCheck < currentTime < nextCheck:
                interval = int(nextCheck - currentTime)
        elif splupdate.SPLAddonCheck < nextCheck < currentTime:
-               interval = 86400
+               interval = SPLConfig["Update"]["UpdateInterval"]* 86400
                # Call the update check now.
                splupdate.updateCheck(auto=True) # No repeat here.
        splupdate._SPLUpdateT = wx.PyTimer(autoUpdateCheck)

diff --git a/addon/appModules/splstudio/splconfui.py 
b/addon/appModules/splstudio/splconfui.py
index b9c63c1..97529ee 100755
--- a/addon/appModules/splstudio/splconfui.py
+++ b/addon/appModules/splstudio/splconfui.py
@@ -307,6 +307,7 @@ class SPLConfigDialog(gui.SettingsDialog):
                self.splConPassthrough = 
splconfig.SPLConfig["Advanced"]["SPLConPassthrough"]
                self.compLayer = 
splconfig.SPLConfig["Advanced"]["CompatibilityLayer"]
                self.autoUpdateCheck = 
splconfig.SPLConfig["Update"]["AutoUpdateCheck"]
+               self.updateInterval = 
splconfig.SPLConfig["Update"]["UpdateInterval"]
                # To be unlocked in 8.0 beta 1.
                #self.updateChannel = splupdate.SPLUpdateChannel
                #self.pendingChannelChange = False
@@ -353,6 +354,7 @@ class SPLConfigDialog(gui.SettingsDialog):
                splconfig.SPLConfig["Advanced"]["SPLConPassthrough"] = 
self.splConPassthrough
                splconfig.SPLConfig["Advanced"]["CompatibilityLayer"] = 
self.compLayer
                splconfig.SPLConfig["Update"]["AutoUpdateCheck"] = 
self.autoUpdateCheck
+               splconfig.SPLConfig["Update"]["UpdateInterval"] = 
self.updateInterval
                # To be unlocked in 8.0 beta 1.
                #self.pendingChannelChange = splupdate.SPLUpdateChannel != 
self.updateChannel
                #splupdate.SPLUpdateChannel = self.updateChannel
@@ -1279,11 +1281,18 @@ class AdvancedOptionsDialog(wx.Dialog):
 
                mainSizer = wx.BoxSizer(wx.VERTICAL)
 
-               sizer = wx.BoxSizer(wx.HORIZONTAL)
+               sizer = wx.BoxSizer(wx.VERTICAL)
                # Translators: A checkbox to toggle automatic add-on updates.
                
self.autoUpdateCheckbox=wx.CheckBox(self,wx.NewId(),label=_("Automatically 
check for add-on &updates"))
                self.autoUpdateCheckbox.SetValue(self.Parent.autoUpdateCheck)
                sizer.Add(self.autoUpdateCheckbox, border=10,flag=wx.TOP)
+               # Translators: The label for a setting in SPL add-on 
settings/advanced options to select automatic update interval in days.
+               label = wx.StaticText(self, wx.ID_ANY, label=_("Update 
&interval in days"))
+               sizer.Add(label)
+               self.updateInterval= wx.SpinCtrl(self, wx.ID_ANY, min=1, max=30)
+               self.updateInterval.SetValue(long(parent.updateInterval))
+               self.updateInterval.SetSelection(-1, -1)
+               sizer.Add(self.updateInterval)
                mainSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
                # LTS and 8.x only.
@@ -1334,6 +1343,7 @@ class AdvancedOptionsDialog(wx.Dialog):
                parent.splConPassthrough = self.splConPassthroughCheckbox.Value
                parent.compLayer = 
self.compatibilityLayouts[self.compatibilityList.GetSelection()][0]
                parent.autoUpdateCheck = self.autoUpdateCheckbox.Value
+               parent.updateInterval = self.updateInterval.Value
                # To be unlocked in 8.0 beta 1.
                #parent.updateChannel = ("stable", 
"lts")[self.channels.GetSelection()]
                parent.profiles.SetFocus()

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 56f5ce5..5f54606 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -118,7 +118,8 @@ def updateQualify(url): # 7lts: , longterm=False):
 # The update check routine.
 # Auto is whether to respond with UI (manual check only), continuous takes in 
auto update check variable for restarting the timer.
 # LTS: The "lts" flag is used to obtain update metadata from somewhere else 
(typically the LTS server).
-def updateCheck(auto=False, continuous=False, lts=False):
+# ConfUpdateInterval comes from add-on config dictionary.
+def updateCheck(auto=False, continuous=False, lts=False, confUpdateInterval=1):
        # Unlock in 8.0 beta 1.
        #if _pendingChannelChange:
                #wx.CallAfter(gui.messageBox, _("Did you recently tell SPL 
add-on to use a different update channel? If so, please restart NVDA before 
checking for add-on updates."), _("Update channel changed"), wx.ICON_ERROR)
@@ -127,8 +128,9 @@ def updateCheck(auto=False, continuous=False, lts=False):
        # Regardless of whether it is an auto check, update the check time.
        # However, this shouldnt' be done if this is a retry after a failed 
attempt.
        if not _retryAfterFailure: SPLAddonCheck = time.time()
+       updateInterval = confUpdateInterval*_updateInterval*1000
        # Should the timer be set again?
-       if continuous and not _retryAfterFailure: 
_SPLUpdateT.Start(_updateInterval*1000, True)
+       if continuous and not _retryAfterFailure: 
_SPLUpdateT.Start(updateInterval, True)
        # Auto disables UI portion of this function if no updates are pending.
        if not auto: tones.beep(110, 40)
        # All the information will be stored in the URL object, so just close 
it once the headers are downloaded.
@@ -154,7 +156,7 @@ def updateCheck(auto=False, continuous=False, lts=False):
                SPLAddonCheck = time.time()
        if url.code != 200:
                if auto:
-                       if continuous: _SPLUpdateT.Start(_updateInterval*1000, 
True)
+                       if continuous: _SPLUpdateT.Start(updateInterval, True)
                        return # No need to interact with the user.
                # Translators: Text shown when update check fails for some odd 
reason.
                checkMessage = _("Add-on update check failed.")
@@ -165,13 +167,13 @@ def updateCheck(auto=False, continuous=False, lts=False):
                #qualified = updateQualify(url, longterm=SPLUpdateChannel == 
"lts")
                if qualified is None:
                        if auto:
-                               if continuous: 
_SPLUpdateT.Start(_updateInterval*1000, True)
+                               if continuous: 
_SPLUpdateT.Start(updateInterval, True)
                                return
                        # Translators: Presented when no add-on update is 
available.
                        checkMessage = _("No add-on update available.")
                elif qualified == "":
                        if auto:
-                               if continuous: 
_SPLUpdateT.Start(_updateInterval*1000, True)
+                               if continuous: 
_SPLUpdateT.Start(updateInterval, True)
                                return
                        # Translators: An error text shown when one is using a 
newer version of the add-on.
                        checkMessage = _("You appear to be running a version 
newer than the latest released version. Please reinstall the official version 
to downgrade.")


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/d55e8209936f/
Changeset:   d55e8209936f
Branch:      None
User:        josephsl
Date:        2016-07-07 22:53:50+00:00
Summary:     7.4: Update progress bar dialog is brielfy shown when checking for 
add-on update.

Inspired by the routine used during add-on installation: a 'fake' progress 
dialog is shown when installing add-ons. Use this and adopt it to SPL add-on 
updates.
This is destined for add-on 7.4 and lter.

Affected #:  1 file

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 5f54606..42f2323 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -82,22 +82,6 @@ def _versionFromURL(url):
        name = filename.split(".nvda-addon")[0]
        return name[name.find("-")+1:]
 
-# Run the progress thread from another thread because urllib.urlopen blocks 
everyone.
-_progressThread = None
-
-def _updateProgress():
-       tones.beep(440, 40)
-
-def updateProgress():
-       global _progressThread
-       _progressThread = wx.PyTimer(updateProgress)
-       _progressThread.Start(1000)
-
-def stopUpdateProgress():
-       global _progressThread
-       _progressThread.Stop()
-       _progressThread = None
-
 def updateQualify(url): # 7lts: , longterm=False):
        # The add-on version is of the form "major.minor". The "-dev" suffix 
indicates development release.
        # Anything after "-dev" indicates a try or a custom build.
@@ -132,10 +116,15 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
        # Should the timer be set again?
        if continuous and not _retryAfterFailure: 
_SPLUpdateT.Start(updateInterval, True)
        # Auto disables UI portion of this function if no updates are pending.
-       if not auto: tones.beep(110, 40)
-       # All the information will be stored in the URL object, so just close 
it once the headers are downloaded.
        if not auto:
-               threading.Thread(target=updateProgress).start()
+               tones.beep(110, 40)
+               # Display the update check progress dialog (inspired by add-on 
installation dialog in NvDA Core).
+               progressDialog = gui.IndeterminateProgressDialog(gui.mainFrame,
+               # Translators: The title of the dialog presented while checking 
for add-on updates.
+               _("Add-on update"),
+               # Translators: The message displayed while checking for newer 
version of Studio add-on.
+               _("Checking for new version of Studio add-on..."))
+       # All the information will be stored in the URL object, so just close 
it once the headers are downloaded.
        updateCandidate = False
        try:
                url = urllib.urlopen(SPLUpdateURL)
@@ -145,7 +134,8 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
        except IOError:
                _retryAfterFailure = True
                if not auto:
-                       stopUpdateProgress()
+                       progressDialog.done()
+                       del progressDialog
                        # Translators: Error text shown when add-on update 
check fails.
                        wx.CallAfter(gui.messageBox, _("Error checking for 
update."), _("Check for add-on update"), wx.ICON_ERROR)
                if continuous: _SPLUpdateT.Start(600000, True)
@@ -181,7 +171,9 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
                        # Translators: Text shown if an add-on update is 
available.
                        checkMessage = _("Studio add-on {newVersion} is 
available. Would you like to update?").format(newVersion = qualified)
                        updateCandidate = True
-       if not auto: stopUpdateProgress()
+       if not auto:
+               progressDialog.done()
+               del progressDialog
        # Translators: Title of the add-on update check dialog.
        if not updateCandidate: wx.CallAfter(gui.messageBox, checkMessage, 
_("Check for add-on update"))
        else: wx.CallAfter(getUpdateResponse, checkMessage, _("Check for add-on 
update"), url.info().getheader("Content-Length"))


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/3300a9b00d53/
Changeset:   3300a9b00d53
Branch:      None
User:        josephsl
Date:        2016-07-12 14:54:50+00:00
Summary:     7.4: Progress dialog calling routine reordered, update size 
removed.

Borrowing from NVDA Core: be sure to start progress dialog before using another 
thread to run update check and the resulting dialog. This menas a private 
reference to progress dialog will be kept by splupdate module.
As update file size is no longer consulted, remove this variable from update  
check routine and from the update module.
This is destined for add-on 7.4 or later.

Affected #:  2 files

diff --git a/addon/appModules/splstudio/__init__.py 
b/addon/appModules/splstudio/__init__.py
index 66814b9..55370aa 100755
--- a/addon/appModules/splstudio/__init__.py
+++ b/addon/appModules/splstudio/__init__.py
@@ -1766,7 +1766,13 @@ class AppModule(appModuleHandler.AppModule):
        def script_updateCheck(self, gesture):
                self.finish()
                if splupdate._SPLUpdateT is not None and 
splupdate._SPLUpdateT.IsRunning(): splupdate._SPLUpdateT.Stop()
-               
splupdate.updateCheck(continuous=splconfig.SPLConfig["Update"]["AutoUpdateCheck"],
 confUpdateInterval=splconfig.SPLConfig["Update"]["UpdateInterval"])
+               # Display the update check progress dialog (inspired by add-on 
installation dialog in NvDA Core).
+               splupdate._progressDialog = 
gui.IndeterminateProgressDialog(gui.mainFrame,
+               # Translators: The title of the dialog presented while checking 
for add-on updates.
+               _("Add-on update"),
+               # Translators: The message displayed while checking for newer 
version of Studio add-on.
+               _("Checking for new version of Studio add-on..."))
+               threading.Thread(target=splupdate.updateCheck, 
kwargs={"continuous":splconfig.SPLConfig["Update"]["AutoUpdateCheck"], 
"confUpdateInterval":splconfig.SPLConfig["Update"]["UpdateInterval"]}).start()
 
 
        __SPLAssistantGestures={

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 42f2323..3b133d2 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -48,7 +48,7 @@ _updatePickle = os.path.join(globalVars.appArgs.configPath, 
"splupdate.pickle")
 # Come forth, update check routines.
 def initialize():
        # To be unlocked in 8.0 beta 1.
-       global SPLAddonState, SPLAddonSize, SPLAddonCheck #, _updateNow, 
SPLUpdateChannel
+       global SPLAddonState, SPLAddonCheck #, _updateNow, SPLUpdateChannel
        try:
                SPLAddonState = cPickle.load(file(_updatePickle, "r"))
                SPLAddonCheck = SPLAddonState["PDT"]
@@ -87,7 +87,7 @@ def updateQualify(url): # 7lts: , longterm=False):
        # Anything after "-dev" indicates a try or a custom build.
        # LTS: Support upgrading between LTS releases.
        # 7.0: Just worry about version label differences (suggested by Jamie 
Teh from NV Access).
-       curVersion = "7.0" if longterm else SPLAddonVersion
+       curVersion = "7.0" if longterm else curVersion = SPLAddonVersion
        # LTS: Fool the add-on that it is running 7.0.
        # To be unlocked in 8.0 beta 1.
        #curVersion = "7.0" if longterm else SPLAddonVersion
@@ -99,6 +99,8 @@ def updateQualify(url): # 7lts: , longterm=False):
        else:
                return ""
 
+_progressDialog = None
+
 # The update check routine.
 # Auto is whether to respond with UI (manual check only), continuous takes in 
auto update check variable for restarting the timer.
 # LTS: The "lts" flag is used to obtain update metadata from somewhere else 
(typically the LTS server).
@@ -108,7 +110,7 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
        #if _pendingChannelChange:
                #wx.CallAfter(gui.messageBox, _("Did you recently tell SPL 
add-on to use a different update channel? If so, please restart NVDA before 
checking for add-on updates."), _("Update channel changed"), wx.ICON_ERROR)
                #return
-       global _SPLUpdateT, SPLAddonCheck, _retryAfterFailure
+       global _SPLUpdateT, SPLAddonCheck, _retryAfterFailure, _progressDialog
        # Regardless of whether it is an auto check, update the check time.
        # However, this shouldnt' be done if this is a retry after a failed 
attempt.
        if not _retryAfterFailure: SPLAddonCheck = time.time()
@@ -116,14 +118,6 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
        # Should the timer be set again?
        if continuous and not _retryAfterFailure: 
_SPLUpdateT.Start(updateInterval, True)
        # Auto disables UI portion of this function if no updates are pending.
-       if not auto:
-               tones.beep(110, 40)
-               # Display the update check progress dialog (inspired by add-on 
installation dialog in NvDA Core).
-               progressDialog = gui.IndeterminateProgressDialog(gui.mainFrame,
-               # Translators: The title of the dialog presented while checking 
for add-on updates.
-               _("Add-on update"),
-               # Translators: The message displayed while checking for newer 
version of Studio add-on.
-               _("Checking for new version of Studio add-on..."))
        # All the information will be stored in the URL object, so just close 
it once the headers are downloaded.
        updateCandidate = False
        try:
@@ -134,8 +128,8 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
        except IOError:
                _retryAfterFailure = True
                if not auto:
-                       progressDialog.done()
-                       del progressDialog
+                       wx.CallAfter(_progressDialog.done)
+                       _progressDialog = None
                        # Translators: Error text shown when add-on update 
check fails.
                        wx.CallAfter(gui.messageBox, _("Error checking for 
update."), _("Check for add-on update"), wx.ICON_ERROR)
                if continuous: _SPLUpdateT.Start(600000, True)
@@ -172,15 +166,13 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
                        checkMessage = _("Studio add-on {newVersion} is 
available. Would you like to update?").format(newVersion = qualified)
                        updateCandidate = True
        if not auto:
-               progressDialog.done()
-               del progressDialog
+               wx.CallAfter(_progressDialog.done)
+               _progressDialog = None
        # Translators: Title of the add-on update check dialog.
        if not updateCandidate: wx.CallAfter(gui.messageBox, checkMessage, 
_("Check for add-on update"))
        else: wx.CallAfter(getUpdateResponse, checkMessage, _("Check for add-on 
update"), url.info().getheader("Content-Length"))
 
 def getUpdateResponse(message, caption, size):
-       global SPLAddonSize
        if gui.messageBox(message, caption, wx.YES | wx.NO | wx.CANCEL | 
wx.CENTER | wx.ICON_QUESTION) == wx.YES:
-               SPLAddonSize = hex(int(size))
                os.startfile(SPLUpdateURL)
 


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/b755de10283d/
Changeset:   b755de10283d
Branch:      None
User:        josephsl
Date:        2016-07-22 07:32:58+00:00
Summary:     7.4: Officially change display name for the add-on, do not allow 
global commands to work in secure mode.

As noted during recent reviews for add-ons, it might be helpful to detect one 
is in secure mode, thus disabling global features. For SPL, it concerns SPL 
Controller entry and SPL window focus switch commands. Specifically:
* In secure screens, one cannot obtain handle to SPL window at all, so these 
comands will not work properly (at least SPL Controller will say handle is 0 
when in fact SPL is running).
* Allowing folks to switch to Studio window in secure mode is a security risk, 
in that one can jump out of an important prompt (not even possible in secure 
screens).
Thus use globalVars.appArgs.secure to make sure this is enforced.
Also took this time to (finally) give proper label for the add-on (Station 
Playlist Studio -> StationPlaylist Studio).
These changes are destined for add-on 7.4 and later.

Affected #:  2 files

diff --git a/addon/globalPlugins/SPLStudioUtils/__init__.py 
b/addon/globalPlugins/SPLStudioUtils/__init__.py
index fa2da9c..faa4f39 100755
--- a/addon/globalPlugins/SPLStudioUtils/__init__.py
+++ b/addon/globalPlugins/SPLStudioUtils/__init__.py
@@ -10,6 +10,7 @@ import globalPluginHandler
 import api
 from controlTypes import ROLE_LISTITEM
 import ui
+import globalVars
 from NVDAObjects.IAccessible import getNVDAObjectFromEvent
 import winUser
 import tones
@@ -97,7 +98,7 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
        # Translators: Script category for Station Playlist commands in input 
gestures dialog.
        scriptCategory = _("StationPlaylist Studio")
 
-                       #Global layer environment (see the app module for more 
information).
+       #Global layer environment (see the app module for more information).
        SPLController = False # Control SPL from anywhere.
 
        def getScript(self, gesture):
@@ -118,6 +119,8 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
 
        # Switch focus to SPL Studio window from anywhere.
        def script_focusToSPLWindow(self, gesture):
+               # 7.4: Forget it if this is the case like the following.
+               if globalVars.appArgs.secure: return
                # Don't do anything if we're already focus on SPL Studio.
                if "splstudio" in 
api.getForegroundObject().appModule.appModuleName: return
                else:
@@ -135,6 +138,8 @@ class GlobalPlugin(globalPluginHandler.GlobalPlugin):
        # The SPL Controller:
        # This layer set allows the user to control various aspects of SPL 
Studio from anywhere.
        def script_SPLControllerPrefix(self, gesture):
+               # 7.4: Red flag...
+               if globalVars.appArgs.secure: return
                global SPLWin
                # Error checks:
                # 1. If SPL Studio is not running, print an error message.

diff --git a/buildVars.py b/buildVars.py
index f90ab29..63d0668 100755
--- a/buildVars.py
+++ b/buildVars.py
@@ -14,10 +14,10 @@ addon_info = {
        "addon_name" : "stationPlaylist",
        # Add-on summary, usually the user visible name of the addon.
        # Translators: Summary for this add-on to be shown on installation and 
add-on information.
-       "addon_summary" : _("Station Playlist Studio"),
+       "addon_summary" : _("StationPlaylist Studio"),
        # Add-on description
        # Translators: Long description to be shown for this add-on on add-on 
information from add-ons manager
-       "addon_description" : _("""Enhances support for Station Playlist Studio.
+       "addon_description" : _("""Enhances support for StationPlaylist Studio.
 In addition, adds global commands for the studio from everywhere."""),
        # version
        "addon_version" : "7.2",


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/4bc16312a523/
Changeset:   4bc16312a523
Branch:      None
User:        josephsl
Date:        2016-07-25 17:36:30+00:00
Summary:     7.4/8.0/LTS: Simplify update check by checking for version 
differences only.

As noted by Jamie Teh (NV Access): it is better to check for string differences 
rather than making it complicated. Thus starting with 7.4, update check will 
check version differences. This means the error message that says one is using 
a newer version of the add-on is no more, as well as simplifying LTS check 
process.
This is destined for add-on 7.4.

Affected #:  2 files

diff --git a/addon/appModules/splstudio/splconfig.py 
b/addon/appModules/splstudio/splconfig.py
index 0888bd6..b9249c6 100755
--- a/addon/appModules/splstudio/splconfig.py
+++ b/addon/appModules/splstudio/splconfig.py
@@ -700,7 +700,7 @@ def updateInit():
        # LTS: Launch updater if channel change is detected.
        # To be unlocked in 8.0 beta 1.
        #if splupdate._updateNow:
-               #splupdate.updateCheck(auto=True, 
lts=splupdate.SPLUpdateChannel == "lts") # No repeat here.
+               #splupdate.updateCheck(auto=True) # No repeat here.
                #splupdate._SPLUpdateT = wx.PyTimer(autoUpdateCheck)
                #splupdate._updateNow = False
                #return

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 3b133d2..6df519f 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -82,30 +82,21 @@ def _versionFromURL(url):
        name = filename.split(".nvda-addon")[0]
        return name[name.find("-")+1:]
 
-def updateQualify(url): # 7lts: , longterm=False):
+def updateQualify(url):
        # The add-on version is of the form "major.minor". The "-dev" suffix 
indicates development release.
        # Anything after "-dev" indicates a try or a custom build.
        # LTS: Support upgrading between LTS releases.
        # 7.0: Just worry about version label differences (suggested by Jamie 
Teh from NV Access).
        curVersion = "7.0" if longterm else curVersion = SPLAddonVersion
-       # LTS: Fool the add-on that it is running 7.0.
-       # To be unlocked in 8.0 beta 1.
-       #curVersion = "7.0" if longterm else SPLAddonVersion
        version = _versionFromURL(url.url)
-       if version == curVersion:
-               return None
-       elif version > curVersion:
-               return version
-       else:
-               return ""
+       return None if version == curVersion else version
 
 _progressDialog = None
 
 # The update check routine.
 # Auto is whether to respond with UI (manual check only), continuous takes in 
auto update check variable for restarting the timer.
-# LTS: The "lts" flag is used to obtain update metadata from somewhere else 
(typically the LTS server).
 # ConfUpdateInterval comes from add-on config dictionary.
-def updateCheck(auto=False, continuous=False, lts=False, confUpdateInterval=1):
+def updateCheck(auto=False, continuous=False, confUpdateInterval=1):
        # Unlock in 8.0 beta 1.
        #if _pendingChannelChange:
                #wx.CallAfter(gui.messageBox, _("Did you recently tell SPL 
add-on to use a different update channel? If so, please restart NVDA before 
checking for add-on updates."), _("Update channel changed"), wx.ICON_ERROR)
@@ -147,20 +138,12 @@ def updateCheck(auto=False, continuous=False, lts=False, 
confUpdateInterval=1):
        else:
                # Am I qualified to update?
                qualified = updateQualify(url)
-               # Replace in 8.0 beta 1.
-               #qualified = updateQualify(url, longterm=SPLUpdateChannel == 
"lts")
                if qualified is None:
                        if auto:
                                if continuous: 
_SPLUpdateT.Start(updateInterval, True)
                                return
                        # Translators: Presented when no add-on update is 
available.
                        checkMessage = _("No add-on update available.")
-               elif qualified == "":
-                       if auto:
-                               if continuous: 
_SPLUpdateT.Start(updateInterval, True)
-                               return
-                       # Translators: An error text shown when one is using a 
newer version of the add-on.
-                       checkMessage = _("You appear to be running a version 
newer than the latest released version. Please reinstall the official version 
to downgrade.")
                else:
                        # Translators: Text shown if an add-on update is 
available.
                        checkMessage = _("Studio add-on {newVersion} is 
available. Would you like to update?").format(newVersion = qualified)


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/168ac7d23eb3/
Changeset:   168ac7d23eb3
Branch:      None
User:        josephsl
Date:        2016-07-25 17:38:07+00:00
Summary:     Merge branch 'stable' into 7.x

Affected #:  4 files

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 6df519f..8c95709 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -78,9 +78,9 @@ def terminate():
 
 
 def _versionFromURL(url):
+       # 7.3: Be sure to handle both GitHub and old URL format.
        filename = url.split("/")[-1]
-       name = filename.split(".nvda-addon")[0]
-       return name[name.find("-")+1:]
+       return filename.split("stationPlaylist-")[1].split(".nvda-addon")[0]
 
 def updateQualify(url):
        # The add-on version is of the form "major.minor". The "-dev" suffix 
indicates development release.

diff --git a/addon/locale/fr/LC_MESSAGES/nvda.po 
b/addon/locale/fr/LC_MESSAGES/nvda.po
index 45d0769..fa2ee35 100755
--- a/addon/locale/fr/LC_MESSAGES/nvda.po
+++ b/addon/locale/fr/LC_MESSAGES/nvda.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: StationPlaylist 4.1\n"
 "Report-Msgid-Bugs-To: nvda-translations@xxxxxxxxxxxxx\n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-03-04 22:01+0100\n"
+"PO-Revision-Date: 2016-07-13 12:06+0100\n"
 "Last-Translator: Rémy Ruiz <remyruiz@xxxxxxxxx>\n"
 "Language-Team: Rémy Ruiz <remyruiz@xxxxxxxxx>\n"
 "Language: fr\n"
@@ -56,9 +56,9 @@ msgid "{header}: {content}"
 msgstr "{header}: {content}"
 
 #. Translators: Presented when some info is not defined for a track in Track 
Tool (example: cue not found)
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "{header} not found"
-msgstr "{header}: {content}"
+msgstr "{header} introuvable"
 
 #. Translators: Spoken when column content is blank.
 #, python-brace-format
@@ -115,7 +115,6 @@ msgid "Status: {name}"
 msgstr "Statut : {name}"
 
 #. Translators: The text of the help command in SPL Assistant layer.
-#, fuzzy
 msgid ""
 "After entering SPL Assistant, press:\n"
 "A: Automation.\n"
@@ -152,36 +151,37 @@ msgstr ""
 "Une fois dans l'Assistant SPL, appuyez sur :\n"
 "A : Automatisation.\n"
 "C : Annoncer le nom de la piste en cours de lecture.\n"
-"D (R Si le mode de compatibilité est activé): Durée restante pour la "
-"playlist.\n"
+"D : Durée restante pour la playlist.\n"
 "E : Statut général de métadonnées en streaming.\n"
-"1 jusqu'à 4, 0 : statut de Métadonnées en streaming pour l'encodeur DSP et "
-"les quatre autres URLs.\n"
+"Maj+1 jusqu'à maj+4, maj+0 : Statut de Métadonnées en streaming pour "
+"l'encodeur DSP et les quatre autres URLs.\n"
 "H : Durée de la piste pour la tranche horaire.\n"
-"Maj+H : Durée des pistes sélectionnés.\n"
-"I (L si le mode de compatibilité est activé): Nombre d'auditeurs.\n"
+"Maj+H : Durée des pistes restantes pour la tranche horaire.\n"
+"I : Nombre d'auditeurs.\n"
 "K : Se déplacer au marqueur de position de piste.\n"
 "Contrôle+K : Définir un marqueur de position de piste.\n"
-"L (Maj+L si le mode de compatibilité est activé): Statut de l'Entrée ligne.\n"
+"L : Statut de l'Entrée ligne.\n"
 "M : Statut du Microphone.\n"
 "N : Piste suivante.\n"
 "P : Statut Lecture.\n"
 "Maj+P : Hauteur de la piste actuelle.\n"
-"R (Maj+E si le mode de compatibilité est activé): Enregistrer dans un "
-"fichier.\n"
+"R : Enregistrer dans un fichier.\n"
 "Maj+R : Contrôle du balayage de la bibliothèque.\n"
-"S : Temps planifié pour la piste.\n"
+"S : Heure prévue pour la piste.\n"
+"Maj+S : Durée jusqu'à la piste sélectionnée qui va être jouer.\n"
 "T : Mode édition chariot.\n"
 "U : Temps de fonctionnement Studio.\n"
 "W : Météo et température.\n"
 "Y : Modification de la playlist.\n"
+"1 jusqu'à 0 (6 pour Studio 5.01 ou version antérieure) : Annoncer les "
+"colonnes via l'Explorateur de Colonnes (0 est la dixième tranche de "
+"colonne).\n"
 "F9 : Marquer la piste en cours comme début d'analyse de durée de piste.\n"
 "F10 : Effectuer une analyse de durée de piste.\n"
 "F12 : Basculer vers un changement de profil immédiat.\n"
 "Maj+F1 : Ouvre le guide de l'utilisateur en ligne."
 
 #. Translators: The text of the help command in SPL Assistant layer when JFW 
layer is active.
-#, fuzzy
 msgid ""
 "After entering SPL Assistant, press:\n"
 "A: Automation.\n"
@@ -219,37 +219,40 @@ msgid ""
 msgstr ""
 "Une fois dans l'Assistant SPL, appuyez sur :\n"
 "A : Automatisation.\n"
-"C : Annoncer le nom de la piste en cours de lecture.\n"
-"D (R Si le mode de compatibilité est activé): Durée restante pour la "
-"playlist.\n"
+"C : Basculer l'explorateur de chariot.\n"
+"Maj+C : Annoncer le nom de la piste en cours de lecture.\n"
 "E : Statut général de métadonnées en streaming.\n"
-"1 jusqu'à 4, 0 : statut de Métadonnées en streaming pour l'encodeur DSP et "
-"les quatre autres URLs.\n"
+"Maj+1 jusqu'à maj+4, maj+0 : Statut de Métadonnées en streaming pour "
+"l'encodeur DSP et les quatre autres URLs.\n"
+"Maj+E : Enregistrer dans un fichier.\n"
+"F : Recherche de piste.\n"
 "H : Durée de la piste pour la tranche horaire.\n"
-"Maj+H : Durée des pistes sélectionnés.\n"
-"I (L si le mode de compatibilité est activé): Nombre d'auditeurs.\n"
+"Maj+H : Durée des pistes restantes pour la tranche horaire.\n"
 "K : Se déplacer au marqueur de position de piste.\n"
 "Contrôle+K : Définir un marqueur de position de piste.\n"
-"L (Maj+L si le mode de compatibilité est activé): Statut de l'Entrée ligne.\n"
+"L : Nombre d'auditeurs.\n"
+"L : Statut de l'Entrée ligne.\n"
 "M : Statut du Microphone.\n"
 "N : Piste suivante.\n"
 "P : Statut Lecture.\n"
 "Maj+P : Hauteur de la piste actuelle.\n"
-"R (Maj+E si le mode de compatibilité est activé): Enregistrer dans un "
-"fichier.\n"
+"R : Durée restante pour la playlist.\n"
 "Maj+R : Contrôle du balayage de la bibliothèque.\n"
-"S : Temps planifié pour la piste.\n"
+"S : Heure prévue pour la piste.\n"
+"Maj+S : Durée jusqu'à la piste sélectionnée qui va être jouer.\n"
 "T : Mode édition chariot.\n"
 "U : Temps de fonctionnement Studio.\n"
 "W : Météo et température.\n"
 "Y : Modification de la playlist.\n"
+"1 jusqu'à 0 (6 pour Studio 5.01 ou version antérieure) : Annoncer les "
+"colonnes via l'Explorateur de Colonnes (0 est la dixième tranche de "
+"colonne).\n"
 "F9 : Marquer la piste en cours comme début d'analyse de durée de piste.\n"
 "F10 : Effectuer une analyse de durée de piste.\n"
 "F12 : Basculer vers un changement de profil immédiat.\n"
 "Maj+F1 : Ouvre le guide de l'utilisateur en ligne."
 
 #. Translators: The text of the help command in SPL Assistant layer when 
Window-Eyes layer is active.
-#, fuzzy
 msgid ""
 "After entering SPL Assistant, press:\n"
 "A: Automation.\n"
@@ -289,30 +292,36 @@ msgid ""
 msgstr ""
 "Une fois dans l'Assistant SPL, appuyez sur :\n"
 "A : Automatisation.\n"
-"C : Annoncer le nom de la piste en cours de lecture.\n"
-"D (R Si le mode de compatibilité est activé): Durée restante pour la "
-"playlist.\n"
-"E : Statut général de métadonnées en streaming.\n"
-"1 jusqu'à 4, 0 : statut de Métadonnées en streaming pour l'encodeur DSP et "
-"les quatre autres URLs.\n"
+"C : Basculer l'explorateur de chariot.\n"
+"Maj+C : Annoncer le nom de la piste en cours de lecture.\n"
+"D : Durée restante pour la playlist.\n"
+"E : Temps écoulé.\n"
+"F : Recherche de piste.\n"
+"R : Durée restante pour la piste en cours de lecture.\n"
+"G : Statut général de métadonnées en streaming.\n"
+"Maj+1 jusqu'à maj+4, maj+0 : Statut de Métadonnées en streaming pour "
+"l'encodeur DSP et les quatre autres URLs.\n"
 "H : Durée de la piste pour la tranche horaire.\n"
-"Maj+H : Durée des pistes sélectionnés.\n"
-"I (L si le mode de compatibilité est activé): Nombre d'auditeurs.\n"
+"Maj+H : Durée des pistes restantes pour la tranche horaire.\n"
 "K : Se déplacer au marqueur de position de piste.\n"
 "Contrôle+K : Définir un marqueur de position de piste.\n"
-"L (Maj+L si le mode de compatibilité est activé): Statut de l'Entrée ligne.\n"
+"L : Nombre d'auditeurs.\n"
+"Maj+L : Statut de l'Entrée ligne.\n"
 "M : Statut du Microphone.\n"
 "N : Piste suivante.\n"
 "P : Statut Lecture.\n"
 "Maj+P : Hauteur de la piste actuelle.\n"
-"R (Maj+E si le mode de compatibilité est activé): Enregistrer dans un "
-"fichier.\n"
+"Maj+E : Enregistrer dans un fichier.\n"
 "Maj+R : Contrôle du balayage de la bibliothèque.\n"
-"S : Temps planifié pour la piste.\n"
+"S : Heure prévue pour la piste.\n"
+"Maj+S : Durée jusqu'à la piste sélectionnée qui va être jouer.\n"
 "T : Mode édition chariot.\n"
 "U : Temps de fonctionnement Studio.\n"
 "W : Météo et température.\n"
 "Y : Modification de la playlist.\n"
+"1 jusqu'à 0 (6 pour Studio 5.01 ou version antérieure) : Annoncer les "
+"colonnes via l'Explorateur de Colonnes (0 est la dixième tranche de "
+"colonne).\n"
 "F9 : Marquer la piste en cours comme début d'analyse de durée de piste.\n"
 "F10 : Effectuer une analyse de durée de piste.\n"
 "F12 : Basculer vers un changement de profil immédiat.\n"
@@ -375,7 +384,7 @@ msgstr "Annonce le temps de diffusion."
 
 #. Translators: Input help mode message for a command in Station Playlist 
Studio.
 msgid "Announces time including seconds."
-msgstr "Annonce le temps y compris les secondes."
+msgstr "Annonce l'heure y compris les secondes."
 
 #. Translators: Presented when the add-on config dialog is opened.
 msgid ""
@@ -619,6 +628,8 @@ msgstr ""
 #. Translators: Presented when SPL Assistant cannot be invoked.
 msgid "Failed to locate Studio main window, cannot enter SPL Assistant"
 msgstr ""
+"Impossible de localiser la fenêtre principale de Studio, L'Assistant SPL ne "
+"peut pas entrer"
 
 #. Translators: Input help mode message for a layer command in Station 
Playlist Studio.
 msgid ""
@@ -742,6 +753,8 @@ msgstr ""
 #. Translators: Presented when attempting to move to a place marker track when 
not focused in playlist viewer.
 msgid "You cannot move to a place marker track outside of playlist viewer."
 msgstr ""
+"Impossible de vous déplacer au marqueur de position de piste en dehors de la "
+"visionneuse de playlist."
 
 #. Translators: Presented when no place marker is found.
 msgid "No place marker found"
@@ -766,28 +779,25 @@ msgid "Metadata streaming on DSP encoder disabled"
 msgstr "Métadonnées en streaming sur l'encodeur DSP désactivé"
 
 #. Translators: Presented when attempting to announce specific columns but the 
focused item isn't a track.
-#, fuzzy
 msgid "Not a track"
-msgstr "Pas dans la liste des pistes"
+msgstr "Pas une piste"
 
 #. Translators: Presented when a specific column header is not found.
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "{headerText} not found"
-msgstr "{header}: {content}"
+msgstr "{headerText} introuvable"
 
 #. Translators: The title for SPL Assistant help dialog.
 msgid "SPL Assistant help"
 msgstr "Aide Assistant SPL"
 
 #. Translators: The title for SPL Assistant help dialog.
-#, fuzzy
 msgid "SPL Assistant help for JAWS layout"
-msgstr "Aide Assistant SPL"
+msgstr "Aide Assistant SPL pour la disposition de JAWS"
 
 #. Translators: The title for SPL Assistant help dialog.
-#, fuzzy
 msgid "SPL Assistant help for Window-Eyes layout"
-msgstr "Aide Assistant SPL"
+msgstr "Aide Assistant SPL pour la disposition de Window-Eyes"
 
 #. Translators: A dialog message shown when settings were reset to defaults.
 msgid "Successfully applied default add-on settings."
@@ -811,10 +821,13 @@ msgid ""
 "Your encoder settings had errors and were reset to defaults. If you have "
 "stream labels configured for various encoders, please add them again."
 msgstr ""
+"Vos paramètres de l’encodeur comportaient des erreurs et ont été "
+"réinitialiser aux valeurs par défaut. Si vous avez configurés des étiquettes "
+"de flux pour différents encodeurs, veuillez les ajoutez à nouveau."
 
 #. Translators: Title of the encoder settings error dialog.
 msgid "Encoder settings error"
-msgstr ""
+msgstr "Erreur dans les paramètres de l'encodeur"
 
 #. Translators: Message presented indicating missing time-based profiles.
 #, python-brace-format
@@ -822,25 +835,26 @@ msgid ""
 "Could not locate the following time-based profile(s):\n"
 "{profiles}"
 msgstr ""
+"Impossible de localisé les suivants profils basé sur l'heure :\n"
+"{profiles}"
 
 #. Translators: The title of a dialog shown when some time-based profiles 
doesn't exist.
 msgid "Time-based profiles missing"
-msgstr ""
+msgstr "Profils basé sur l'heure manquants"
 
 #. Translators: A flag indicating the currently active broadcast profile.
 msgid "active"
-msgstr ""
+msgstr "active"
 
 #. Translators: A flag indicating the broadcast profile is an instant switch 
profile.
 #. Instant switch flag is set on another profile, so remove the flag first.
-#, fuzzy
 msgid "instant switch"
-msgstr "Activer le changement de profil immédiat"
+msgstr "changement immédiat"
 
 #. Translators: A flag indicating the time-based triggers profile.
 #. Calling set profile flags with discard argument is always safe here.
 msgid "time-based"
-msgstr ""
+msgstr "basé sur l'heure"
 
 #. Translators: Presented when trying to switch to an instant switch profile 
when add-on settings dialog is active.
 msgid "Add-on settings dialog is open, cannot switch profiles"
@@ -849,14 +863,14 @@ msgstr ""
 "basculer vers les profils"
 
 #. Translators: Presented when switch to instant switch profile was successful.
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Switching to {newProfileName}"
-msgstr "Changement de profils"
+msgstr "Changement de {newProfileName}"
 
 #. Translators: Presented when switching from instant switch profile to a 
previous profile.
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Returning to {previousProfile}"
-msgstr "Retour au profil précédent"
+msgstr "Retour au {previousProfile}"
 
 #. Translators: Presented when trying to switch to an instant switch profile 
when the instant switch profile is not defined.
 msgid "No instant switch profile is defined"
@@ -868,7 +882,7 @@ msgstr "Vous êtes déjà dans le changement de profil 
immédiat"
 
 #. Translators: Presented when trying to switch to an instant switch profile 
when one is already using the instant switch profile.
 msgid "A profile trigger is already active"
-msgstr ""
+msgstr "Un déclencheur de profil est déjà actif"
 
 #. Translators: Text of the dialog when another alarm dialog is open.
 msgid "Another alarm dialog is open."
@@ -999,11 +1013,11 @@ msgstr "&Supprimer"
 
 #. Translators: The label of a button to manage show profile triggers.
 msgid "&Triggers..."
-msgstr ""
+msgstr "&Déclencheurs..."
 
 #. Translators: The label for a setting in SPL Add-on settings to configure 
countdown seconds before switching profiles.
 msgid "Countdown seconds before switching profiles"
-msgstr ""
+msgstr "Secondes pour le décomptage avant les changements de profils"
 
 #. Translators: the label for a setting in SPL add-on settings to set status 
announcement between words and beeps.
 msgid "&Beep for status announcements"
@@ -1076,6 +1090,7 @@ msgstr "Annonce du balayage de la &bibliothèque :"
 #. Translators: the label for a setting in SPL add-on settings to announce 
time including hours.
 msgid "Include &hours when announcing track or playlist duration"
 msgstr ""
+"Inclure les &heures en annonçant la durée de la piste ou de la playlist"
 
 #. Translators: the label for a setting in SPL add-on settings to toggle track 
dial mode on and off.
 msgid "&Track Dial mode"
@@ -1083,7 +1098,7 @@ msgstr "Mode Cadran de &piste"
 
 #. Translators: the label for a setting in SPL add-on settings to toggle 
category sound announcement.
 msgid "&Beep for different track categories"
-msgstr ""
+msgstr "&Bip pour les différentes catégories de piste"
 
 #. Translators: the label for a setting in SPL add-on settings to be notified 
that metadata streaming is enabled.
 msgid "&Metadata streaming notification and connection"
@@ -1110,14 +1125,12 @@ msgid "&Manage track column announcements..."
 msgstr "&Gérer les annonces de colonne de piste..."
 
 #. Translators: The label of a button to configure columns explorer slots (SPL 
Assistant, number row keys to announce specific columns).
-#, fuzzy
 msgid "Columns E&xplorer..."
-msgstr "&Ordre des colonnes :"
+msgstr "E&xplorateur de colonnes..."
 
 #. Translators: The label of a button to open advanced options such as using 
SPL Controller command to invoke Assistant layer.
-#, fuzzy
 msgid "&Status announcements..."
-msgstr "Annonce le statut en bips"
+msgstr "Annonces des &statut..."
 
 #. Translators: The label of a button to open advanced options such as using 
SPL Controller command to invoke Assistant layer.
 msgid "&Advanced options..."
@@ -1142,20 +1155,19 @@ msgid "That profile already exists. Please choose a 
different name."
 msgstr "Ce profil existe déjà. Veuillez choisir un nom différent."
 
 #. Translators: Message reported when attempting to delete a profile while a 
profile is triggered.
-#, fuzzy
 msgid ""
 "An instant switch profile might be active or you are in the midst of a "
 "broadcast. If so, please press SPL Assistant, F12 to switch back to a "
 "previously active profile before opening add-on settings to delete a profile."
 msgstr ""
-"Un changement de profil immédiat peut-être actif. Dans l'affirmative, s'il "
-"vous plaît Appuyer sur Assistant SPL, F12 pour revenir à un profil "
-"précédemment actif avant d'ouvrir les paramètres du module complémentaire "
-"pour supprimer un profil."
+"Un changement de profil immédiat peut-être actif ou vous êtes au milieu "
+"d'une diffusion. Dans l'affirmative, s'il vous plaît Appuyer sur Assistant "
+"SPL, F12 pour revenir à un profil précédemment actif avant d'ouvrir les "
+"paramètres du module complémentaire pour supprimer un profil."
 
 #. Translators: Title of a dialog shown when profile cannot be deleted.
 msgid "Profile delete error"
-msgstr "Erreur lors de la suppression de profil"
+msgstr "Échec lors de la suppression de profil"
 
 #. Translators: The confirmation prompt displayed when the user requests to 
delete a broadcast profile.
 msgid "Are you sure you want to delete this profile? This cannot be undone."
@@ -1177,13 +1189,12 @@ msgid "Warning"
 msgstr "Attention"
 
 #. Translators: Presented when an alarm dialog is opened.
-#, fuzzy
 msgid ""
 "Another add-on settings dialog is open. Please close the previously opened "
 "dialog first."
 msgstr ""
-"Le dialogue de paramètres du module complémentaire est ouvert. Veuillez "
-"d'abord le fermer."
+"Un autre dialogue de paramètres du module complémentaire est ouvert. "
+"Veuillez d'abord fermer le dialogue préalablement ouvert."
 
 #. Translators: The title of the dialog to create a new broadcast profile.
 msgid "New Profile"
@@ -1204,44 +1215,47 @@ msgstr "Profil de &base :"
 #. Translators: The title of the broadcast profile triggers dialog.
 #, python-brace-format
 msgid "Profile triggers for {profileName}"
-msgstr ""
+msgstr "Déclencheurs de profil pour {profileName}"
 
 #. Translators: The label of a checkbox to toggle if selected profile is an 
instant switch profile.
-#, fuzzy
 msgid "This is an &instant switch profile"
-msgstr "Lorsque le changement de profil immédiat est actif"
+msgstr "Ceci est un changement de profil &immédiat"
 
 #. Translators: The label of a checkbox to toggle if selected profile is a 
time-based profile.
 msgid "This is a &time-based switch profile"
-msgstr ""
+msgstr "Ceci est un changement de profil basé sur l'&heure"
 
 msgid "Day"
-msgstr ""
+msgstr "Jour"
 
 msgid "Time"
-msgstr ""
+msgstr "Heure"
 
 msgid "Hour"
-msgstr ""
+msgstr "Heure"
 
 msgid "Minute"
-msgstr ""
+msgstr "Minute"
 
 msgid "Duration in minutes"
-msgstr ""
+msgstr "Durée en minutes"
 
 #. Translators: Presented if another profile occupies a time slot set by the 
user.
-#, fuzzy
 msgid ""
 "A profile trigger already exists for the entered time slot. Please choose a "
 "different date or time."
-msgstr "Ce profil existe déjà. Veuillez choisir un nom différent."
+msgstr ""
+"Un déclencheur de profil existe déjà pour la tranche horaire saisie. "
+"Veuillez choisir une date ou une heure différente."
 
 #. Er, did you specify a date?
 msgid ""
 "The time-based profile checkbox is checked but no switch dates are given. "
 "Please either specify switch date(s) or uncheck time-based profile checkbox."
 msgstr ""
+"La case à cocher profil basé sur l'heure est cochée, mais aucune date de "
+"changement n’est donnés. Veuillez spécifier la date(s) de changement(s) ou "
+"décochez profil basé sur l'heure."
 
 #. Translators: Title of a dialog to configure metadata streaming status for 
DSP encoder and four additional URL's.
 msgid "Metadata streaming options"
@@ -1257,7 +1271,7 @@ msgstr ""
 
 #. Translators: A checkbox to let metadata streaming status be applied to the 
currently active broadcast profile.
 msgid "&Apply streaming changes to the selected profile"
-msgstr ""
+msgstr "&Appliquer les modifications du flux pour le profil sélectionné"
 
 #. Translators: Title of a dialog to configure column announcements (order and 
what columns should be announced).
 msgid "Manage column announcements"
@@ -1283,23 +1297,21 @@ msgid "Move &down"
 msgstr "Déplacer vers le &bas"
 
 #. Translators: The title of Columns Explorer configuration dialog.
-#, fuzzy
 msgid "Columns Explorer"
-msgstr "&Ordre des colonnes :"
+msgstr "Explorateur de Colonnes"
 
 #. Translators: The label for a setting in SPL add-on dialog to select column 
for this column slot.
 #, python-brace-format
 msgid "Slot {position}"
-msgstr ""
+msgstr "Tranche {position}"
 
 #. Translators: Title of a dialog to configure various status announcements 
such as announcing listener count.
-#, fuzzy
 msgid "Status announcements"
-msgstr "Annonce le statut en bips"
+msgstr "Annonces des statut"
 
 #. Translators: the label for a setting in SPL add-on settings to announce 
scheduled time.
 msgid "Announce &scheduled time for the selected track"
-msgstr "Annoncer le temps &planifié pour la piste sélectionnée"
+msgstr "Annoncer l'heure &prévue pour la piste sélectionnée"
 
 #. Translators: the label for a setting in SPL add-on settings to announce 
listener count.
 msgid "Announce &listener count"
@@ -1331,16 +1343,15 @@ msgstr "Options avancées"
 
 #. Translators: A checkbox to toggle automatic add-on updates.
 msgid "Automatically check for add-on &updates"
-msgstr ""
+msgstr "Rechercher automatiquement une mise à jo&ur du module complémentaire"
 
 #. Translators: A checkbox to toggle if SPL Controller command can be used to 
invoke Assistant layer.
 msgid "Allow SPL C&ontroller command to invoke SPL Assistant layer"
 msgstr "Permettre au Commande C&ontrôleur SPL appeler la couche  Assistant SPL"
 
 #. Translators: The label for a setting in SPL add-on dialog to set keyboard 
layout for SPL Assistant.
-#, fuzzy
 msgid "SPL Assistant command &layout:"
-msgstr "Aide Assistant SPL"
+msgstr "Disposition de &la commande Assistant SPL :"
 
 #. Translators: Text of the dialog when another find dialog is open.
 msgid "Another find dialog is open."
@@ -1364,7 +1375,7 @@ msgid "Minimum duration"
 msgstr "Durée minimale"
 
 msgid "Second"
-msgstr ""
+msgstr "Seconde"
 
 msgid "Maximum duration"
 msgstr "Durée maximale"
@@ -1382,10 +1393,10 @@ msgid "Time range find error"
 msgstr "Erreur trouver dans l'intervalle de temps"
 
 msgid "Countdown started"
-msgstr ""
+msgstr "Le décomptage a commencé"
 
 msgid "Timer complete"
-msgstr ""
+msgstr "Minuteur complet"
 
 #. Translators: Status message for metadata streaming.
 msgid "No metadata streaming URL's defined"
@@ -1418,35 +1429,38 @@ msgstr "Métadonnées en streaming configuré pour l'URL 
{URL}"
 
 #. Translators: Error text shown when add-on update check fails.
 msgid "Error checking for update."
-msgstr ""
+msgstr "Échec lors de la recherche d'une mise à jour."
 
 #. Translators: Title of the add-on update check dialog.
 msgid "Check for add-on update"
-msgstr ""
+msgstr "Rechercher une mise à jour du module complémentaire"
 
 #. No need to interact with the user.
 #. Translators: Text shown when update check fails for some odd reason.
 msgid "Add-on update check failed."
-msgstr ""
+msgstr "Échec lors de la recherche d'une mise à jour du module complémentaire."
 
 #. Translators: Presented when no add-on update is available.
 msgid "No add-on update available."
-msgstr ""
+msgstr "Aucune mise à jour disponible du module complémentaire."
 
 #. Translators: An error text shown when one is using a newer version of the 
add-on.
 msgid ""
 "You appear to be running a version newer than the latest released version. "
 "Please reinstall the official version to downgrade."
 msgstr ""
+"Vous sembler exécuter une version plus récente que la dernière version. S’il "
+"vous plaît réinstaller la version officielle adapter vers le bas."
 
 #. Translators: Text shown if an add-on update is available.
 #, python-brace-format
 msgid "Studio add-on {newVersion} is available. Would you like to update?"
 msgstr ""
+"Un module complémentaire pour Studio {newVersion} est disponible. Vous "
+"souhaitez le mettre à jour ?"
 
 #. Help message for SPL Controller
 #. Translators: the dialog text for SPL Controller help.
-#, fuzzy
 msgid ""
 "\n"
 "After entering SPL Controller, press:\n"
@@ -1479,6 +1493,8 @@ msgstr ""
 "U : Pause.\n"
 "S : Arrêt avec fondu.\n"
 "T : Arrêt instantané.\n"
+"E : Annoncer si des encodeurs sont surveillés.\n"
+"I : Annoncer le nombre d'auditeurs.\n"
 "R : Temps restant pour la piste en cours de lecture.\n"
 "Maj+R : Balayage de la bibliothèque en cours."
 
@@ -1522,9 +1538,9 @@ msgstr ""
 "piste est jouée."
 
 #. Translators: Announces number of stream listeners.
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Listener count: {listenerCount}"
-msgstr "Nombre d'auditeurs introuvable"
+msgstr "Nombre d'auditeurs : {listenerCount}"
 
 #. Translators: Presented when no track is playing in Station Playlist Studio.
 msgid "There is no track playing."
@@ -1544,36 +1560,33 @@ msgid "Number of encoders monitored: 
{numberOfEncoders}: {streamLabels}"
 msgstr "Nombre d'encodeurs monitorés : {numberOfEncoders} : {streamLabels}"
 
 #. Translators: Text of the dialog when another alarm dialog is open.
-#, fuzzy
 msgid "Another encoder settings dialog is open."
-msgstr "Un autre dialogue rechercher  est ouvert."
+msgstr "Un autre dialogue de paramètres de l'encodeur est ouvert."
 
 #. Translators: The title of the encoder settings dialog (example: Encoder 
settings for SAM 1").
 #, python-brace-format
 msgid "Encoder settings for {name}"
-msgstr ""
+msgstr "Paramètres de l'encodeur pour {name}"
 
 #. Translators: An edit field in encoder settings to set stream label for this 
encoder.
 msgid "Stream &label"
-msgstr ""
+msgstr "Étiquette de f&lux"
 
 #. Translators: A checkbox in encoder settings to set if NvDA should switch 
focus to Studio window when connected.
-#, fuzzy
 msgid "&Focus to Studio when connected"
-msgstr "Basculer vers Studio après la connexion"
+msgstr "Mettez le &focus vers Studio lorsqu'il est connecté"
 
 #. Translators: A checkbox in encoder settings to set if NvDA should play the 
next track when connected.
-#, fuzzy
 msgid "&Play first track when connected"
-msgstr "Lire la première piste après la connexion"
+msgstr "&Lire la première piste lorsqu'il est connecté"
 
 #. Translators: A checkbox in encoder settings to set if NvDA should monitor 
the status of this encoder in the background.
 msgid "Enable background connection &monitoring"
-msgstr ""
+msgstr "Activer la connexion en arrière-plan lors de la &surveillance"
 
 #. Translators: A checkbox in encoder settings to set if NvDA should play 
connection progress tone.
 msgid "Play connection status &beep while connecting"
-msgstr ""
+msgstr "Lire le statut de la connexion en &bip lors de la connexion"
 
 #. Translators: Status message for encoder monitoring.
 #, python-brace-format
@@ -1668,6 +1681,8 @@ msgid ""
 "Shows encoder configuration dialog to configure various encoder settings "
 "such as stream label."
 msgstr ""
+"Affiche le dialogue de configuration de l'encodeur pour configurer "
+"différents paramètres de l’encodeur comme l'étiquette de flux."
 
 #. Add-on summary, usually the user visible name of the addon.
 #. Translators: Summary for this add-on to be shown on installation and add-on 
information.
@@ -1684,14 +1699,14 @@ msgstr ""
 
 #, python-brace-format
 msgid "Position: {pos}"
-msgstr ""
+msgstr "Position : {pos}"
 
 #, python-brace-format
 msgid "Label: {label}"
-msgstr ""
+msgstr "Étiquette : {label}"
 
 msgid "No stream label"
-msgstr ""
+msgstr "Pas d'étiquette de flux"
 
 #. Translators: Presented when an Encoder is trying to connect to a streaming 
server.
 msgid "Connecting..."
@@ -1706,11 +1721,11 @@ msgstr "Se connecter à un serveur de flux."
 
 #, python-brace-format
 msgid "Encoder Settings: {setting}"
-msgstr ""
+msgstr "Paramètres de l'Encodeur : {setting}"
 
 #, python-brace-format
 msgid "Transfer Rate: {transferRate}"
-msgstr ""
+msgstr "Taux de Transfert : {transferRate}"
 
 #. Add-on description
 #. Translators: Long description to be shown for this add-on on add-on 
information from add-ons manager

diff --git a/buildVars.py b/buildVars.py
index 63d0668..6cd2fcf 100755
--- a/buildVars.py
+++ b/buildVars.py
@@ -20,7 +20,7 @@ addon_info = {
        "addon_description" : _("""Enhances support for StationPlaylist Studio.
 In addition, adds global commands for the studio from everywhere."""),
        # version
-       "addon_version" : "7.2",
+       "addon_version" : "7.3",
        # Author(s)
        "addon_author" : u"Geoff Shang, Joseph Lee and other contributors",
        # URL for the add-on documentation support

diff --git a/readme.md b/readme.md
index 583bb81..420a4ed 100755
--- a/readme.md
+++ b/readme.md
@@ -167,6 +167,11 @@ From studio window, you can press Control+NVDA+0 or 
Alt+NVDA+0 to open the add-o
 
 If you are using Studio on a touchscreen computer running Windows 8 or later 
and have NVDA 2012.3 or later installed, you can perform some Studio commands 
from the touchscreen. First use three finger tap to switch to SPL mode, then 
use the touch commands listed above to perform commands.
 
+## Changes for 7.3
+
+* Slight performance improvements when looking up information such as 
automation via some SPL Assistant commands.
+* Updated translations.
+
 ## Changes for 7.2
 
 * Due to removal of old-style internal configuration format, it is mandatory 
to install add-on 7.2. Once installed, you cannot go back to an earlier version 
of the add-on.


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/a0f88a15faca/
Changeset:   a0f88a15faca
Branch:      None
User:        josephsl
Date:        2016-07-26 08:41:16+00:00
Summary:     7.4: only sedlect channels if different from the default.

As the update channel variable defaults to the branch name, it is safe to 
assume that this will be consulted as the default channel if everything else 
fails. For 7.4, it is stable, for LTS, LTS, for 8.x, stable/dev/beta. This will 
not apply to try builds (staging branch has URL already set).

Affected #:  1 file

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 8c95709..74d0e16 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -40,8 +40,8 @@ _retryAfterFailure = False
 _updatePickle = os.path.join(globalVars.appArgs.configPath, "splupdate.pickle")
 
 # Remove comment in 8.0 beta 1.
+# Not all update channels are listed. The one not listed here is the default 
("stable" for this branch).
 """channels={
-       "stable":"http://addons.nvda-project.org/files/get.php?file=spl";,
        "lts":"http://spl.nvda-kr.org/files/get.php?file=spl-lts7";,
 }"""
 
@@ -114,7 +114,8 @@ def updateCheck(auto=False, continuous=False, 
confUpdateInterval=1):
        try:
                url = urllib.urlopen(SPLUpdateURL)
                # Replace in 8.0 beta 1.
-               #url = urllib.urlopen(channels[SPLUpdateChannel])
+               # Look up the channel if different from the default.
+               #url = urllib.urlopen(SPLUpdateURL if SPLUpdateChannel not in 
channels else channels[SPLUpdateChannel])
                url.close()
        except IOError:
                _retryAfterFailure = True


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/d6ed5f3b37af/
Changeset:   d6ed5f3b37af
Branch:      None
User:        josephsl
Date:        2016-07-28 06:59:11+00:00
Summary:     7.4: Version check syntax error fixed.

Oops, a botched edit operaiton: somehow the curversion lines were merged. Now 
fixed.

Affected #:  1 file

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 74d0e16..0e9eee9 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -87,9 +87,8 @@ def updateQualify(url):
        # Anything after "-dev" indicates a try or a custom build.
        # LTS: Support upgrading between LTS releases.
        # 7.0: Just worry about version label differences (suggested by Jamie 
Teh from NV Access).
-       curVersion = "7.0" if longterm else curVersion = SPLAddonVersion
        version = _versionFromURL(url.url)
-       return None if version == curVersion else version
+       return None if version == SPLAddonVersion else version
 
 _progressDialog = None
 


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/ff08aa158907/
Changeset:   ff08aa158907
Branch:      None
User:        josephsl
Date:        2016-07-28 07:07:16+00:00
Summary:     7.4: Improved add-on update check message.

For consistency with NVDA Core's update facility, the dialog title for update 
check has changed from 'check for add-on update' to 'Studio add-on update'. 
This change is destined for add-on 7.4 and later.

Affected #:  2 files

diff --git a/addon/appModules/splstudio/__init__.py 
b/addon/appModules/splstudio/__init__.py
index 55370aa..637cbb7 100755
--- a/addon/appModules/splstudio/__init__.py
+++ b/addon/appModules/splstudio/__init__.py
@@ -1769,7 +1769,7 @@ class AppModule(appModuleHandler.AppModule):
                # Display the update check progress dialog (inspired by add-on 
installation dialog in NvDA Core).
                splupdate._progressDialog = 
gui.IndeterminateProgressDialog(gui.mainFrame,
                # Translators: The title of the dialog presented while checking 
for add-on updates.
-               _("Add-on update"),
+               _("Add-on update check"),
                # Translators: The message displayed while checking for newer 
version of Studio add-on.
                _("Checking for new version of Studio add-on..."))
                threading.Thread(target=splupdate.updateCheck, 
kwargs={"continuous":splconfig.SPLConfig["Update"]["AutoUpdateCheck"], 
"confUpdateInterval":splconfig.SPLConfig["Update"]["UpdateInterval"]}).start()

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 0e9eee9..e30f196 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -122,7 +122,7 @@ def updateCheck(auto=False, continuous=False, 
confUpdateInterval=1):
                        wx.CallAfter(_progressDialog.done)
                        _progressDialog = None
                        # Translators: Error text shown when add-on update 
check fails.
-                       wx.CallAfter(gui.messageBox, _("Error checking for 
update."), _("Check for add-on update"), wx.ICON_ERROR)
+                       wx.CallAfter(gui.messageBox, _("Error checking for 
update."), _("Studio add-on update"), wx.ICON_ERROR)
                if continuous: _SPLUpdateT.Start(600000, True)
                return
        if _retryAfterFailure:
@@ -152,8 +152,8 @@ def updateCheck(auto=False, continuous=False, 
confUpdateInterval=1):
                wx.CallAfter(_progressDialog.done)
                _progressDialog = None
        # Translators: Title of the add-on update check dialog.
-       if not updateCandidate: wx.CallAfter(gui.messageBox, checkMessage, 
_("Check for add-on update"))
-       else: wx.CallAfter(getUpdateResponse, checkMessage, _("Check for add-on 
update"), url.info().getheader("Content-Length"))
+       if not updateCandidate: wx.CallAfter(gui.messageBox, checkMessage, 
_("Studio add-on update"))
+       else: wx.CallAfter(getUpdateResponse, checkMessage, _("Studio add-on 
update"), url.info().getheader("Content-Length"))
 
 def getUpdateResponse(message, caption, size):
        if gui.messageBox(message, caption, wx.YES | wx.NO | wx.CANCEL | 
wx.CENTER | wx.ICON_QUESTION) == wx.YES:


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/916918ed4a82/
Changeset:   916918ed4a82
Branch:      None
User:        josephsl
Date:        2016-08-12 17:36:46+00:00
Summary:     7.4/16.08: Officially enable branch switching.

Affected #:  4 files

diff --git a/addon/appModules/splstudio/__init__.py 
b/addon/appModules/splstudio/__init__.py
index 637cbb7..1f8fb67 100755
--- a/addon/appModules/splstudio/__init__.py
+++ b/addon/appModules/splstudio/__init__.py
@@ -496,8 +496,7 @@ class AppModule(appModuleHandler.AppModule):
                threading.Thread(target=self._locateSPLHwnd).start()
                # Check for add-on update if told to do so.
                # LTS: Only do this if channel hasn't changed.
-               # To be unlocked in 8.0 beta 1.
-               if splconfig.SPLConfig["Update"]["AutoUpdateCheck"]: # 7lts: or 
splupdate._updateNow:
+               if splconfig.SPLConfig["Update"]["AutoUpdateCheck"] or 
splupdate._updateNow:
                        # 7.0: Have a timer call the update function indirectly.
                        queueHandler.queueFunction(queueHandler.eventQueue, 
splconfig.updateInit)
                # Display startup dialogs if any.

diff --git a/addon/appModules/splstudio/splconfig.py 
b/addon/appModules/splstudio/splconfig.py
index b9249c6..aa97960 100755
--- a/addon/appModules/splstudio/splconfig.py
+++ b/addon/appModules/splstudio/splconfig.py
@@ -698,12 +698,11 @@ def autoUpdateCheck():
 # A bit simpler than NVDA Core's auto update checker.
 def updateInit():
        # LTS: Launch updater if channel change is detected.
-       # To be unlocked in 8.0 beta 1.
-       #if splupdate._updateNow:
-               #splupdate.updateCheck(auto=True) # No repeat here.
-               #splupdate._SPLUpdateT = wx.PyTimer(autoUpdateCheck)
-               #splupdate._updateNow = False
-               #return
+       if splupdate._updateNow:
+               splupdate.updateCheck(auto=True) # No repeat here.
+               splupdate._SPLUpdateT = wx.PyTimer(autoUpdateCheck)
+               splupdate._updateNow = False
+               return
        currentTime = time.time()
        nextCheck = 
splupdate.SPLAddonCheck+(SPLConfig["Update"]["UpdateInterval"]* 86400.0)
        if splupdate.SPLAddonCheck < currentTime < nextCheck:

diff --git a/addon/appModules/splstudio/splconfui.py 
b/addon/appModules/splstudio/splconfui.py
index 97529ee..9c4a919 100755
--- a/addon/appModules/splstudio/splconfui.py
+++ b/addon/appModules/splstudio/splconfui.py
@@ -308,9 +308,8 @@ class SPLConfigDialog(gui.SettingsDialog):
                self.compLayer = 
splconfig.SPLConfig["Advanced"]["CompatibilityLayer"]
                self.autoUpdateCheck = 
splconfig.SPLConfig["Update"]["AutoUpdateCheck"]
                self.updateInterval = 
splconfig.SPLConfig["Update"]["UpdateInterval"]
-               # To be unlocked in 8.0 beta 1.
-               #self.updateChannel = splupdate.SPLUpdateChannel
-               #self.pendingChannelChange = False
+               self.updateChannel = splupdate.SPLUpdateChannel
+               self.pendingChannelChange = False
                settingsSizer.Add(item)
 
                # Translators: The label for a button in SPL add-on 
configuration dialog to reset settings to defaults.
@@ -355,9 +354,8 @@ class SPLConfigDialog(gui.SettingsDialog):
                splconfig.SPLConfig["Advanced"]["CompatibilityLayer"] = 
self.compLayer
                splconfig.SPLConfig["Update"]["AutoUpdateCheck"] = 
self.autoUpdateCheck
                splconfig.SPLConfig["Update"]["UpdateInterval"] = 
self.updateInterval
-               # To be unlocked in 8.0 beta 1.
-               #self.pendingChannelChange = splupdate.SPLUpdateChannel != 
self.updateChannel
-               #splupdate.SPLUpdateChannel = self.updateChannel
+               self.pendingChannelChange = splupdate.SPLUpdateChannel != 
self.updateChannel
+               splupdate.SPLUpdateChannel = self.updateChannel
                splconfig.SPLConfig["ActiveIndex"] = profileIndex
                # Reverse of merge: save profile specific sections to 
individual config dictionaries.
                splconfig.applySections(profileIndex)
@@ -409,17 +407,15 @@ class SPLConfigDialog(gui.SettingsDialog):
                                dataLo = 0x00010000 if 
splconfig.SPLConfig["MetadataStreaming"]["MetadataEnabled"][url] else 0xffff0000
                                user32.SendMessageW(hwnd, 1024, dataLo | url, 
36)
                # Coordinate auto update timer restart routine if told to do so.
-               # To be unlocked in 8.0 beta 1.
-               if not splconfig.SPLConfig["Update"]["AutoUpdateCheck"]: # 
7lts: or self.pendingChannelChange:
+               if not splconfig.SPLConfig["Update"]["AutoUpdateCheck"] or 
self.pendingChannelChange:
                        if splupdate._SPLUpdateT is not None and 
splupdate._SPLUpdateT.IsRunning(): splupdate._SPLUpdateT.Stop()
                        splupdate._SPLUpdateT = None
-                       # To be unlocked in 8.0 beta 1.
-                       #if self.pendingChannelChange:
-                               #splupdate._pendingChannelChange = True
+                       if self.pendingChannelChange:
+                               splupdate._pendingChannelChange = True
                                # Translators: A dialog message shown when 
add-on update channel has changed.
-                               #wx.CallAfter(gui.messageBox, _("You have 
changed the add-on update channel. You must restart NVDA for the change to take 
effect. Be sure to answer yes when you are asked to install the new version 
when prompted after restarting NVDA."),
+                               wx.CallAfter(gui.messageBox, _("You have 
changed the add-on update channel. You must restart NVDA for the change to take 
effect. Be sure to answer yes when you are asked to install the new version 
when prompted after restarting NVDA."),
                                # Translators: Title of the update channel 
dialog.
-                               #_("Add-on update channel changed"), 
wx.OK|wx.ICON_INFORMATION)
+                               _("Add-on update channel changed"), 
wx.OK|wx.ICON_INFORMATION)
                else:
                        if splupdate._SPLUpdateT is None: splconfig.updateInit()
 
@@ -1296,16 +1292,15 @@ class AdvancedOptionsDialog(wx.Dialog):
                mainSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
                # LTS and 8.x only.
-               # To be unlocked in 8.0 beta 1.
-               #sizer = wx.BoxSizer(wx.HORIZONTAL)
+               sizer = wx.BoxSizer(wx.HORIZONTAL)
                # Translators: The label for a combo box to select update 
channel.
-               #label = wx.StaticText(self, wx.ID_ANY, label=_("&Add-on update 
channel:"))
-               #self.channels= wx.Choice(self, wx.ID_ANY, choices=["stable", 
"longterm"])
-               #self.updateChannels = ("stable", "lts")
-               
#self.channels.SetSelection(self.updateChannels.index(self.Parent.updateChannel))
-               #sizer.Add(label)
-               #sizer.Add(self.channels)
-               #mainSizer.Add(sizer, border=10, flag=wx.BOTTOM)
+               label = wx.StaticText(self, wx.ID_ANY, label=_("&Add-on update 
channel:"))
+               self.channels= wx.Choice(self, wx.ID_ANY, choices=["stable", 
"longterm"])
+               self.updateChannels = ("stable", "lts")
+               
self.channels.SetSelection(self.updateChannels.index(self.Parent.updateChannel))
+               sizer.Add(label)
+               sizer.Add(self.channels)
+               mainSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
                sizer = wx.BoxSizer(wx.HORIZONTAL)
                # Translators: A checkbox to toggle if SPL Controller command 
can be used to invoke Assistant layer.
@@ -1344,8 +1339,7 @@ class AdvancedOptionsDialog(wx.Dialog):
                parent.compLayer = 
self.compatibilityLayouts[self.compatibilityList.GetSelection()][0]
                parent.autoUpdateCheck = self.autoUpdateCheckbox.Value
                parent.updateInterval = self.updateInterval.Value
-               # To be unlocked in 8.0 beta 1.
-               #parent.updateChannel = ("stable", 
"lts")[self.channels.GetSelection()]
+               parent.updateChannel = ("stable", 
"lts")[self.channels.GetSelection()]
                parent.profiles.SetFocus()
                parent.Enable()
                self.Destroy()

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index e30f196..d8ef75b 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -26,10 +26,9 @@ SPLAddonCheck = 0
 SPLAddonState = {}
 # Update URL (the only way to change it is installing a different version from 
a different branch).
 SPLUpdateURL = "http://addons.nvda-project.org/files/get.php?file=spl";
-# To be unlocked in 8.0 beta 1.
-#_pendingChannelChange = False
-#_updateNow = False
-#SPLUpdateChannel = "stable"
+_pendingChannelChange = False
+_updateNow = False
+SPLUpdateChannel = "stable"
 # Update check timer.
 _SPLUpdateT = None
 # How long it should wait between automatic checks.
@@ -39,29 +38,26 @@ _retryAfterFailure = False
 # Stores update state.
 _updatePickle = os.path.join(globalVars.appArgs.configPath, "splupdate.pickle")
 
-# Remove comment in 8.0 beta 1.
 # Not all update channels are listed. The one not listed here is the default 
("stable" for this branch).
-"""channels={
+channels={
        "lts":"http://spl.nvda-kr.org/files/get.php?file=spl-lts7";,
-}"""
+}
 
 # Come forth, update check routines.
 def initialize():
-       # To be unlocked in 8.0 beta 1.
-       global SPLAddonState, SPLAddonCheck #, _updateNow, SPLUpdateChannel
+       global SPLAddonState, SPLAddonCheck, _updateNow, SPLUpdateChannel
        try:
                SPLAddonState = cPickle.load(file(_updatePickle, "r"))
                SPLAddonCheck = SPLAddonState["PDT"]
                if "PSZ" in SPLAddonState: del SPLAddonState["PSZ"]
                if "PCH" in SPLAddonState: del SPLAddonState["PCH"]
-               # Unlock in 8.0 beta 1.
-               #_updateNow = "pendingChannelChange" in SPLAddonState
-               #if "UpdateChannel" in SPLAddonState:
-                       #SPLUpdateChannel = SPLAddonState["UpdateChannel"]
+               _updateNow = "pendingChannelChange" in SPLAddonState
+               if "UpdateChannel" in SPLAddonState:
+                       SPLUpdateChannel = SPLAddonState["UpdateChannel"]
        except IOError:
                SPLAddonState["PDT"] = 0
-               #_updateNow = False
-               #SPLUpdateChannel = "stable"
+               _updateNow = False
+               SPLUpdateChannel = "stable"
 
 def terminate():
        global SPLAddonState
@@ -69,10 +65,9 @@ def terminate():
        stateChanged = SPLAddonState["PDT"] != SPLAddonCheck
        if stateChanged:
                SPLAddonState["PDT"] = SPLAddonCheck
-               # To be unlocked in 8.0 beta 1.
-               #SPLAddonState["UpdateChannel"] = SPLUpdateChannel
-               #if _pendingChannelChange:
-                       #SPLAddonState["pendingChannelChange"] = True
+               SPLAddonState["UpdateChannel"] = SPLUpdateChannel
+               if _pendingChannelChange:
+                       SPLAddonState["pendingChannelChange"] = True
                cPickle.dump(SPLAddonState, file(_updatePickle, "wb"))
        SPLAddonState = None
 
@@ -96,10 +91,9 @@ _progressDialog = None
 # Auto is whether to respond with UI (manual check only), continuous takes in 
auto update check variable for restarting the timer.
 # ConfUpdateInterval comes from add-on config dictionary.
 def updateCheck(auto=False, continuous=False, confUpdateInterval=1):
-       # Unlock in 8.0 beta 1.
-       #if _pendingChannelChange:
-               #wx.CallAfter(gui.messageBox, _("Did you recently tell SPL 
add-on to use a different update channel? If so, please restart NVDA before 
checking for add-on updates."), _("Update channel changed"), wx.ICON_ERROR)
-               #return
+       if _pendingChannelChange:
+               wx.CallAfter(gui.messageBox, _("Did you recently tell SPL 
add-on to use a different update channel? If so, please restart NVDA before 
checking for add-on updates."), _("Update channel changed"), wx.ICON_ERROR)
+               return
        global _SPLUpdateT, SPLAddonCheck, _retryAfterFailure, _progressDialog
        # Regardless of whether it is an auto check, update the check time.
        # However, this shouldnt' be done if this is a retry after a failed 
attempt.
@@ -111,10 +105,8 @@ def updateCheck(auto=False, continuous=False, 
confUpdateInterval=1):
        # All the information will be stored in the URL object, so just close 
it once the headers are downloaded.
        updateCandidate = False
        try:
-               url = urllib.urlopen(SPLUpdateURL)
-               # Replace in 8.0 beta 1.
                # Look up the channel if different from the default.
-               #url = urllib.urlopen(SPLUpdateURL if SPLUpdateChannel not in 
channels else channels[SPLUpdateChannel])
+               url = urllib.urlopen(SPLUpdateURL if SPLUpdateChannel not in 
channels else channels[SPLUpdateChannel])
                url.close()
        except IOError:
                _retryAfterFailure = True


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/f444c17f9b69/
Changeset:   f444c17f9b69
Branch:      None
User:        josephsl
Date:        2016-08-12 17:40:11+00:00
Summary:     7.4/16.08: Update now flag will be set to false right after 
checking for an update after a restart.

Affected #:  1 file

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index d8ef75b..26c4eeb 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -94,7 +94,8 @@ def updateCheck(auto=False, continuous=False, 
confUpdateInterval=1):
        if _pendingChannelChange:
                wx.CallAfter(gui.messageBox, _("Did you recently tell SPL 
add-on to use a different update channel? If so, please restart NVDA before 
checking for add-on updates."), _("Update channel changed"), wx.ICON_ERROR)
                return
-       global _SPLUpdateT, SPLAddonCheck, _retryAfterFailure, _progressDialog
+       global _SPLUpdateT, SPLAddonCheck, _retryAfterFailure, _progressDialog, 
_updateNow
+       if _updateNow: _updateNow = False
        # Regardless of whether it is an auto check, update the check time.
        # However, this shouldnt' be done if this is a retry after a failed 
attempt.
        if not _retryAfterFailure: SPLAddonCheck = time.time()


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/d9473082c8ac/
Changeset:   d9473082c8ac
Branch:      None
User:        josephsl
Date:        2016-08-12 17:41:09+00:00
Summary:     Merge branch 'stable' into 7.x

Affected #:  14 files

diff --git a/addon/doc/ar/readme.md b/addon/doc/ar/readme.md
new file mode 100644
index 0000000..437e9b8
--- /dev/null
+++ b/addon/doc/ar/readme.md
@@ -0,0 +1,724 @@
+# StationPlaylist Studio #
+
+* مطورو الإضافة: Geoff Shang, Joseph Lee وآخرون
+* تحميل [الإصدار النهائي][1]
+* تحميل [الإصدار التجريبي][2]
+
+تقوم هذه الإضافة البرمجية بتحسين استخدام الكفيف لتطبيق Station Playlist
+Studio, فضلا عن إضافة أدوات للتحكم في الأستوديو من أي مكان.
+
+للاطلاع على المزيد حول هذه الإضافة, يرجى قراءة [دليل الإضافات البرمجية][3].
+
+ملحوظة هامة: تتطلب هذه الإضافة NVDA2015.3 وما بعده وإصدار spl 5.00 وما
+بعده. إذا قمت بتثبيت nvda2016.1 وما بعده على نظام ويندوز 8 وما بعده, يرجى
+تعطيل دعم خفض الأصوات الأخرى.
+
+## مفاتيح الاختصار
+
+* Alt+Shift+T من نافذة الاستوديو: للإعلان عن الوقت المنقضي للمسار أو التراك
+  المشغل حاليا.
+* Control+Alt+T (مسح بإصبعين لأسفل بنمط SPL) من نافذة الاستوديو: للإعلان عن
+  الوقت المتبقي للمسار أو التراك المشغل حاليا.
+* NVDA+Shift+F12 (مسح بإصبعين لأعلى بنمط SPL) من نافذة الاستوديو: للإعلان عن
+  وقت المذيع.
+* Control+NVDA+1 من نافذة الاستوديو: التنقل بين كيفية الإعلان عن الرسائل
+  (كرسائل الآلية ورسائل نهاية البحث في المكتبة) بالصفير أو بالكلمات.
+* Control+NVDA+2 (مسح بإصبعين يمين بنمط SPL) من نافذة الاستوديو: لفتح محاورة
+  نهاية المسار أو التراك.
+* Alt+NVDA+2 (مسح بأصبعين يسار بنمطSPL) من نافذة الاستوديو: لفتح محاورة
+  إعدادات التنبيه بمقدمة الأغنية.
+* Control+NVDA+3 من نافذة الاستوديو: لفتح نمط استكشاف التنويهات والمفاتيح
+  المنوطة بكل تنويه أو إعلان
+* Control+NVDA+4 من نافذة الاستوديو: لفتح محاورة تنبيه الميكروفون.
+* اضغط ctrl+NVDA+F من نافذة الأستديو لفتح محاورة اختيار المسارات بحسب المطرب
+  أو الأغنية. اضغط NVDA+f3 للبحث نحو التالي واضغط Shift+NVDA+f3 للبحث نحو
+  السابق. 
+* Alt+NVDA+R من نافذة الاستوديو: لخطوات إعدادات الإعلان عن البحث في المكتبة
+* Control+Shift+X من نافذة الاستوديو: لخطوات إعدادات ميقات البرايل.
+* Control+Alt+right/left arrow (while focused on a track): Announce
+  next/previous track column.
+* Control+NVDA+0 or Alt+NVDA+0 from Studio window: Opens the Studio add-on
+  configuration dialog.
+* Control+NVDA+- (hyphen) من نافذة الاستوديو: إرسال الاستفسارات لمطور
+  الإضافة باستخدام منظم البريد الافتراضي لديك.
+
+## الأوامر غير المعينة
+
+الأوامر التالية لا يتم تعيينها افتراضيا. وإذا أردت تعيينها فعليك الذهاب إلى
+محاورة اختصارات NVDA لإضافة الاختصارات المخصصة. 
+
+* التحول إلى نافذة الأستديو من أي برنامج آخر. 
+* نمط التحكم في تطبيق SPL. 
+* نمط SPL المساعد من الأستوديو. 
+* الإعلان عن الوقت متضمن الثواني من SPL Studio.
+* التبديل بين تشغيل وتعطيل إدارة المسار (تعمل بشكل جيد عند تنشيط أحد
+  المسارات، لتعيين اختصار لهذه الخاصية, اختر مسار, ثم افتح محاورة تخصيص
+  اختصارات NVDA).
+* الإعلان عن درجة الحرارة
+* الإعلان عن عنوان المسار التالي إذا كان مجدول.
+* الإعلان عن عنوان المسار المشغل حاليا
+* تحديد المسار الحالي لبدأ تحليل وقت المسار
+* إجراء تحليل وقت المسار
+* البحث عن نص بأعمدة محددة
+* البحث عن مسارات تقع بين معدل وقت معين عبر باحث عن معدلات الوقت.
+* تشغيل أو تعطيل حالة بث البيانات بسرعة
+
+## أوامر إضافية عند استخدام Sam encoder أو SPL.
+
+تتوفر المفاتيح التالية عند استخدام Sam encoder أو SPL:
+
+* F9: الاتصال بالخادم الذي سيتم بث الملفات من خلاله.
+* F10: (SAM encoder فقط) قطع الاتصال بالخادم.
+* Control+F9/Control+F10 (تشفير SAM فقط): اتصال أو قطع اتصال كل التشفيرات,
+  على التوالي.
+* F11: ينتقل بين تشغيل وتعطيل الرجوع لنافذة الاستوديو بعد الاتصال بالخادم.
+* shift+F11: ينتقل بين تشغيل وتعطيل إمكانية تشغيل أول مسار بعد الاتصال
+  بالخادم.
+* Control+F11: التبديل بين تشغيل وتعطيل المراقبة الخلفية للتشفير المحدد.
+* F12: Opens a dialog to enter custom label for the selected encoder or
+  stream.
+* Control+F12: يفتح محاورة لاختيار التشفير الذي قمت بحذفه (لإعادة ترتيب
+  أسماء الفيديوهات التي ستبث وإعدادات التشفير).
+* Control+NVDA+0 or Alt+NVDA+0: Opens encoder settings dialog to configure
+  options such as stream label.
+
+فضلا عن ذلك, إتاحة أوامر لمراجعة الأعمدة وتشمل:
+
+* Control+NVDA+1: موقع التشفير
+* Control+NVDA+2: البث
+* Control+NVDA+3 من sam encoder: تنسيق التشفير.
+* Control+NVDA+3 (من نافذة التشفير): إعدادات التشفير
+* control+nvda+4 (من نافذة تشفير sam) حالة اتصال التشفير.
+* control+nvda+4 من تشفير spl: معدل النقل أو حالة الاتصال.
+* control+nvda+5 من تشفير SAM: وصف حالة الاتصال
+
+## مساعد نمط أوامر SPL 
+
+This layer command set allows you to obtain various status on SPL Studio,
+such as whether a track is playing, total duration of all tracks for the
+hour and so on. From any SPL Studio window, press the SPL Assistant layer
+command, then press one of the keys from the list below (one or more
+commands are exclusive to playlist viewer). You can also configure NvDA to
+emulate commands from other screen readers.
+
+The available commands are:
+
+* A: التشغيل الآلي.
+* C (Shift+C in JAWS and Window-Eyes layouts): Title for the currently
+  playing track.
+* C (JAWS and Window-Eyes layouts): Toggle cart explorer (playlist viewer
+  only).
+* D (R in JAWS layout): Remaining duration for the playlist (if an error
+  message is given, move to playlist viewer and then issue this command).
+* E (G in Window-Eyes layout): Metadata streaming status.
+* Shift+1 through Shift+4, Shift+0: Status for individual metadata streaming
+  URL's (0 is for DSP encoder).
+* E (Window-Eyes layout): Elapsed time for the currently playing track.
+* F: Find track (playlist viewer only).
+* H: مدة الموسيقى للساعة الحالية.
+* Shift+H: Remaining track duration for the hour slot.
+* I (L in JAWS or Window-Eyes layouts): Listener count.
+* K: Move to the marked track (playlist viewer only).
+* Control+K: Set the current track as the place marker track (playlist
+  viewer only).
+* L (Shift+L in JAWS and Window-Eyes layouts): Line in.
+* M:  الميكروفون
+* N: لتشغيل المسار التالي.
+* P: حالة التشغيل (المسار يعمل أم متوقف).
+* shift+P: حدة المسار الحالي.
+* R (Shift+E in JAWS and Window-Eyes layouts): Record to file
+  enabled/disabled.
+* shift+r: مراقبة حالة التقدم في البحث بالمكتبة.
+* s: موعد بداية تشغيل المسار (إذا كان في جدول).
+* Shift+S: Time until selected track will play.
+* T: تعطيل أو تشغيل نمط تعيين مفاتيح للتنويهات.
+* U: وقت الاستوديو
+* Control+Shift+U: Check for add-on updates.
+* W: حالة التقس ودرجة الحرارة إذا كانت معدة.
+* y: حالة قائمة التشغيل المعدلة.
+* 1 through 0 (6 for Studio 5.0x): Announce column content for a specified
+  column.
+* F9: Mark current track for track time analysis (playlist viewer only).
+* F10: Perform track time analysis (playlist viewer only).
+* f12: الانتقال بين الملف الحالي وملف لم يتم تعريفه من قبل.
+* F1: نمط المساعدة
+* shift+f1: فتح دليل المستخدم على الإنترنت
+
+## نمط التحكم في تطبيق SPL 
+
+هو عبارة عن نمط يزودك بمجموعة من المفاتيح كي تتمكن من التحكم في التطبيق من
+أي مكان. اضغط أمر نمط التحكم في SPL وسينطق NVDA, "نمط التحكم في Station
+PlayList Studio." اضغط أي من الأوامر التي سيلي ذكرها للتحكم في مختلف إعدادات
+الاستوديو بالتطبيق كالتحكم في تشغيل أو تعطيل الميكروفون, أو تشغيل المسار
+التالي.
+
+والأوامر التي يتيحها هذا النمط هي:
+
+* اضغط P لتشغيل المسار التالي.
+* اضغط U لعمل توقف مؤقت أو إعادة التشغيل مرة أخرى.
+* اضغط S لوقف تشغيل المسار بطريقة التلاشي (fade out), أو اضغط حرف T لتوقف
+  المسار فورا.
+* اضغط M أو Shift+M لتشغيل أو تعطيل الميكروفون, على التوالي, أو N لتشغيل
+  الميكروفون دون التلاشي
+* اضغط a لتفعيل خاصية التشغيل الآلي, واضغط Shift+A لتعطيلها.
+* اضغط L لتفعيل مدخل الصوت واضغط shift+l لتعطيله.
+* Press R to hear remaining time for the currently playing track.
+* اضغط Shift+R للإعلان عن مدى التقدم في البحث في المكتبة.
+* اضغط E للحصول على عدد وأسماء التشفيرات الجاري مراقبتها.
+* Press I to obtain listener count.
+* اضغط f1 لإظهار محاورة مساعدة بقائمة بالأوامر المتاحة.
+
+## تنبيهات المسار
+
+افتراضيا, سيصدر NVDA صوت صفير قرب نهاية المسار بخمس ثواني (النهاية) أو/و
+المقدمة. لتغيير هذه القيمة من خمس ثواني أو لتعطيل هذا الإعداد, اضغط على
+Control+NVDA+2  أو Alt+NVDA+2 لفتح محاورة نهاية المسار أو نهاية الأغنية على
+التوالي. كما يمكنك استخدام إعدادات الإضافة لإعداد ما إذا كنت ستسمع صفير, أم
+رسالة أو كلاهما عند تشغيل التنبيهات.
+
+## تنبيه الميكروفون
+
+يمكنك إعداد NVDA كي يصدر صوت عندما يكون الميكروفون مشغل لفترة. اضغط
+NVDA+control+4 لإعداد وقت إصدار الصوت بالثوان (الرقم 0 يعطل إصدار الصوت).
+
+## الباحث عن المسارات
+
+إذا أردت البحث عن أغنية باسم المطرب أو باسم الأغنية, من قائمة المسارات, اضغط
+Control+NVDA+ F. اكتب اسم المطرب أو اسم الأغنية وسوف يضعك NVDA عندها إن وجدت
+أو سيظهر رسالة خطأ إن لم يجد الأغنية التي تبحث عنها. وللبحث عن مطرب أو أغنية
+سابقا اضغط NVDA+f3 أو اضغط NVDA+Shift+f3 للبحث في التالي أو السابق. 
+
+ملحوظة: الباحث عن المسارات حساس لحالة الأحرف. 
+
+## مستكشف التنويهات
+
+وفقا لإصدار البرنامج, يتيح لك برنامج SPL تعيين مفتاح ل96 تنويه. يتيح لك NVDA
+سماع أي تنويه معين لهذه الأوامر.
+
+لمعرفة المفتاح المنوط بكل تنويه, من نافذة SPL, اضغط Control+NVDA+3. بالضغط
+على هذا الاختصار مرة واحدة سيخبرك بالمفتاح المنوط بالتنويه وبالضغط عليه
+مرتين سيقوم بتشغيل التنويه. اضغط Control+NvDA+3 للخروج من نمط مستكشف
+التنويهات. انظر دليل الإضافة لمعرفة المزيد عن مستكشف التنويهات.
+
+## طلب المسار
+
+You can use arrow keys to review various information about a track. To turn
+Track Dial on, while a track is focused in the main playlist viewer, press
+the command you assigned for toggling Track Dial. Then use left and right
+arrow keys to review information such as artist, duration and so
+on. Alternatively, press Control+Alt+left or right arrows to navigate
+between columns without invoking Track Dial.
+
+## تحليل وقت المسار
+
+للحصول على مدة المسارات المحددة لتشغيلها, قم بتحديد المسار الحالي لبدأ عملية
+تحليل الوقت (من مساعد spl اضغط على f9), ثم اضغط على f10 بعد الانتهاء من
+التحديد.
+
+## Columns Explorer
+
+By pressing SPL Assistant, 1 through 0 (6 for Studio 5.01 and earlier), you
+can obtain contents of specific columns. By default, these are artist,
+title, duration, intro, category and filename (Studio 5.10 adds year, album,
+genre and time scheduled). You can configure which columns will be explored
+via columns explorer dialog found in add-on settings dialog.
+
+## محاورة الإعدادات
+
+From studio window, you can press Control+NVDA+0 or Alt+NVDA+0 to open the
+add-on configuration dialog. Alternatively, go to NVDA's preferences menu
+and select SPL Studio Settings item. This dialog is also used to manage
+broadcast profiles.
+
+## نمط اللمس لتطبيق SPL
+
+إذا كنت تستخدم الاستوديو من حاسوب بشاشة لمس يعمل بنظام التشغيل ويندوز 8 وما
+بعده ولديك NVDA 2012.3 وما بعده, يمكنك أداء بعض الأوامر من شاشة اللمس. أولا
+استخدم لمسة ب3 أصابع للانتقال لنمط اللمس, ثم استخدم أوامر اللمس المسرودة
+أعلاه لأداء المهام.
+
+## Changes for 7.3
+
+* Slight performance improvements when looking up information such as
+  automation via some SPL Assistant commands.
+* ترجمة الإضافة لمزيد من اللغات
+
+## Changes for 7.2
+
+* Due to removal of old-style internal configuration format, it is mandatory
+  to install add-on 7.2. Once installed, you cannot go back to an earlier
+  version of the add-on.
+* Added a command in SPL Controller to report listener count (I).
+* You can now open SPL add-on settings and encoder settings dialogs by
+  pressing Alt+NVDA+0. You can still use Control+NVDA+0 to open these
+  dialogs (to be removed in add-on 8.0).
+* In Track Tool, you can use Control+Alt+left or right arrow keys to
+  navigate between columns.
+* Contents of various Studio dialogs such as About dialog in Studio 5.1x are
+  now announced.
+* In SPL Encoders, NVDA will silence connection tone if auto-connect is
+  enabled and then turned off from encoder context menu while the selected
+  encoder is connecting.
+* ترجمة الإضافة لمزيد من اللغات
+
+## Changes for 7.1
+
+* Fixed erorrs encountered when upgrading from add-on 5.5 and below to 7.0.
+* When answering "no" when resetting add-on settings, you'll be returned to
+  add-on settings dialog and NVDA will remember instant switch profile
+  setting.
+* NVDA will ask you to reconfigure stream labels and other encoder options
+  if encoder configuration file becomes corrupted.
+
+## Changes for 7.0
+
+* Added add-on update check feature. This can be done manually (SPL
+  Assistant, Control+Shift+U) or automatically (configurable via advanced
+  options dialog from add-on settings).
+* It is no longer required to stay in the playlist viewer window in order to
+  invoke most SPL Assistant layer commands or obtain time announcements such
+  as remaining time for the track and broadcaster time.
+* Changes to SPL Assistant commands, including playlist duration (D),
+  reassignment of hour selection duration from Shift+H to Shift+S and
+  Shift+H now used to announce duration of remaining tracks for the current
+  hour slot, metadata streaming status command reassigned (1 through 4, 0 is
+  now Shift+1 through Shift+4, Shift+0).
+* It is now possible to invoke track finder via SPL Assistant (F).
+* SPL Assistant, numbers 1 through 0 (6 for Studio 5.01 and earlier) can be
+  used to announce specific column information. These column slots can be
+  changed under Columns Explorer item in add-on settings dialog.
+* Fixed numerous errors reported by users when installing add-on 7.0 for the
+  first time when no prior version of this add-on was installed.
+* Improvements to Track Dial, including improved responsiveness when moving
+  through columns and tracking how columns are presented on screen.
+* Added ability to press Control+Alt+left or right arrow keys to move
+  between track columns.
+* It is now possible to use a different screen reader command layout for SPL
+  Assistant commands. Go to advanced options dialog from add-on settings to
+  configure this option between NVDA, JAWS and Window-Eyes layouts. See the
+  SPL Assistant commands above for details.
+* NVDA can be configured to switch to a specific broadcast profile at a
+  specific day and time. Use the new triggers dialog in add-on settings to
+  configure this.
+* NVDA will report name of the profile one is switching to via instant
+  switch (SPL Assistant, F12) or as a result of time-based profile becoming
+  active.
+* Moved instant switch toggle (now a checkbox) to the new triggers dialog.
+* Entries in profiles combo box in add-on settings dialog now shows profile
+  flags such as active, whether it is an instant switch profile and so on.
+* If a serious problem with reading broadcast profile files are found, NVDA
+  will present an error dialog and reset settings to defaults instead of
+  doing nothing or sounding an error tone.
+* Settings will be saved to disk if and only if you change settings. This
+  prolongs life of SSD's (solid state drives) by preventing unnecessary
+  saves to disk if no settings have changed.
+* In add-on settings dialog, the controls used to toggle announcement of
+  scheduled time, listener count, cart name and track name has been moved to
+  a dedicated status announcements dialog (select status announcement button
+  to open this dialog).
+* Added a new setting in add-on settings dialog to let NVDA play beep for
+  different track categories when moving between tracks in playlist viewer.
+* Attempting to open metadata configuration option in add-on settings dialog
+  while quick metadata streaming dialog is open will no longer cause NVDA to
+  do nothing or play an error tone. NvDA will now ask you to close metadata
+  streaming dialog before you can open add-on settings.
+* When announcing time such as remaining time for the playing track, hours
+  are also announced. Consequently, the hour announcement setting is enabled
+  by default.
+* Pressing SPL Controller, R now causes NVDA to announce remaining time in
+  hours, minutes and seconds (minutes and seconds if this is such a case).
+* In encoders, pressing Control+NVDA+0 will present encoder settings dialog
+  for configuring various options such as stream label, focusing to Studio
+  when connected and so on.
+* In encoders, it is now possible to turn off connection progress tone
+  (configurable from encoder settings dialog).
+
+## Changes for 6.4
+
+* Fixed a major problem when switching back from an instant switch profile
+  and the instant switch profile becomes active again, seen after deleting a
+  profile that was positioned right before the previously active
+  profile. When attempting to delete a profile, a warning dialog will be
+  shown if an instant switch profile is active.
+
+## مستجدات الإصدار 6.3
+
+* تحسينات أمنية داخلية
+* عند بدأ تشغيل الإصدار 6.3 وما بعده من الإضافة لأول مرة على نظام ويندوز 8
+  وما بعده مع NVDA2016.1 وما بعده, ستظهر محاورة تطلب منك تعطيل نمط خفض
+  الأصوات الأخرى وذلك بالضغط على NVDA+shift+d ويمكنك تحديد المربع الذي يمنع
+  ظهور هذا التنبيه في المرات القادمة.
+* إضافة اختصار لإرسال الأخطاء البرمجية, والاقتراحات والاستفسارات الأخرى
+  لمطور الإضافة (Control+NVDA+dash (hyphen, "-")).
+* ترجمة الإضافة لمزيد من اللغات
+
+## مستجدات الإصدار 6.2
+
+* معالجة مشكلة كانت تحدث مع اختصار بقية قائمة التشغيل (D من مساعد spl (r في
+  النمط التوافقي)) حيث كان يتم الإعلان عن مدة الساعة الحالية بدلا من الإعلان
+  عن مدة قائمة التشغيل كلها (حيث يمكن تعديل ذلك من الإعدادات المتقدمة
+  بمحاورة إعدادات الإضافة).
+* يمكن ل NVDA الآن الإعلان عن المسار المشغل حاليا من أي برنامج (يمكن إعداد
+  ذلك من إعدادات الإضافة).
+* أصبح الإعداد المستخدم في في جعل أمر المتحكم في spl يستدعي مساعد Spl مقدم
+  (حيث كان ذلك الإعداد مفعل في كل الأوقات).
+* في تشفير sam, سيعمل الاختصاران Control+F9 و Control+F10 الآن بشكل صحيح.
+* في التشفيرات, عند تنشيط تشفير معين وكان هذا التشفير معد كي تتم مراقبته في
+  الخلفية, فسيبدأ NVDA عملية المراقبة آليا.
+
+## مستجدات الإصدار 6.1
+
+* من الآن ستكون إعدادات بيانات البث وتضمين ترتيب إعلان الأعمدة في أوضاع.
+* عند تغير الوضع, سيعلن عن بيانات البث الصحيحة.
+* عند فتح محاورة إعدادات بيانات البث السريعة (لم يعين لها مفتاح), سيتم تطبيق
+  التعديلاتللوضع النشط.
+* عند بدأ تشغيل البرنامج, تغيرت طريقة عرض الأخطاء إذا كان الوضع الذي به خطأ
+  هو الوضع العادي.
+* عند تغيير اختصارات إعدادات معينة كاختصار الإعلان عن الحالة, تمت معالجة خطأ
+  عدم الاحتفاظ بالإعدادات المعدلة عند الانتقال لوضع آخر.
+* عند استخدام أي من الأوامر المساعدة ل SPL باختصار مخصص (كاختصار المسار
+  التالي), لم يعد يتطلب منك أن تبقى في عارض قائمة التشغيل لاستخدام هذه
+  الأوامر (يمكن تنفيذهم من أي مكان من نوافذ أخرى).
+
+## مستجدات الإصدار 5.0
+
+* أوامر جديدة بمساعد spl, وتشمل تلك الأوامر الإعلان عن عنوان المسار المشغل
+  حاليا (c), الإعلان عن حالة بث البيانات (e, من 1 إلى 4 و 0) وفتح دليل
+  المستخدم على الإنترنت (Shift+F1).
+* إمكانية عمل حزمة من الإعدادات المفضلة كملفات شخصية لاستخدامها أثناء العرض
+  وللانتقال إلى ملف شخصي لم يعرف من قبل. انظر دليل الإضافة للمزيد من
+  التفاصيل عن ملفات النشرات الصوتية.
+* إضافة إعداد جديد للتحكم في طول الرسالة (سيتم تقليل بعض الرسائل عند تشغيل
+  مستوى متقدم من الإطناب).
+* إضافة إعداد جديد للسماح ل NVDA بالإعلان عن الساعات, والدقائق, والثواني
+  لأوامر مدة المسار أو قائمة التشغيل (الخصائص المندرجة تحت هذا الإعداد تشمل
+  الإعلان عن الوقت المنقضي والوقت المتبقي للمسار المشغل حاليا, وتحليل وقت
+  المسار وخصائص أخرى).
+* يمكن ل NVDA إخبارك بالوقت الإجمالي لنطاق من المسارات عبر خاصية تحليل وقت
+  المسار. اضغط على f9 بمساعد spl لتحديد المسار الحالي كبداية للتحديد, انتقل
+  إلى نهاية المسارات المراد وضعها في نطاق ثم اضغط الأمر f10. يمكن إعادة
+  تخصيص هذه الأوامر فلا يجب على المستخدم استدعاء نمط مساعد أوامر spl لإجراء
+  تحليل وقت المسار.
+* إضافة محاورة للبحث عن عمود (لم يتم تعيين أمر له) للبحث عن نص بأعمدة محددة
+  مثل المطرب أو جزء من اسم ملف.
+* إضافة محاورة جديدة للبحث عن الوقت الإجمالي لنطاق من المسارات (لم يتم تعيين
+  أمر له) وهذا الأمر مفيد عندما تريد ملء وقت متبقي بالساعة فستبحث عن مسار
+  بمدة الوقت المتبقي.
+* إضافة إمكانية إعادة ترتيب الإعلان عن أعمدة المسار وللإيجاز في الإعلان عن
+  بعض الأعمدة إذا كان مربع التحديد"استخدام ترتيب الشاشة" غير محدد من محاورة
+  إعدادات الإضافة. استخدم محاورة "إدارة الإعلان عن الأعمدة" لإعادة ترتيب
+  الأعمدة.
+* إضافة محاورة (لم يتم تعيين أمر لها) لتنقل بين تعطيل وتشغيل الإعلان عن حالة
+  بث البيانات بسرعة.
+* إضافة إعداد لتحديد متى يتم الإعلان عن حالة بث البيانات ولتشغيل الإعلان عن
+  حالة بث البيانات.
+* إضافة إمكانية تحديد مسار كعلامة مرجعية للعودة إليه فيما بعد (control+k
+  بمساعد spl لتحديد المسار كعلامة مرجعية و k بمساعد spl للانتقال إلى المسار
+  المحدد).
+* تحسين الأداء عند البحث عن مسار تالي أو سابق يحتوي على نص البحث.
+* إضافة إعداد للإعلان عن تنشيط الميكروفون ويكون ما بين الصفير أو الرسائل أو
+  كلاهما.
+* أصبح من الممكن إعداد تنبيه الميكروفون بين 0 (للتعطيل) وساعتين (7200 ثانية)
+  واستخدام الأسهم للتنقل بين قيم هذا الإعداد.
+* إضافة إعداد لإتاحة إعلان بتنشيط الميكروفون يسمع كل فترة.
+* يمكنك الآن استخدام أمر تشغيل وتعطيل إدارة المسارات بنافذة الاستوديو لإدارة
+  مسار لم تقم بتعيين أمر لإدارته.
+* إضافة إمكانية استخدام نمط أوامر SPL لاستدعاء مساعد SPL (والذي يمكن العثور
+  عليه بمحاورة الإعدادات المتقدمة للإضافة بمحاورة إعدادات الإضافة).
+* إضافة إمكانية استخدام NVDA لبعض الأوامر التي يستخدمها SPL مع بعض قارآت
+  الشاشة الأخرى. لإعداد ذلك, اذهب إلى إعدادات الإضافة, اختر إعدادات متقدمة
+  وقم بتحديد نمط التوافق مع قارآت الشاشة.
+* في التشفيرات, سيتم تذكر الإعدادات مثل إعداد تنشيط التطبيق عند الاتصال.
+* أصبح من الممكن عرض أعمدة متعددة من نافذة التشفير (مثل حالة اتصال التشفير)
+  عبر الضغط على Control+NVDa زائد رقم الأمر, عد إلى أوامر التشفير المذكورة
+  أعلاه.
+* معالجة خطأ برمجي نادر كان يحدث عند الانتقال للتطبيق أو إغلاق إحدى محاورات
+  NVDA (مثل محاورات الإضافة) وهو منع أوامر المسارات من العمل بشكل جيد (مثل
+  أمر إدارة المسارات).
+
+## مستجدات الإصدار 5.6
+
+* في studio 5.10 وما بعده, لم يعد يعلن NVDA عن رسالة "غير محدد" عند تشغيل
+  المسار المحدد.
+* نظرا لوجود مشكلة في تطبيق studio نفسه, سيعلن NVDA الآن عن اسم التراك
+  المشغل حاليا آليا. تمت إضافة خيار لتعطيل وتشغيل هذا الإعداد بمحاورة
+  إعدادات الإضافة.
+
+## مستجدات الإصدار 3.0
+
+* سيتم تذكر إعداد التشغيل بعد الاتصال عند البعد عن نافذة التشفير.
+
+## مستجدات الإصدار 5.4
+
+* إجراء فحص للمكتبة من محاورة إدراج المسارات لم يعد ينتج عنه عدم إعلان NVDA
+  عن حالة الفحص أو تشغيل نغمات الخطأ إذا كان NVDA معد للإعلان عن مدى التقدم
+  في فحص المكتبة أو عدد الفحص.
+* ترجمة الإضافة لمزيد من اللغات
+
+## مستجدات الإصدار 5.3
+
+* توفير حل لمشكلة تشفير SAM (عدم تشغيل المسار التالي إذا كان يوجد مسار مشغل
+  بالفعل وعندما يكون التشفير متصل(.
+* لم يعد NVDA يصدر صوت الخطأ أو لم يفعل شيء إذا تم ضغط F1 المنوط بتشغيل نمط
+  المساعدة ل SPL.
+
+## مستجدات الإصدار 5.2
+
+* لم يعد يسمح NVDA بفتح محاورتي الإعدادات والتنبيهات. ستظهر رسالة تحذيرية
+  تخبرك بضرورة إغلاق المحاورة المفتوحة أولا قبل الشروع في فتح محاورة أخرى.
+* عند مراقبة تشفير أو أكثر, فإن الضغط على E سيعلن الآن عن عدد التشفير ومعرف
+  التشفير واسم ملف التشغيل إن وجد.
+* يدعم NVDA كل أوامر الاتصال وقطع الاتصال (Control+F9/Control+F10) بتشفيرات
+  سام SAM encoders.
+* لم يعد يقوم NVDA بتشغيل المسار التالي إذا كان أحد التشفيرات متصل أثناء
+  تشغيل مسار من الاستوديو وأنه تم إخبار الاستوديو بتشغيل مسارات أثناء اتصال
+  التشفيرات.
+* ترجمة الإضافة لمزيد من اللغات
+
+## مستجدات الإصدار 5.1
+
+* أصبح من الممكن مراجعة الأعمدة الفردية بأداة المسار عبر خاصية إدارة المسار
+  (بضغط المفتاح المخصص لهذا الغرض). لاحظ أنه يجب تنشيط الاستوديو قبل الشروع
+  في استخدام هذا النمط.
+* إضافة مربع تحديد بإعدادات الإضافة للتبديل بين تشغيل وتعطيل الإعلان عن اسم
+  التنويه الجاري تشغيله.
+* تشغيل أو تعطيل الميكروفون عبر نمط أوامر SPL لم يعد يتسبب في إصدار نغمات
+  خطأ أو عدم إصدار صوت تشغيل أو تعطيل الميكروفون.
+* إذا تم تخصيص أمر لمساعد نمط أوامر SPL وتم ضغط هذا الأمر مباشرة بعد الدخول
+  في نمط المساعدة, فسيخرج NVDA من هذا النمط.
+
+## مستجدات الإصدار 5.0
+
+* إضافة محاورة لإعدادات إضافة SPL, والتي يمكن الوصول إليها من قائمة
+  التفضيلات ب NVDA أو بالضغط على Control+NVDA+0 من نافذة التطبيق.
+* إضافة إمكانية العودة بكافة الإعدادات للوضع الافتراضي من محاورة الإعدادات.
+* إذا وجد خطأ ببعض الإعدادات, فستعود الإعدادات التي بها الخطأ إلى الوضع
+  الافتراضي.
+* إضافة نمط شاشة لمس لتطبيق SPL وأوامر لمس لأداء مهام مختلفة.
+* تعديلات بمساعد نمط أوامر SPL ويشمل ذلك التعديل إضافة أمر للمساعدة (F1)
+  وحذف الأوامر المنوطة بتعطيل أو تشغيل الإعلان عن عدد المستمعين (Shift+I)
+  والإعلان عن الوقت المجدول (Shift+S). 
+* إعادة تسمية "التبديل بين تعطيل وتشغيل الحالة" إلى "الإعلان عن الحالة" حيث
+  أن الصفير يستخدم في الإعلان عن معلومات أخرى للحالة كالانتهاء من فحص
+  المكتبة.
+* الاحتفاظ من الآن بإعداد الإعلان عن الحالة عبر الجلسات. حيث كنت من قبل
+  تحتاج إلى تشغيل هذا الإعداد يدويا عند بدأ الاستوديو.
+* يمكنك الآن استخدام خاصية إدارة المسارات لمراجعة الأعمدة بمدخل أحد المسارات
+  بعارض قائمة التشغيل الرئيسي بالاستوديو (لتعطيل أو تشغيل هذه الخاصية قم
+  بالضغط على الاختصار الذي قمت بتعيينه لذلك الأمر).
+* يمكنك الآن تخصيص اختصارات للإعلان عن درجة الحرارة أو للإعلان عن عنوان
+  المسار التالي إذا كان مجدول.
+* إضافة مربع تحديد بمحاورتي نهاية المسار والتنبيه بمقدمة الأغنية لتفعيل أو
+  تعطيل هذه التنبيهات (قم بالتحديد للتشغيل). يمكن "إعداد" هذه التنبيهات من
+  إعدادات الإضافة.
+* معالجة مشكلة فتح محاورة التنبيه أو أمر البحث عن مسار أثناء وجود أي من هذه
+  المحاورات مفتوحة والتي كانت تتسبب في ظهور هذه المحاورات أكثر من مرة. الآن
+  سيطلب منك إغلاق المحاورة المفتوحة مسبقا أولا.
+* تعديلات وإصلاحات بمستكشف التنويهات, استكشاف بنوك تنويهات خاطئة عندما يكون
+  المستخدم غير موجود بعارض قائمة التشغيل. من الآن سيعمل مستكشف التنويهات على
+  التأكد من أن المستخدم موجود بعارض قائمة التشغيل.
+* إضافة إمكانية استخدام نمط أوامر SPL لاستدعاء مساعد SPL (تجريبي, انظر ملف
+  المساعدة الخاص بالإضافة لمعرفة كيفية تفعيل هذه الخاصية).
+* في نوافذ التشفير, سيعلن أمر الوقتوالتاريخ ب NVDA (افتراضيا nvda+f12) عن
+  الوقت بالثواني.
+* يمكنك الآن مراقبة التشفيرات الفردية لحالة الاتصال والرسائل الأخرى بالضغط
+  على Control+F11 وذلك أثناء تنشيط التشفير الذي تود مراقبته (يعمل أفضفل عند
+  استخدام SAM encoders).
+* إضافة اختصار بنمط spl controller للإعلان عن حالة مراقبة التشفير (E).
+* جاري العمل على معالجة مشكلة نطق NVDA أسماء ملفات تشغيل للتشفير الخطأ,
+  وخاصة بعد حذف أحد التشفيرات (لإعادة ترتيب أسماء ملفات التشغيل, اضغط على
+  Control+F12, ثم قم باختيار موضع التشفير الذي قمت بحذفه).
+
+## مستجدات الإصدار 4.4/3.9
+
+* وظيفة البحث في المكتبة تعمل الآن في الإصدار 5.10 (مطلوب آخر نسخة من
+  الإصدار 5.10).
+
+## مستجدات الإصدار 4.3/3.8
+
+* عند الانتقال إلى جزء آخر من التطبيق كالانتقال إلى محاورة إدراج مسارات
+  أثناء تنشيط مستكشف التنويهات, فإن NVDA لم يعد يعلن عن رسائل التنويهات عند
+  ضغط المفاتيح الخاصة بذلك (على سبيل المثال, تحديد مكان مسار من محاورة إدراج
+  المسارات).
+* مفاتيح اختصارات مساعدة جديدة, تشمل التنقل بين الإعلان عن الأوقات المجدولة
+  وعدد المستمعين (Shift+S و Shift+i بالترتيب, لم يتم حفظها عبر الجلسات).
+* عند الخروج من التطبيق أثناء فتح أكثر من محاورة تحذير, فسيعلم NVDA بأنه قد
+  تم الخروج من التطبيق ولم يقم بحفظ أية تعديلات على المحاورات التحذيرية
+  المفتوحة.
+* ترجمة الإضافة لمزيد من اللغات
+
+## مستجدات الإصدار 4.2/3.7
+
+* لم يعد ينسى NVDA الاحتفاظ بتعريفات encoder الجديدة والتي تم تغييرها عندما
+  يقوم المستخدم بتسجيل الخروج من ويندوز أو عند إعادة تشغيل الجهاز.
+* عند حدوث خلل في ملف إعدادات الإضافة عند بدأ تشغيل NVDA, فسيسترجع NVDA
+  الإعدادات الافتراضية وستظهر رسالة تخبر المستخدم بذلك.
+* في الإصدار 3.7, تم تصحيح الخطأ الذي كان يحدث عند حزف المسارات بالإصدار
+  4.33 من الاستوديو (نفس الإصلاح تم لمستخدمي الإصدار 5.0x بالإصدار 4.1 من
+  الإضافة).
+
+## مستجدات الإصدار 4.1
+
+* في استوديو 5.0x, حزف مسار من عارض قائمة التشغيل الرئيسية لم يعد يتسبب في
+  إعلان NVDA عن المسار الموجود أسفل المسار الجديد النشط (تلاحظ هذه المشكلة
+  بوضوح إذا تم حزف المسار السابق للمسار الأخير حيث كان NVDA يقول في هذه
+  الحالة "مجهول").
+* معالجة العديد من قضايا البحث في المكتبة في إستوديو 5.10, ومن بين هذه
+  القضايا الإعلان عن مجموع العناصر بالمكتبة أثناء التحرك بمفتاح الانتقال
+  بمحاورة إدراج المسارات والقول "جاري البحث" عند محاولة ملاحظة البحث في
+  المكتبة عبر مساعد SPL 
+* عند استخدام سطر إلكتروني مع الإصدار 5.10 من SPL وعندما يكون المسار محدد,
+  فإن الضغط على المسافة لتحديد مسار آخر لم يعد يتسبب في عدم انعكاس حالة
+  المسار الجديد على السطر الإلكتروني.
+
+## مستجدات الإصدار 4.0/3.6
+
+الإصدار 4.0 من الإضافة يدعم الإصدار SPL Studio 5.00 وما بعدها, مع الإصدار
+3.x والذي صمم لتوفير بعض الخصائص الجديدة من إصدار الإضافة 4.0 للمستخدمين
+الذين يثبتون إصدار قديم من تطبيق SPL.
+
+* مفاتيح مساعدة جديدة لتطبيق SPL, وقت محدد للمسار (S), الوقت المتبقي لقائمة
+  التشغيل (D) ودرجة الحرارة (W إذا كانت ضمن الإعدادات).
+* مفاتيح اختصار جديدة بمساعد أوامر SPL, وتشمل شريط التقدم للبحث في المكتبة
+  (Shift+R) وتشغيل الميكروفون دون التلاشي (N). 
+* عند تشغيل أو تعطيل الميكروفون عبر مساعد أوامر SPL, فسيصدر صوت للتنبيه
+  بحالة تعطيل أو تشغيل الميكروفون.
+* الإعدادات مثل وقت نهاية المسار سيتم حفظها في ملف إعدادات صنع خصيصا لهذا
+  الغرض يوجد بمجلدك الشخصي وستحفظ الإعدادات مع ترقية الإضافة (4.0 وما
+  بعدها).
+* إضافة مفتاح الاختصار (Alt+NvDA+2 لضبط وقت التنبيه بمقدمة الأغنية وهو ما
+  بين 1 إلى 9 ثوان.
+* في محاورات نهاية المسار والتنبيه بالمقدمة, يمكنك استخدام السهم الأعلى
+  والأسفل لتغيير إعدادات التنبيه. إذا قمت بإدخال قيمة خاطئة, فسيضبط وقت
+  التنبيه على أقصى قيمة.
+* إضافة الأمر (Control+NVDA+4) لضبط الوقت الذي سيصدر بعده NVDA يخبرك به إن
+  الميكروفون مشغل لفترة.
+* إضافة خاصية للإعلان عن الوقت بالساعات, والدقائق والثوان (لم يتم توفير
+  مفتاح اختصار بعد)
+* أصبح بالإمكان تتبع البحث في المكتبة من خلال محاورة إدراج مسار أو من أي
+  مكان, مع وضع أمر لخيارات الإعلان عن البحث في المكتبة (Alt+NVDA+R) 
+* دعم أداة المسار, ويشمل ذلك إصدار صوت إذا كان للمسار بداية محددة وأوامر
+  للإعلان عن المعلومات المتوفرة على المسار مثل الإعلان عن مدة المسار ومكانه
+  بقائمة المسارات.
+* دعم StationPlaylist Encoder (Studio 5.00 وما بعده), مع توفير نفس الدعم
+  الذي نقدمه ل SAM Encoder.
+* في نوافذ encoder, لم يعد يصدر NVDA نغمات الخطأ عند إخبار NVDA بالانتقال
+  إلى نافذة الستوديو على الاتصال بالخادم أثناء تصغير نافذة الاستوديو.
+* لم تعد تسمع أخطاء عند حزف مواد معرفة.
+* أصبح بالإمكان مراقبة بداية ونهاية الأغنية بالبرايل وذلك باستخدام خيارات
+  ميقات البرايل (Control+Shift+X).
+* معالجة مشكلة كانت تحدث عند محاولة الانتقال لنافذة التطبيق من أي برنامج آخر
+  بعد تصغير كافة النوافذ مما كان يتسبب في ظهور شيء آخر.
+* عند استخدام الإصدار 5.01 من SPL أو ما قبله, فإن NVDA لم يعد يعلن عن بعض
+  معلومات الحالة لمرات متعددة, من أمثلة ذلك الوقت المحدد.
+
+## مستجدات الإصدار 3.4
+
+* التعامل بشكل صحيح مع التنويهات التي تم تعيين اختصار لها يشمل مفتاح التحكم
+  على سبيل المثال (control+f1) بنمط استكشاف التنويهات.
+* معالجة خطأ كان يحدث عند قراءة NVDA معلومات خاطئة عندما كنت تريد الحصول على
+  معلومات عن الوقت المتبقي والمنقضي في الإصدار 5.10 من SPL Studio 
+* ترجمة الإضافة لمزيد من اللغات
+
+## مستجدات الإصدار 3.0
+
+* في نمط استكشاف التنويهات, التعامل مع الاختصارات التي تشمل مفتاح التحكم
+  بشكل صحيح.
+* ترجمة الإضافة لمزيد من اللغات
+
+## مستجدات الإصدار 3.3
+
+* لم يعد من الضروري البقاء بنافذة sam encoder حتى إجراء الاتصال بخادم البث
+  باستخدام sam encoder.
+* معالجة مشكلة عدم عمل بعض اختصارات encoder عند الانتقال لنافذة sam من
+  البرامج الأخرى على سبيل المثال (أوامر تعريف البث).
+
+## مستجدات الإصدار 3.2
+
+* إضافة اختصار للإعلان عن الوقت المتبقي من المسار الحالي (r).
+* تصحيح رسالة المساعدة التفاعلية لاختصار shift+f11 بنافذة sam encoder.
+* إذا تم استخدام الاستوديو القياسي بنمط استكشاف التنويهات, سيقوم NVDA بتنبيه
+  المستخدم عن عدم إتاحة مفاتيح صف الأرقام العلوي لتعيين اختصارات للتنويهات.
+* في الإصدار 5.10, عدم صدور صوت الخطأ أثناء البحث عن المسارات.
+* ترجمة الإضافة لمزيد من اللغات وتحديث الترجمة.
+
+## مستجدات الإصدار 3.1
+
+* في نافذة sam encoder, وضع اختصار (shift+f11) لتشغيل أول مسار بعد الاتصال
+  بالخادم.
+* معالجة العديد من الأخطاء عند الاتصال بخادم ب sam encoder, ومن بين هذه
+  المشكلات عدم القدرة على تنفيذ أوامر NVDA, وصمت NVDA بعد إجراء الاتصال
+  بالخادم, إصدار صوت الخطء بدلا من صوت الصفير للإعلان عن إتمام الاتصال.
+
+## مستجدات الإصدار 3.0
+
+* تم إضافة مستكشف التنويهات للتعرف على المفتاح المنوط بتشغيل كل تنويه (يمكن
+  تعيين مفاتيح ل96 تنويه).
+* تمت إضافة أوامر جديدة, بما في ذلك وقت المذيع (NVDA+Shift+F12) وعدد
+  المستمعين (i) وعنوان المسار التالي (n) في وضع مساعد أوامر SPL.
+* سيتم الإعلان عن الرسائل ذات الحالتين على السطر الإلكتروني بغض النظر عن وضع
+  الإعلان عن تلك الرسائل سواء كان صفير أم نطق.
+* عندما تقوم بتصغير نافذة StationPlaylist وتريد الانتقال إلى نافذة البرنامج
+  من أي مكان, فإن NVDA سيخبرك بأن النافذة مصغرة.
+* لم تعد تسمع صوت الخطأ عندما يكون الإعلان عن الحالة في وضع الصفير وعندما
+  تكون رسائل الحالة رسائل أخرى غير تشغيل وتعطيل (مثال: تشغيل التنويهات أو
+  الإعلانات).
+* لم تعد تسمع صوت الخطأ عند رغبتك في الحصول على معلومات مثل الوقت المتبقي
+  أثناء تنشيط نوافذ الاستوديو الأخرى غير نافذة قائمة المسارات (مثل محاورة
+  الخيارات). إذا تعذر الحصول على المعلومات المطلوبة, فإن NVDA سيخبرك بهذا.
+* أصبح من الممكن البحث عن مسار باسم المطرب حيث كنت في السابق لا تتمكن إلا من
+  البحث بعنوان المسار فقط.
+* دعم إضافة SAM Encoder الموجودة بتطبيق Winamp, بما في ذلك إمكانية تسمية
+  الملف الذي يبث عبر الخادم والتنقل بين تشغيل وتعطيل خاصية الرجوع لنافذة
+  الاستوديو بعد الاتصال بالخادم.
+* يتوفر ملف المساعدة للإضافة من مدير الإضافات البرمجية.
+
+## مستجدات الإصدار 2.1
+
+* معالجة خطأ كان يحدث عندما يكون المستخدم غير قادر على الحصول على معلومات
+  مثل تلك التي تعبر عن حالة الآلية وذلك عند تشغيل SPL Studio لأول مرة أثناء
+  تشغيل NVDA.
+
+## مستجدات الإصدار 2.0
+
+* قد تم إلغاء بعض الاختصارات العامة والخاصة بالبرنامج حتى يتسنى للمستخدم
+  تخصيص الأوامر من محاورة اختصارات NVDA (يحتاج الإصدار 2.0 من الإضافة
+  استخدام إصدار NVDA 2013.3 أو أعلى). 
+* إضافة المزيد من مساعد أوامر SPL كالإعلان عن حالة نمط التحرير
+* الآن يمكنك التحول إلى SPL أستديو حتى وإن كانت جميع النوافذ مصغرة (قد لا
+  يعمل أحيانا). 
+* امتداد وقت التحذير بنهاية المسار إلى 59 ثانية
+* يمكنك الآن البحث عن مسار في قائمة التشغيل بالضغط على Control+NVDA+F وكل من
+  NVDA+f3 أو NVDA+Shift+F3 للتنقل بين المسار التالي أو السابق على التوالي. 
+* أصبح NVDA يعلن أسماء مربعات التحرير والسرد الصحيحة (مثل محاورة الخيارات
+  وشاشة تنزيل البرنامج الأولى). 
+* معالجة خطأ كان يحدث عند قراءة NVDA معلومات خاطئة عندما كنت تريد الحصول على
+  معلومات عن الوقت المتبقي في الإصدار الخامس من SPL Studio 
+
+## مستجدات الإصدار 1.2
+
+* عند تثبيت الإصدار 4.x من تطبيق StationPlayList على أنظمة التشغيل 8/8.1 على
+  بعض الحواسيب, أصبح من الممكن الاستماع مرة أخرى إلى الوقت المنقضي والوقت
+  المتبقي للمسار.
+* ترجمة الإضافة لمزيد من اللغات
+
+## مستجدات الإصدار 1.1
+
+* إضافة مفتاح الاختصار (Control+NvDA+2) لوضع صوت تنبيهي لمعرفة نهاية المسار.
+* إصلاح خطأ برمجي يتعلق بعدم الإعلان عن بعض أسماء مربعات التحرير (وبخاصة
+  حقول التحرير بمحاورة الخيارات).
+* ترجمة الإضافة لمزيد من اللغات
+
+
+## مستجدات الإصدار 1.0
+
+* إصدار أولي
+
+[[!tag dev stable]]
+
+[1]: http://addons.nvda-project.org/files/get.php?file=spl
+
+[2]: http://addons.nvda-project.org/files/get.php?file=spl-dev [2]: ;
+
+[3]: http://addons.nvda-project.org/files/get.php?file=spl-dev [2]: ;
+

diff --git a/addon/doc/bg/readme.md b/addon/doc/bg/readme.md
new file mode 100644
index 0000000..7d4446e
--- /dev/null
+++ b/addon/doc/bg/readme.md
@@ -0,0 +1,795 @@
+# StationPlaylist Studio #
+
+* Автори: Geoff Shang, Joseph Lee и други сътрудници
+* Изтегляне [стабилна версия][1]
+* Изтегляне [работна версия][2]
+
+This add-on package provides improved usage of StationPlaylist Studio, as
+well as providing utilities to control the Studio from anywhere.
+
+За повече информация относно добавката прочетете [ръководството за
+добавката][3].
+
+IMPORTANT: This add-on requires NVDA 2015.3 or later and StationPlaylist
+Studio 5.00 or later. If you have installed NVDA 2016.1 or later on Windows
+8 and later, disable audio ducking mode.
+
+## Бързи клавиши
+
+* Alt+Shift+T, докато сте в прозореца на програмата: съобщава изминало време
+  за текущо просвирвания запис.
+* Control+Alt+T (two finger flick down in SPL touch mode) from Studio
+  window: announce remaining time for the currently playing trakc.
+* NVDA+Shift+F12 (two finger flick up in SPL touch mode) from Studio window:
+  announces broadcaster time such as 5 minutes to top of the hour.
+* Control+NVDA+1 from Studio window: toggles announcement of status messages
+  (such as automation and end of library scan) between words and beeps.
+* Control+NVDA+2 (two finger flick right in SPL mode) from Studio window:
+  Opens end of track setting dialog.
+* Alt+NVDA+2 (two finger flick left in SPL mode) from Studio window: Opens
+  song intro alarm setting dialog.
+* Control+NVDA+3 докато сте в прозореца на програмата: Превключва прегледа
+  на джингъли за изследване на назначенията на джингълите.
+* Control+NVDA+4 от прозореца на Studio: Отваря диалоговия прозорец за
+  предупреждението за микрофона.
+* Control+NVDA+F докато сте в прозореца на програмата: Отваря прозорец за
+  търсене на базата на името на изпълнител или песен. Натиснете NVDA+F3 за
+  търсене напред или NVDA+Shift+F3 за търсене назад.
+* Alt+NVDA+R от прозореца на Studio: Преминава през настройките за
+  съобщаването на сканирането на библиотеката.
+* Control+Shift+X от прозореца на Studio: Преминава през настройките за
+  брайловия таймер.
+* Control+Alt+right/left arrow (while focused on a track): Announce
+  next/previous track column.
+* Control+NVDA+0 or Alt+NVDA+0 from Studio window: Opens the Studio add-on
+  configuration dialog.
+* Control+NVDA+- (hyphen) from Studio window: Send feedback to add-on
+  developer using the default email client.
+
+## Неприсвоени команди
+
+Следните команди не са присвоени по подразбиране; Ако искате да ги
+присвоите, използвайте диалоговия прозорец за жестове на въвеждане, за да
+добавите команди по избор.
+
+* Превключване към прозореца на SPL Studio от всяка програма.
+* Слой за контролера на SPL
+* Помощен слой на SPL от SPL Studio.
+* Съобщаване на времето, включително и секундите от SPL Studio.
+* Toggling track dial on or off (works properly while a track is focused; to
+  assign a command to this, move to a track in Studio, then open NVDA's
+  input gestures dialog.).
+* Announcing temperature.
+* Announcing title of next track if scheduled.
+* Announcing title of the currently playing track.
+* Marking current track for start of track time analysis.
+* Performing track time analysis.
+* Find text in specific columns.
+* Find tracks with duration that falls within a given range via time range
+  finder.
+* Quickly enable or disable metadata streaming.
+
+## Допълнителни команди при използването на Sam или SPL енкодерите
+
+Следните команди са налични при използването на Sam или SPL енкодерите:
+
+* F9: Свързване с излъчващ сървър.
+* F10 (само за SAM енкодера): Прекъсване на връзката с излъчващия сървър.
+* Control+F9/Control+F10 (SAM encoder only): Connect or disconnect all
+  encoders, respectivley.
+* F11: Определя дали NVDA ще превключва към прозореца на програмата ако
+  избрания енкодер е свързан.
+* Shift+F11: Определя дали ще се просвирва първият избран запис когато
+  енкодера е свързан към излъчващ сървър.
+* Control+F11: Toggles background monitoring of the selected encoder.
+* F12: Opens a dialog to enter custom label for the selected encoder or
+  stream.
+* Control+F12: opens a dialog to select the encoder you have deleted (to
+  realign stream labels and encoder settings).
+* Control+NVDA+0 or Alt+NVDA+0: Opens encoder settings dialog to configure
+  options such as stream label.
+
+In addition, column review commands are available, including:
+
+* Control+NVDA+1: Encoder position.
+* Control+NVDA+2: stream label.
+* Control+NVDA+3 from SAM Encoder: Encoder format.
+* Control+NVDA+3 from SPL Encoder: Encoder settings.
+* Control+NvDA+4 from SAM Encoder: Encoder connection status.
+* Control+NVDA+4 from SPL Encoder: Transfer rate or connection status.
+* Control+NVDA+5 from SAM Encoder: Connection status description.
+
+## Помощен слой на SPL
+
+This layer command set allows you to obtain various status on SPL Studio,
+such as whether a track is playing, total duration of all tracks for the
+hour and so on. From any SPL Studio window, press the SPL Assistant layer
+command, then press one of the keys from the list below (one or more
+commands are exclusive to playlist viewer). You can also configure NvDA to
+emulate commands from other screen readers.
+
+The available commands are:
+
+* A: Автоматизация.
+* C (Shift+C in JAWS and Window-Eyes layouts): Title for the currently
+  playing track.
+* C (JAWS and Window-Eyes layouts): Toggle cart explorer (playlist viewer
+  only).
+* D (R in JAWS layout): Remaining duration for the playlist (if an error
+  message is given, move to playlist viewer and then issue this command).
+* E (G in Window-Eyes layout): Metadata streaming status.
+* Shift+1 through Shift+4, Shift+0: Status for individual metadata streaming
+  URL's (0 is for DSP encoder).
+* E (Window-Eyes layout): Elapsed time for the currently playing track.
+* F: Find track (playlist viewer only).
+* H: продължителност на записите от текущия час.
+* Shift+H: Remaining track duration for the hour slot.
+* I (L in JAWS or Window-Eyes layouts): Listener count.
+* K: Move to the marked track (playlist viewer only).
+* Control+K: Set the current track as the place marker track (playlist
+  viewer only).
+* L (Shift+L in JAWS and Window-Eyes layouts): Line in.
+* M: микрофон.
+* N: заглавието на следващия запис на опашката.
+* P: състояние на възпроизвеждането (активно или спряно).
+* Shift+P: Pitch of the current track.
+* R (Shift+E in JAWS and Window-Eyes layouts): Record to file
+  enabled/disabled.
+* Shift+R: Наблюдаване на напредъка при сканирането на библиотеката.
+* S: Записът ще се възпроизведе в (планирано).
+* Shift+S: Time until selected track will play.
+* T: Включване/изключване на Cart режима на редактиране.
+* U: Изминало време в Studio.
+* Control+Shift+U: Check for add-on updates.
+* W: Време и температура, ако са конфигурирани.
+* Y: Playlist modified status.
+* 1 through 0 (6 for Studio 5.0x): Announce column content for a specified
+  column.
+* F9: Mark current track for track time analysis (playlist viewer only).
+* F10: Perform track time analysis (playlist viewer only).
+* F12: Switch between current and a predefined profile.
+* F1: Layer help.
+* Shift+F1: Opens online user guide.
+
+## Контролер на SPL
+
+Контролерът на SPL е набор от команди за слоя, които може да използвате, за
+да управлявате SPL Studio от всякъде. Натиснете командата за слоя на
+контролера за SPL и NVDA ще съобщи, "Контролер на SPL." Натиснете клавиш,
+отговарящ на някоя от командите по-долу, за да управлявате някоя от многото
+настройки, например заглушаване или активиране на микрофона или просвирване
+на следващия запис.
+
+Наличните команди на контролера на SPL са:
+
+* Натиснете P, за да просвирите следващия маркиран запис.
+* Натиснете U, за да поставите на пауза текущия запис или да възобновите
+  възпроизвеждането.
+* Натиснете S, за да спрете записа със затихване, или натиснете T, за да
+  спрете записа незабавно.
+* Натиснете M или Shift+M за да включите или съответно изключите микрофона,
+  или натиснете N за да задействате микрофона без засилване.
+* Натиснете A, за да разрешите автоматизацията или Shift+A, за да я
+  забраните.
+* Натиснете L, за да разрешите линейния вход или Shift+L, за да го
+  забраните.
+* Press R to hear remaining time for the currently playing track.
+* Натиснете Shift+R за да получите доклад за напредъка по сканирането на
+  библиотеката.
+* Press E to get count and labels for encoders being monitored.
+* Press I to obtain listener count.
+* Натиснете F1 за да изведете помощен прозорец, който изброява наличните
+  команди.
+
+## Track alarms
+
+By default, NvDA will play a beep if five seconds are left in the track
+(outro) and/or intro. To configure this value as well as to enable or
+disable them, press Control+NVDA+2 or Alt+NVDA+2 to open end of track and
+song ramp dialogs, respectively. In addition, use Studio add-on settings
+dialog to configure if you'll hear a beep, a message or both when alarms are
+turned on.
+
+## Предупреждение за микрофона
+
+Можете да укажете на NVDA да възпроизвежда звук, когато микрофонът е бил
+активен от известно време. Натиснете Control+NVDA+4 за да конфигурирате
+времето за предупреждението в секунди (0 го забранява).
+
+## Търсене на записи
+
+Ако желаете бързо да намерите запис от изпълнител или по името на записа, от
+списъка за изпълнение, натиснете Control+NVDA+F. Въведете името на
+изпълнителя или името на песента. NVDA ще ви позиционира върху записа Ако е
+намерен или ще изведе грешка, ако не може да се намери записа, който
+търсите. За да намерите предходно търсен запис или изпълнител, натиснете
+NVDA+F3 или NVDA+Shift+F3, за да търсите съответно напред или назад.
+
+Забележка: Търсенето на записи взема предвид малките и главните букви.
+
+## Разглеждане на джингъли
+
+В зависимост от изданието, SPL Studio позволява да бъдат определени до 96
+джингъли за използване по време на предаване. NVDA ви позволява да чуете кой
+джингъл е назначен за коя от тези команди.
+
+За да изследвате джингълите, от SPL Studio, натиснете
+Control+NVDA+3. Натискането на командата за джингъла ви казва кой е
+асоциирания джингъл. Двукратно натискане просвирва джингъла. Натиснете
+Control+NvDA+3 за да излезете от този режим. За повече информация се
+обърнете към ръководството на добавката.
+
+## Track Dial
+
+You can use arrow keys to review various information about a track. To turn
+Track Dial on, while a track is focused in the main playlist viewer, press
+the command you assigned for toggling Track Dial. Then use left and right
+arrow keys to review information such as artist, duration and so
+on. Alternatively, press Control+Alt+left or right arrows to navigate
+between columns without invoking Track Dial.
+
+## Track time analysis
+
+To obtain length to play selected tracks, mark current track for start of
+track time analysis (SPL Assistant, F9), then press SPL Assistant, F10 when
+reaching end of selection.
+
+## Columns Explorer
+
+By pressing SPL Assistant, 1 through 0 (6 for Studio 5.01 and earlier), you
+can obtain contents of specific columns. By default, these are artist,
+title, duration, intro, category and filename (Studio 5.10 adds year, album,
+genre and time scheduled). You can configure which columns will be explored
+via columns explorer dialog found in add-on settings dialog.
+
+## Configuration dialog
+
+From studio window, you can press Control+NVDA+0 or Alt+NVDA+0 to open the
+add-on configuration dialog. Alternatively, go to NVDA's preferences menu
+and select SPL Studio Settings item. This dialog is also used to manage
+broadcast profiles.
+
+## SPL touch mode
+
+If you are using Studio on a touchscreen computer running Windows 8 or later
+and have NVDA 2012.3 or later installed, you can perform some Studio
+commands from the touchscreen. First use three finger tap to switch to SPL
+mode, then use the touch commands listed above to perform commands.
+
+## Changes for 7.3
+
+* Slight performance improvements when looking up information such as
+  automation via some SPL Assistant commands.
+* Обновени преводи.
+
+## Changes for 7.2
+
+* Due to removal of old-style internal configuration format, it is mandatory
+  to install add-on 7.2. Once installed, you cannot go back to an earlier
+  version of the add-on.
+* Added a command in SPL Controller to report listener count (I).
+* You can now open SPL add-on settings and encoder settings dialogs by
+  pressing Alt+NVDA+0. You can still use Control+NVDA+0 to open these
+  dialogs (to be removed in add-on 8.0).
+* In Track Tool, you can use Control+Alt+left or right arrow keys to
+  navigate between columns.
+* Contents of various Studio dialogs such as About dialog in Studio 5.1x are
+  now announced.
+* In SPL Encoders, NVDA will silence connection tone if auto-connect is
+  enabled and then turned off from encoder context menu while the selected
+  encoder is connecting.
+* Обновени преводи.
+
+## Changes for 7.1
+
+* Fixed erorrs encountered when upgrading from add-on 5.5 and below to 7.0.
+* When answering "no" when resetting add-on settings, you'll be returned to
+  add-on settings dialog and NVDA will remember instant switch profile
+  setting.
+* NVDA will ask you to reconfigure stream labels and other encoder options
+  if encoder configuration file becomes corrupted.
+
+## Changes for 7.0
+
+* Added add-on update check feature. This can be done manually (SPL
+  Assistant, Control+Shift+U) or automatically (configurable via advanced
+  options dialog from add-on settings).
+* It is no longer required to stay in the playlist viewer window in order to
+  invoke most SPL Assistant layer commands or obtain time announcements such
+  as remaining time for the track and broadcaster time.
+* Changes to SPL Assistant commands, including playlist duration (D),
+  reassignment of hour selection duration from Shift+H to Shift+S and
+  Shift+H now used to announce duration of remaining tracks for the current
+  hour slot, metadata streaming status command reassigned (1 through 4, 0 is
+  now Shift+1 through Shift+4, Shift+0).
+* It is now possible to invoke track finder via SPL Assistant (F).
+* SPL Assistant, numbers 1 through 0 (6 for Studio 5.01 and earlier) can be
+  used to announce specific column information. These column slots can be
+  changed under Columns Explorer item in add-on settings dialog.
+* Fixed numerous errors reported by users when installing add-on 7.0 for the
+  first time when no prior version of this add-on was installed.
+* Improvements to Track Dial, including improved responsiveness when moving
+  through columns and tracking how columns are presented on screen.
+* Added ability to press Control+Alt+left or right arrow keys to move
+  between track columns.
+* It is now possible to use a different screen reader command layout for SPL
+  Assistant commands. Go to advanced options dialog from add-on settings to
+  configure this option between NVDA, JAWS and Window-Eyes layouts. See the
+  SPL Assistant commands above for details.
+* NVDA can be configured to switch to a specific broadcast profile at a
+  specific day and time. Use the new triggers dialog in add-on settings to
+  configure this.
+* NVDA will report name of the profile one is switching to via instant
+  switch (SPL Assistant, F12) or as a result of time-based profile becoming
+  active.
+* Moved instant switch toggle (now a checkbox) to the new triggers dialog.
+* Entries in profiles combo box in add-on settings dialog now shows profile
+  flags such as active, whether it is an instant switch profile and so on.
+* If a serious problem with reading broadcast profile files are found, NVDA
+  will present an error dialog and reset settings to defaults instead of
+  doing nothing or sounding an error tone.
+* Settings will be saved to disk if and only if you change settings. This
+  prolongs life of SSD's (solid state drives) by preventing unnecessary
+  saves to disk if no settings have changed.
+* In add-on settings dialog, the controls used to toggle announcement of
+  scheduled time, listener count, cart name and track name has been moved to
+  a dedicated status announcements dialog (select status announcement button
+  to open this dialog).
+* Added a new setting in add-on settings dialog to let NVDA play beep for
+  different track categories when moving between tracks in playlist viewer.
+* Attempting to open metadata configuration option in add-on settings dialog
+  while quick metadata streaming dialog is open will no longer cause NVDA to
+  do nothing or play an error tone. NvDA will now ask you to close metadata
+  streaming dialog before you can open add-on settings.
+* When announcing time such as remaining time for the playing track, hours
+  are also announced. Consequently, the hour announcement setting is enabled
+  by default.
+* Pressing SPL Controller, R now causes NVDA to announce remaining time in
+  hours, minutes and seconds (minutes and seconds if this is such a case).
+* In encoders, pressing Control+NVDA+0 will present encoder settings dialog
+  for configuring various options such as stream label, focusing to Studio
+  when connected and so on.
+* In encoders, it is now possible to turn off connection progress tone
+  (configurable from encoder settings dialog).
+
+## Changes for 6.4
+
+* Fixed a major problem when switching back from an instant switch profile
+  and the instant switch profile becomes active again, seen after deleting a
+  profile that was positioned right before the previously active
+  profile. When attempting to delete a profile, a warning dialog will be
+  shown if an instant switch profile is active.
+
+## Changes for 6.3
+
+* Internal security enhancements.
+* When add-on 6.3 or later is first launched on a computer running Windows 8
+  or later with NVDA 2016.1 or later installed, an alert dialog will be
+  shown asking you to disable audio ducking mode (NVDA+Shift+D). Select the
+  checkbox to suppress this dialog in the future.
+* Added a command to send bug reports, feature suggestions and other
+  feedback to add-on developer (Control+NVDA+dash (hyphen, "-")).
+* Обновени преводи.
+
+## Changes for 6.2
+
+* Fixed an issue with playlist remainder command (SPL Assistant, D (R if
+  compatibility mode is on)) where the duration for the current hour was
+  announced as opposed to the entire playlist (the behavior of this command
+  can be configured from advanced settings found in add-on settings dialog).
+* NvDA can now announce name of the currently playing track while using
+  another program (configurable from add-on settings).
+* The setting used to let SPL Controller command invoke SPL Assistant is now
+  honored (previously it was enabled at all times).
+* In SAM encoders, Control+F9 and Control+F10 commands now works correctly.
+* In encoders, when an encoder is first focused and if this encoder is
+  configured to be monitored in the background, NVDA will now start the
+  background monitor automatically.
+
+## Changes for 6.1
+
+* Column announcement order and inclusion, as well as metadata streaming
+  settings are now profile-specific settings.
+* When changing profiles, the correct metadata streams will be enabled.
+* When opening quick metadata streaming settings dialog (command
+  unassigned), the changed settings are now applied to the active profile.
+* When starting Studio, changed how the errors are displayed if the only
+  corrupt profile is the normal profile.
+* When changing certain settings using shortcut keys such as status
+  announcements, fixed an issue where the changed settings are not retained
+  when switching to and from an instant switch profile.
+* When using a SPL Assistant command with a custom gesture defined (such as
+  next track command), it is no longer required to stay in the Studio's
+  playlist viewer to use these commands (they can be performed from other
+  Studio windows).
+
+## Changes for 6.0
+
+* New SPL Assistant commands, including announcing title of the currently
+  playing track (C), announcing status of metadata streaming (E, 1 through 4
+  and 0) and opening the online user guide (Shift+F1).
+* Ability to package favorite settings as broadcast profiles to be used
+  during a show and to switch to a predefined profile. See the add-on guide
+  for details on broadcast profiles.
+* Added a new setting in add-on settings to control message verbosity (some
+  messages will be shortened when advanced verbosity is selected).
+* Added a new setting in add-on settings to let NVDA announce hours, minutes
+  and seconds for track or playlist duration commands (affected features
+  include announcing elapsed and remaining time for the currently playing
+  track, track time analysis and others).
+* You can now ask NVDA to report total length of a range of tracks via track
+  time analysis feature. Press SPL Assistant, F9 to mark current track as
+  start marker, move to end of track range and press SPL Assistant,
+  F10. These commands can be reassigned so one doesn't have to invoke SPL
+  Assistant layer to perform track time analysis.
+* Added a column search dialog (command unassigned) to find text in specific
+  columns such as artist or part of file name.
+* Added a time range finder dialog (command unassigned) to find a track with
+  duration that falls within a specified range, useful if wishing to find a
+  track to fill an hour slot.
+* Added ability to reorder track column announcement and to suppress
+  announcement of specific columns if "use screen order" is unchecked from
+  add-on settings dialog. Use "manage column announcement" dialog to reorder
+  columns.
+* Added a dialog (command unassigned) to quickly toggle metadata streaming.
+* Added a setting in add-on settings dialog to configure when metadata
+  streaming status should be announced and to enable metadata streaming.
+* Added ability to mark a track as a place marker to return to it later (SPL
+  Assistant, Control+K to set, SPL Assistant, K to move to the marked
+  track).
+* Improved performance when searching for next or previous track text
+  containing the searched text.
+* Added a setting in add-on settings dialog to configure alarm notification
+  (beep, message or both).
+* It is now possible to configure microphone alarm between 0 (disabled) and
+  two hours (7200 seconds) and to use up and down arrow keys to configure
+  this setting.
+* Added a setting in add-on settings dialog to allow microphone active
+  notification to be given periodically.
+* You can now use Track Dial toggle command in Studio to toggle Track Dial
+  in Track Tool provided that you didn't assign a command to toggle Track
+  Dial in Track Tool.
+* Added ability to use SPL Controller layer command to invoke SPL Assistant
+  layer (configurable from advanced Settings dialog found in add-on settings
+  dialog).
+* Added ability for NvDA to use certain SPL Assistant commands used by other
+  screen readers. To configure this, go to add-on settings, select Advanced
+  Settings and check screen reader compatibility mode checkbox.
+* In encoders, settings such as focusing to Studio when connected are now
+  remembered.
+* It is now possible to view various columns from encoder window (such as
+  encoder connection status) via Control+NVDA+number command; consult the
+  encoder commands above.
+* Fixed a rare bug where switching to Studio or closing an NVDA dialog
+  (including Studio add-on dialogs) prevented track commands (such as
+  toggling Track Dial) from working as expected.
+
+## Changes for 5.6
+
+* In Studio 5.10 and later, NVDA no longer announces "not selected" when the
+  selected track is playing.
+* Due to an issue with Studio itself, NVDA will now announce name of the
+  currently playing track automatically. An option to toggle this behavior
+  has been added in studio add-on settings dialog.
+
+## Changes for 5.5
+
+* Play after connecting setting will be remembered when moving away from the
+  encoder window.
+
+## Changes for 5.4
+
+* Performing library scan from Insert Tracks dialog no longer causes NVDA to
+  not announce scan status or play error tones if NVDA is configured to
+  announce library scan progress or scan count.
+* Обновени преводи.
+
+## Changes for 5.3
+
+* The fix for SAM Encoder (not playing the next track if a track is playing
+  and when the encoder connects) is now available for SPL Encoder users.
+* NVDA no longer plays errors or does not do anything when SPL Assistant, F1
+  (Assistant help dialog) is pressed.
+
+## Changes for 5.2
+
+* NVDA will no longer allow both settings and alarm dialogs to be opened. A
+  warning will be shown asking you to close the previously opened dialog
+  before opening another dialog.
+* When monitoring one or more encoders, pressing SPL Controller, E will now
+  announce encoder count, encoder ID and stream label(s) if any.
+* NVDA supports connect/disconnect all commands (Control+F9/Control+F10) in
+  SAM encoders.
+* NVDA will no longer play the next track if an encoder connects while
+  Studio is playing a track and Studio is told to play tracks when an
+  encoder is connected.
+* Обновени преводи.
+
+## Changes for 5.1
+
+* It is now possible to review individual columns in Track Tool via Track
+  Dial (toggle key unassigned). Note that Studio must be active before using
+  this mode.
+* Added a check box in Studio add-on settings dialog to toggle announcement
+  of name of the currently playing cart.
+* Toggling microphone on and off via SPL Controller no longer causes error
+  tones to be played or toggle sound to not be played.
+* If a custom command is assigned for an SPL Assistant layer command and
+  this command is pressed right after entering SPL Assistant, NvDA will now
+  promptly exit SPL Assistant.
+
+## Changes for 5.0
+
+* A dedicated settings dialog for SPL add-on has been added, accessible from
+  NVDA's preferences menu or by pressing Control+NVDA+0 from SPL window.
+* Added ability to reset all settings to defaults via configuration dialog.
+* If some of the settings have errors, only the affected settings will be
+  reset to factory defaults.
+* Added a dedicated SPL touchscreen mode and touch commands to perform
+  various Studio commands.
+* Changes to SPL Assistant layer include addition of layer help command (F1)
+  and removal of commands to toggle listener count (Shift+I) and scheduled
+  time announcement (Shift+S). You can configure these settings in add-on
+  settings dialog.
+* Renamed "toggle announcement" to "status announcement" as beeps are used
+  for announcing other status information such as completion of library
+  scans.
+* Status announcement setting is now retained across sessions. Previously
+  you had to configure this setting manually when Studio starts.
+* You can now use Track Dial feature to review columns in a track entry in
+  Studio's main playlist viewer (to toggle this feature, press the command
+  you assigned for this feature).
+* You can now assign custom commands to hear temperature information or to
+  announce title for the upcoming track if scheduled.
+* Added a checkbox in end of track and song intro alarm dialogs to enable or
+  disable these alarms (check to enable). These can also be "configured"
+  from add-on settings.
+* Fixed an issue where pressing alarm dialog or track finder commands while
+  another alarm or find dialog is opened would cause another instance of the
+  same dialog to appear. NVDA will pop up a message asking you to close the
+  previously opened dialog first.
+* Cart explorer changes and fixes, including exploring wrong cart banks when
+  user is not focused on playlist viewer. Cart explorer will now check to
+  make sure that you are in playlist viewer.
+* Added ability to use SPL Controller layer command to invoke SPL Assistant
+  (experimental; consult the add-on guide on how to enable this).
+* In encoder windows, NVDA's time and date announcement command (NVDA+F12 by
+  default) will announce time including seconds.
+* You can now monitor individual encoders for connection status and for
+  other messages by pressing Control+F11 while the encoder you wish to
+  monitor is focused (works better when using SAM encoders).
+* Added a command in SPL Controller layer to announce status of encoders
+  being monitored (E).
+* A workaround is now available to fix an issue where NvDA was announcing
+  stream labels for the wrong encoders, especially after deleting an encoder
+  (to realign stream labels, press Control+F12, then select the position of
+  the encoder you have removed).
+
+## Промени във версии 4.4/3.9
+
+* Функцията за сканиране на библиотеката вече работи в Studio 5.10 (изисква
+  най-новата компилация на Studio 5.10).
+
+## Промени във версии 4.3/3.8
+
+* При преминаване към друга част на Studio, като например прозореца за
+  вмъкване на записи, докато е активен прегледът на джингъли, NVDA няма да
+  съобщава известията за джингълите при натискане на клавишите за джингълите
+  (например, при намиране на запис в прозореца за вмъкване на записи).
+* Нови клавишни команди за Помощника на SPL, включително за превключване на
+  обявяването на планираното време и броя на слушателите (съответно Shift+S
+  и Shift+I, които не се запазват между сесиите).
+* При изход от Studio при отворени диалогови прозорци за аларми, NVDA ще
+  засече, че Studio е била затворена и няма да запише новите променени
+  стойности за алармите.
+* Обновени преводи.
+
+## Промени във версии 4.2/3.7
+
+* NVDA вече няма да забравя да запазва новите и променените етикети за
+  енкодера когато потребителят излиза от системата или рестартира компютъра.
+* Когато конфигурацията на добавката се повреди при стартиране на NVDA,
+  екранният четец ще възстанови конфигурацията по подразбиране и ще изведе
+  съобщение, с което ще информира потребителя за този факт.
+* Във версия 3.7 на добавката бе отстранен проблем с фокуса забелязан при
+  изтриване на записи в Studio 4.33 (същата корекция е налична за
+  потребителите на Studio 5.0 x във версия 4.1 на добавката).
+
+## Промени във версия 4.1
+
+* В Studio 5.0 x, изтриване на запис от основния списъчен изглед вече няма
+  да предизвиква NVDA да прочита записа под последно фокусирания запис
+  (по-забележимо ако е бил изтрит предпоследният запис, в който случай NVDA
+  съобщаваше "непознат").
+* Поправени са няколко проблема със сканирането на библиотеката в Studio
+  5.10, включително съобщаването на общият брой на елементите в библиотеката
+  при обхождане с табулатора в диалоговия прозорец за вмъкване на записи и
+  съобщаване на "извършва се сканиране" при опит за наблюдаване на
+  сканирането на библиотеката чрез SPL помощника.
+* Когато се използва брайлов дисплей със Studio 5.10 и ако даден запис е
+  отметнат, натискането на интервал за отмятане на запис по-долу, вече не
+  предизвиква брайловия дисплей да не отразява новото състояние на елемента.
+
+## Промени във версии 4.0/3.6
+
+Версия 4.0 поддържа SPL Studio 5.00 и по-нови, а 3.x е предназначена да
+предоставят някои нови функции от 4.0 за потребителите използващи по-стари
+версии на Studio.
+
+* Нови клавиши за SPL Помощника, включително за планираното време за записа
+  (S), оставащото времетраене на списъка за изпълнение (D) и температурата
+  (W, ако е конфигурирано). В допълнение, за Studio 5.x е добавено промяна
+  на списъка за изпълнение (Y) и височина на записа (Shift+P).
+* Нови команди за контролния панел на SPL, включително за напредъка на
+  сканиранията на библиотеката (Shift+R) и за разрешаването на микрофона без
+  засилване (N). Също така, натискането на F1 извежда диалогов прозорец с
+  наличните команди.
+* При разрешаването или забраняването на микрофона през контролния панел на
+  SPL, ще се възпроизвежда сигнал, посочващ дали микрофонът е включен или
+  изключен.
+* Настройки като времето за края на записа се записват в специален
+  конфигурационен файл във вашата потребителска конфигурационна директория и
+  се запазват при обновяване на добавката (версия 4.0 и по-нови).
+* Добавена е команда (Alt+NVDA+2) за задаване на време за предупреждение за
+  въведение в мелодията (между 1 и 9 секунди).
+* В диалоговите прозорци за предупреждението за края на записа и за
+  въведението можете да използвате стрелките за нагоре и надолу за да
+  промените настройките за предупреждението. Ако бъде въведена неправилна
+  стойност, стойността за предупреждението се задава на максималната
+  стойност.
+* Добавена е команда (Control+NVDA+4) за задаване на време след което NVDA
+  ще възпроизвежда звук когато микрофонът е бил активен от известно време.
+* Добавена е възможност за съобщаване на времето в часове, минути и секунди
+  (командата не е назначена).
+* Вече е възможно да се следи сканирането на библиотеката от диалоговия
+  прозорец за вмъкване на записи или от което и да е друго място и
+  специалната команда (Alt+NVDA+R) за превключване на опциите за
+  наблюдаването на сканирането на библиотеката.
+* Поддръжка за Инструмента за записа (Track Tool), включително за
+  възпроизвеждане на сигнал, ако даден запис има зададено въведение и
+  команди за съобщаване на информация за записа, като продължителност и
+  позицията на маркера.
+* Поддръжка за StationPlaylist Encoder (Studio 5.00 и по-нови),
+  предоставяйки същото ниво на поддръжка, като това в SAM Encoder.
+* В прозорците на енкодера, NVDA вече не възпроизвежда сигнала си за грешка,
+  когато на NVDA е указано да премине към Studio при свързване към излъчващ
+  сървър докато прозорецът на Studio е намален.
+* Вече няма грешки след изтриването на поток със зададен към него етикет за
+  потока.
+* Вече е възможно да се наблюдават въведението и края на записа чрез брайл с
+  помощта на опциите за брайловия таймер (Control+Shift+X).
+* Поправен проблем, при който при опит за превключване към прозореца на
+  Studio, след като всички прозорци са били намалени, предизвиква появата на
+  нещо друго.
+* При използване на Studio 5.01 и по-стари, NVDA вече няма да съобщава по
+  няколко пъти дадена информация за състоянието, като например планираното
+  време.
+
+## Промени във версия 3.5
+
+* Когато NVDA бъде стартиран или рестартиран докато фокусът е върху
+  прозореца с основния списък за изпълнение на Studio 5.10, NVDA няма да
+  възпроизвежда звуци при грешка и/или да съобщава следващата и предишната
+  песни, когато се преглеждат песните чрез стрелките.
+* Отстранен е проблем, възникващ при опит да се получат оставащото и
+  изминалото време за песен в по-нови компилации на Studio 5.10.
+* Обновени преводи.
+
+## Промени във версия 3.4
+
+* В разглеждането на джингъли, джингълите включващи клавиша Control (като
+  Ctrl+F1) сега се обработват коректно.
+* Обновени преводи.
+
+## Промени във версия 3.3
+
+* При свързване към излъчващ сървър с използване на SAM encoder, вече не се
+  налага да останете в прозореца на енкодера докато връзката бъде
+  осъществена.
+* Отстранен е проблем, при който командите за енкодера (например за
+  етикетиране на потока) преставаха да работят при превключване към
+  прозореца на SAM от други програми.
+
+## Промени във версия 3.2
+
+* Добавена е команда в контролера на SPL за докладване на оставащо време за
+  текущо просвирвания запис (R).
+* В прозореца на SAM encoder, съобщението в помощен режим за командата
+  Shift+F11 беше поправено.
+* В прегледа на джингъли, ако се използва Studio Standard, NVDA ще ви
+  уведоми, че командите за номер на ред са недостъпни за назначенията на
+  джингъли.
+* В Studio 5.10, търсачката за записи вече не просвирва сигнали за грешка
+  при търсене в записите.
+* Нови и обновени преводи.
+
+## Промени във версия 3.1
+
+* В прозореца на SAM Encoder беше добавена команда (Shift+F11) за указване
+  на Studio да просвири първият запис при свързване.
+* Отстранени са множество грешки при свързване към сървър със SAM Encoder,
+  включително невъзможността за изпълнение на командите на NVDA, пропуска за
+  съобщаване на успешно свързване и сигнали за грешка вместо за успешно
+  свързване.
+
+## Промени във версия 3.0
+
+* Добавен е преглед на джингъли, където може да изследвате назначенията на
+  джингълите (до 96 джингъла могат да бъдат назначени).
+* Добавени са нови команди, включително време на излъчване (NVDA+Shift+F12)
+  и брой на слушателите (i) и заглавие на следващ запис (n) в помощника на
+  SPL.
+* Съобщенията за превключване на настройките като автоматизацията вече се
+  изобразяват на брайл без значение от настройката за известяване на
+  превключването.
+* NVDA ще ви съобщи когато се опитва да превключи към SPL от други програми,
+  но в същото време прозореца на StationPlaylist е минимизиран в системния
+  жлеб (областта за уведомяване).
+* Вече не се чуват сигнали за грешка когато съобщаването на превключванията
+  е зададено на бибипкане и се изговарят съобщения за състоянието, различни
+  от включено и превключване (например: просвирване на джингъли).
+* Вече не се чуват сигнали за грешка когато се опитваме да получим
+  информация като оставащо време докато друг прозорец на Studio различен от
+  списъка със записи (например прозореца за настройка) е на фокус. Ако
+  нужната информация не е намерена, NVDA ще ви съобщи този факт.
+* Вече е възможно да търсите запис по име на изпълнител. Преди можеше да се
+  извърши търсене само по име на запис.
+* Поддръжка за SAM Encoder, включително възможност за етикетиране на
+  енкодера и команда за превключване към Studio когато избраният енкодер е
+  свързан.
+* Помощ за добавката е налична от мениджъра на добавки.
+
+## Промени във версия 2.1
+
+* Отстранен е проблем, при който беше невъзможно да се получи информация за
+  състоянието, например това на автоматизацията, когато SPL 5.x се стартира
+  за първи път след като NVDA вече е бил стартиран.
+
+## Промени във версия 2.0
+
+* Някои глобални и локални клавишни комбинации са премахнати, така че да
+  можете да зададете команда по избор от прозореца за жестове на въвеждане
+  (версия 2.0 на добавката изисква NVDA 2013.3 или по-нова).
+* Добавени са още команди за SPL помощника, като например за състоянието на
+  режима за редактиране cart.
+* Сега можете да преминете към SPL Studio дори ако всички прозорци са
+  намалени (може да не работи в някои случаи).
+* Разширен е диапазона на алармата за край на записа до 59 секунди.
+* Вече можете да търсите за даден запис в списъка за изпълнение
+  (Control+NVDA+F за търсене, NVDA+F3 или NVDA+Shift+F3 за търсене съответно
+  напред и назад).
+* NVDA вече съобщава правилните имена на Разгъващите се списъци (например
+  диалоговия прозорец с опциите и екраните за първоначалната настройка на
+  SPL).
+* Отстранен е проблем, при който NVDA съобщаваше грешна информация при опит
+  за получаване на оставащото време за запис в SPL Studio 5.
+
+## Промени във версия 1.2
+
+* Когато използвате Station Playlist 4.x под Windows 8/8.1, отново е
+  възможно да получите информация за изминало и оставащо време за текущия
+  запис.
+* Обновени преводи.
+
+## Промени във версия 1.1
+
+* Добавена е команда (Control+NvDA+2) за задаване на време за
+  предупреждението за край на записа.
+* Отстранен е проблем, при който имената на определени полета за писане не
+  бяха съобщавани (например някои полета за писане в диалога за настройка на
+  програмата).
+* Добавени са множество преводи.
+
+
+## Промени във версия 1.0
+
+* Първоначално издание
+
+[[!tag dev stable]]
+
+[1]: http://addons.nvda-project.org/files/get.php?file=spl
+
+[2]: http://addons.nvda-project.org/files/get.php?file=spl-dev
+
+[3]: https://bitbucket.org/nvdaaddonteam/stationplaylist/wiki/SPLAddonGuide
+

This diff is so big that we needed to truncate the remainder.

https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/f42061236ac6/
Changeset:   f42061236ac6
Branch:      None
User:        josephsl
Date:        2016-08-12 18:20:21+00:00
Summary:     7.4: Add sizer add function that was accidentally removed during 
merge/conflict resolution

Affected #:  1 file

diff --git a/addon/appModules/splstudio/splconfui.py 
b/addon/appModules/splstudio/splconfui.py
index 9c4a919..cd20e45 100755
--- a/addon/appModules/splstudio/splconfui.py
+++ b/addon/appModules/splstudio/splconfui.py
@@ -311,6 +311,7 @@ class SPLConfigDialog(gui.SettingsDialog):
                self.updateChannel = splupdate.SPLUpdateChannel
                self.pendingChannelChange = False
                settingsSizer.Add(item)
+               settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
                # Translators: The label for a button in SPL add-on 
configuration dialog to reset settings to defaults.
                self.resetConfigButton = wx.Button(self, wx.ID_ANY, 
label=_("Reset settings"))


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/1b659f72691f/
Changeset:   1b659f72691f
Branch:      None
User:        josephsl
Date:        2016-08-15 15:21:49+00:00
Summary:     7.4: Present LTS dialog if a specific file is found.

Back in March 2016, users were asked how one should transition to LTS release, 
and a channel method was chosen. To facilitate this, a message will be 
presented, giving users an opportunity to switch to LTS. This will be disabled 
in add-on 8.

Affected #:  3 files

diff --git a/addon/appModules/splstudio/splconfig.py 
b/addon/appModules/splstudio/splconfig.py
index aa97960..1788a7f 100755
--- a/addon/appModules/splstudio/splconfig.py
+++ b/addon/appModules/splstudio/splconfig.py
@@ -848,6 +848,11 @@ class AudioDuckingReminder(wx.Dialog):
 
 # And to open the above dialog and any other dialogs.
 def showStartupDialogs():
+       # 7.4 only: Show branch selection dialog.
+       if os.path.exists(os.path.join(globalVars.appArgs.configPath, "addons", 
"stationPlaylist", "ltsprep")):
+               if gui.messageBox("The next major version of the add-on (15.x) 
will be the last version to support Studio versions earlier than 5.10, with 
add-on 15.x being designated as a long-term support version. Would you like to 
switch to long-term support release?", "Long-Term Support version", wx.YES | 
wx.NO | wx.CANCEL | wx.CENTER | wx.ICON_QUESTION) == wx.YES:
+                       splupdate.SPLUpdateChannel = "lts"
+                       os.remove(os.path.join(globalVars.appArgs.configPath, 
"addons", "stationPlaylist", "ltsprep")
        try:
                import audioDucking
                if SPLConfig["Startup"]["AudioDuckingReminder"] and 
audioDucking.isAudioDuckingSupported():

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index 26c4eeb..c888130 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -40,7 +40,7 @@ _updatePickle = os.path.join(globalVars.appArgs.configPath, 
"splupdate.pickle")
 
 # Not all update channels are listed. The one not listed here is the default 
("stable" for this branch).
 channels={
-       "lts":"http://spl.nvda-kr.org/files/get.php?file=spl-lts7";,
+       "lts":"http://spl.nvda-kr.org/files/get.php?file=spl-lts16";,
 }
 
 # Come forth, update check routines.

diff --git a/addon/installTasks.py b/addon/installTasks.py
index d55b148..cc0622f 100755
--- a/addon/installTasks.py
+++ b/addon/installTasks.py
@@ -16,3 +16,5 @@ def onInstall():
                        shutil.copytree(profiles, newProfiles)
                except IOError:
                        pass
+       # 7.4 only: prepare LTS presentation file (an empty text file)
+       open(os.path.join(os.path.dirname(__file__), "ltsprep"), "w").close()


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/05f1e9705d16/
Changeset:   05f1e9705d16
Branch:      None
User:        josephsl
Date:        2016-08-15 15:47:09+00:00
Summary:     Readme for 7.4/16.08, add beta channel URL and entry.

Affected #:  3 files

diff --git a/addon/appModules/splstudio/splconfui.py 
b/addon/appModules/splstudio/splconfui.py
index cd20e45..8b07a2e 100755
--- a/addon/appModules/splstudio/splconfui.py
+++ b/addon/appModules/splstudio/splconfui.py
@@ -1297,7 +1297,7 @@ class AdvancedOptionsDialog(wx.Dialog):
                # Translators: The label for a combo box to select update 
channel.
                label = wx.StaticText(self, wx.ID_ANY, label=_("&Add-on update 
channel:"))
                self.channels= wx.Choice(self, wx.ID_ANY, choices=["stable", 
"longterm"])
-               self.updateChannels = ("stable", "lts")
+               self.updateChannels = ("beta", "stable", "lts")
                
self.channels.SetSelection(self.updateChannels.index(self.Parent.updateChannel))
                sizer.Add(label)
                sizer.Add(self.channels)
@@ -1340,7 +1340,7 @@ class AdvancedOptionsDialog(wx.Dialog):
                parent.compLayer = 
self.compatibilityLayouts[self.compatibilityList.GetSelection()][0]
                parent.autoUpdateCheck = self.autoUpdateCheckbox.Value
                parent.updateInterval = self.updateInterval.Value
-               parent.updateChannel = ("stable", 
"lts")[self.channels.GetSelection()]
+               parent.updateChannel = ("beta", "stable", 
"lts")[self.channels.GetSelection()]
                parent.profiles.SetFocus()
                parent.Enable()
                self.Destroy()

diff --git a/addon/appModules/splstudio/splupdate.py 
b/addon/appModules/splstudio/splupdate.py
index c888130..df16bd5 100755
--- a/addon/appModules/splstudio/splupdate.py
+++ b/addon/appModules/splstudio/splupdate.py
@@ -41,6 +41,7 @@ _updatePickle = os.path.join(globalVars.appArgs.configPath, 
"splupdate.pickle")
 # Not all update channels are listed. The one not listed here is the default 
("stable" for this branch).
 channels={
        "lts":"http://spl.nvda-kr.org/files/get.php?file=spl-lts16";,
+       "beta":"http://spl.nvda-kr.org/files/get.php?file=spl-beta";,
 }
 
 # Come forth, update check routines.

diff --git a/readme.md b/readme.md
index 420a4ed..728c09d 100755
--- a/readme.md
+++ b/readme.md
@@ -167,6 +167,14 @@ From studio window, you can press Control+NVDA+0 or 
Alt+NVDA+0 to open the add-o
 
 If you are using Studio on a touchscreen computer running Windows 8 or later 
and have NVDA 2012.3 or later installed, you can perform some Studio commands 
from the touchscreen. First use three finger tap to switch to SPL mode, then 
use the touch commands listed above to perform commands.
 
+## Version 7.4/16.08
+
+Version 7.4 is also known as 16.08 following the year.month version number for 
stable releases. 7.4 is the last version in the 7.x series and the entire 
major.minor version numbers.
+
+* It is possible to select add-on update channel, to be removed later in 2017. 
For 7.4, available channels are beta, stable and long-term.
+* SPL Controller command and the command to focus to Studio will not be 
available from secure screens.
+* New and updated translations and added localized documentation in various 
languages.
+
 ## Changes for 7.3
 
 * Slight performance improvements when looking up information such as 
automation via some SPL Assistant commands.


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/febdfb86f173/
Changeset:   febdfb86f173
Branch:      None
User:        josephsl
Date:        2016-08-15 15:47:57+00:00
Summary:     SPL add-on 7.4 (aka 16.08)

Signed-off-by: Joseph Lee <joseph.lee22590@xxxxxxxxx>

Affected #:  1 file

diff --git a/buildVars.py b/buildVars.py
index 6cd2fcf..1eaf3f3 100755
--- a/buildVars.py
+++ b/buildVars.py
@@ -20,7 +20,7 @@ addon_info = {
        "addon_description" : _("""Enhances support for StationPlaylist Studio.
 In addition, adds global commands for the studio from everywhere."""),
        # version
-       "addon_version" : "7.3",
+       "addon_version" : "7.4",
        # Author(s)
        "addon_author" : u"Geoff Shang, Joseph Lee and other contributors",
        # URL for the add-on documentation support


https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/183396019d9e/
Changeset:   183396019d9e
Branch:      stable
User:        josephsl
Date:        2016-08-15 16:00:52+00:00
Summary:     7.4: Add beta channel and channel label

Affected #:  2 files

diff --git a/addon/appModules/splstudio/splconfui.py 
b/addon/appModules/splstudio/splconfui.py
index 8b07a2e..60d6964 100755
--- a/addon/appModules/splstudio/splconfui.py
+++ b/addon/appModules/splstudio/splconfui.py
@@ -1296,7 +1296,7 @@ class AdvancedOptionsDialog(wx.Dialog):
                sizer = wx.BoxSizer(wx.HORIZONTAL)
                # Translators: The label for a combo box to select update 
channel.
                label = wx.StaticText(self, wx.ID_ANY, label=_("&Add-on update 
channel:"))
-               self.channels= wx.Choice(self, wx.ID_ANY, choices=["stable", 
"longterm"])
+               self.channels= wx.Choice(self, wx.ID_ANY, choices=["beta", 
"stable", "longterm"])
                self.updateChannels = ("beta", "stable", "lts")
                
self.channels.SetSelection(self.updateChannels.index(self.Parent.updateChannel))
                sizer.Add(label)

diff --git a/readme.md b/readme.md
index 728c09d..dcdd8d1 100755
--- a/readme.md
+++ b/readme.md
@@ -171,7 +171,7 @@ If you are using Studio on a touchscreen computer running 
Windows 8 or later and
 
 Version 7.4 is also known as 16.08 following the year.month version number for 
stable releases. 7.4 is the last version in the 7.x series and the entire 
major.minor version numbers.
 
-* It is possible to select add-on update channel, to be removed later in 2017. 
For 7.4, available channels are beta, stable and long-term.
+* It is possible to select add-on update channel from add-on settings/advanced 
settings, to be removed later in 2017. For 7.4, available channels are beta, 
stable and long-term.
 * SPL Controller command and the command to focus to Studio will not be 
available from secure screens.
 * New and updated translations and added localized documentation in various 
languages.

Repository URL: https://bitbucket.org/nvdaaddonteam/stationplaylist/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.

Other related posts: