Commit graph

251 commits

Author SHA1 Message Date
Kyle Neideck
dfad77dc35
Add app volume workaround for Google Chrome. See #61. 2019-08-17 15:28:16 +10:00
Kyle Neideck
4c7eba30af
Make sure the installer launches BGMApp as the logged-in user. 2019-08-17 15:20:47 +10:00
Kyle Neideck
e6e784b013
Add an additional method for restarting coreaudiod.
The install and uninstall scripts try to restart coreaudiod in a number
of ways until one works. Despite that, it still wasn't always successful
when I tested it on macOS Catalina. This commit will hopefully fix that.
2019-08-17 15:17:51 +10:00
Kyle Neideck
8ed95eb83b
Make sure Homebrew Travis CI builds won't show a password prompt.
`sudo` is usually passwordless in Travis CI builds, but for some reason
`sudo -v` still causes a password prompt in macOS Travis builds.

_uninstall-non-interactive.sh already included a workaround for this,
but it doesn't work when the Travis build for the Homebrew Cask calls
`brew uninstall background-music`, which then calls
_uninstall-non-interactive.sh. The old workaround used the `TRAVIS` env
var, but Homebrew seems to run the script in an environment without it.

See <https://github.com/Homebrew/homebrew-cask/pull/67524>.
2019-08-14 21:58:10 +10:00
Kyle Neideck
7f6c0e9d4f
Update the README to link to v0.3.1.
Also, bump the minor version number.
2019-08-13 18:46:25 +10:00
Kyle Neideck
9e50e2348b
Bump the patch version. I code signed v0.3.0 incorrectly. #233 2019-08-13 10:13:52 +10:00
Kyle Neideck
0388b26aa1
Add Xcode 11 to Travis CI builds. 2019-08-06 17:24:25 +10:00
Kyle Neideck
002afc0cd1
Update copyright years. #227 2019-08-05 22:42:17 +10:00
Kyle Neideck
a45335b65d
Add GPMDP to the list of supported music players in the README. 2019-08-05 21:31:58 +10:00
Kyle Neideck
0a7be7d32c
Enable Hardened Runtime in BGMApp, BGMXPCHelper and BGMDriver.
This is required for Notarization, which will be mandatory in macOS
Catalina.

Also, suppress some STL deprecation warnings in PublicUtility code. (The
warnings were recently added to Clang.)
2019-08-05 21:25:57 +10:00
Dave Nicolson
d26e9ee3d1 Update README.md 2019-08-05 21:05:19 +10:00
Kyle Neideck
94fc1259e3
Add BGMMusic files to the Xcode project.
Also, add BGMMusic to BGMMusicPlayers and add the Scripting Bridge
header for Music.app.

Resolves #216.
2019-07-03 02:34:15 +10:00
Kyle Neideck
a97529e812
Merge branch 'theLMGN-patch-1' 2019-07-03 02:29:52 +10:00
Kyle Neideck
0231e131df
Merge branch 'patch-1' of https://github.com/theLMGN/BackgroundMusic into theLMGN-patch-1 2019-07-03 01:50:47 +10:00
Vikas Shukla
9951a82879 Minor error update to README
An accidental "the" I think.
2019-07-03 01:45:27 +10:00
Leo Nesfield
3ac7221cb1
Create BGMMusic.h 2019-06-30 17:16:16 +01:00
Leo Nesfield
2be4bab54f
Create BGMMusic.m 2019-06-30 17:14:35 +01:00
Kyle Neideck
04f17301a1
Fix BGMApp test compilation.
Updates the lists of files to be compiled when the tests are built,
which were missing the new source files added in the previous commit.
2019-06-09 19:43:17 +10:00
Kyle Neideck
e616718eab
Add music player: Google Play Music Desktop Player.
The code for GPMDP is a lot more complicated than the code for other
music players. See BGMGooglePlayMusicDesktopPlayer.h for details.

Adds a class, BGMAppWatcher, to hold the code that notifies listeners
when a given app is launched or terminated.

Resolves #161.
2019-06-09 18:56:12 +10:00
Kyle Neideck
503d1a92ec
Fix another crash when BGMDevice's volume is changed.
Fixes the same issue as df9815a4be, but in
BGMOutputVolumeMenuItem instead of BGMStatusBarItem.

I think the problem was that it captured a weak reference in a C++
lambda, but it would capture by (C++) reference and when the reference
was used it would be referencing invalid memory. The fix to have the
lambda capture by value instead.

See #202.
2019-03-28 18:29:54 +11:00
Kyle Neideck
2939dbe28c
Update Travis CI builds to use Xcode 10.1. 2019-03-27 13:43:10 +11:00
Kyle Neideck
a40dfde439
Fix potential minor memory leaks in BGMPreferredOutputDevices. 2019-03-27 13:36:19 +11:00
Kyle Neideck
df9815a4be
Fix a crash when BGMDevice's volume is changed.
I think that, because BGMStatusBarItem::initWithMenu was capturing a
weak reference in a C++ lambda as a C++ reference, the C++ reference
would be invalid when it was used. The fix to have the lambda capture by
value instead.

I'm not completely sure why builds from Xcode never crashed or why ASan
didn't catch the bug. Maybe the stack memory was just never
reused/invalidated with Xcode builds. (And I probably just don't
understand how ASan works well enough.)

Fixes #202.
2019-03-27 12:55:12 +11:00
Kyle Neideck
26dd2ee1ab
Minor README change. 2019-03-23 15:25:11 +11:00
Kyle Neideck
d89d1e7813
Add a warning about clipping to Known Issues in the README.
[skip travis]
2019-03-11 11:39:04 +11:00
Kyle Neideck
e093e7d3b2
Add an option to use a volume icon instead of the Background Music logo.
This is so the icon can show the current volume. Then you can hide the
built-in volume status bar item in System Preferences.

Closes #183.
2019-03-05 00:01:42 +11:00
Kyle Neideck
14df80da24
README.md: Fix the Homebrew command for installing snapshot releases. 2019-02-27 21:57:23 +11:00
Kyle Neideck
a4c93c050b
Fix build_and_install.sh failing when run from a path containing spaces.
When build_and_install.sh tried to install BGMXPCHelper, xcodebuild
would fail to run post_install.sh.

Fixes #187.
2019-01-22 21:58:47 +11:00
Erwann Mest
5257b4c94d docs(README): add snapshot version
I created a formula for cask about the snapshot version. So I'd like to add it into the README. :)
2018-12-20 10:34:23 +11:00
Kyle Neideck
30185633ac
Add Homebrew install command to the README. 2018-11-29 23:06:12 +11:00
Kyle Neideck
624369f297
Add "unsigned" to the filenames of packages from Travis CI.
My plan is to also build the packages locally (at least full releases),
code sign manually and then check that the two packages match apart from
the code signature. That way I don't have to give the Travis script
access to my signing private key, which I figure is slightly more
secure.
2018-11-24 15:03:09 +11:00
Kyle Neideck
d1bf34e741
Add folds to the Travis CI build logs. 2018-11-17 14:49:25 +11:00
Kyle Neideck
475d141ae4
Make builds more deterministic.
Packages built with package.sh should now be byte-identical except for
timestamps in Assets.car (in BGMApp resources) and modification dates in
the package's Bom file, if built with the same version of Xcode.
Hopefully this will be enough to allow builds to be reproduced, with a
bit of effort.
2018-11-12 19:15:26 +11:00
Kyle Neideck
d1f5492a47
Fix compilation errors with Clang 8 in BGMAppUITests.
You can't run the UI tests in Xcode 8 anyway, so now we just skip
compiling them.
2018-11-04 18:15:52 +11:00
Kyle Neideck
64b7ca9fd9
Fix compilation error with Clang 8 in BGMOutputDeviceMenuSection. 2018-11-04 17:57:42 +11:00
Kyle Neideck
7b8d1a0e0d
Rename BGMOutputDevicePrefs to BGMOutputDeviceMenuSection. 2018-11-04 15:28:01 +11:00
Kyle Neideck
5e12f9fc01
Move the output device menu items to the main menu.
I don't know why I put them in the Preferences menu initially. This is
more convenient.

Closes #170.

Also:
 - Update the output device menu items as needed instead of when the
   user opens the menu. This saves a bit of CPU time and means if the
   user has the menu open, changes are made when they're needed instead
   of the next time the user opens the menu.
 - Fix BGMAppUITests::testCycleOutputDevices for the latest Xcode/macOS.
2018-11-04 12:30:43 +11:00
Kyle Neideck
94f13e747c
Clarify some comments in BGMPreferredOutputDevices. 2018-10-28 18:11:40 +11:00
Kyle Neideck
4c0c656538
Store the preferred devices list in User Defaults.
BGMApp has to set BGMDevice, and often also the Null Device for a short
time, as the systemwide default audio device, which makes CoreAudio put
them in the preferred devices list in its Plist file. And since the list
is limited to three devices, it only gives us one or two usable ones.
Ideally, CoreAudio just wouldn't add our devices to its list, but I
don't think we can prevent that.

As a partial workaround, we now store our own copy of the preferred
devices list without our devices, which BGMApp can use to figure out
which devices were pushed out of CoreAudio's list by our devices.

This doesn't fix the problem entirely because our devices still take up
room in CoreAudio's list when BGMApp is closed, but I think that would
be harder to solve.

See #167.

Also:
 - Handle setting the initial output device in BGMPreferredOutputDevices
   instead of BGMAudioDeviceManager.
 - Fix a crash in BGMOutputVolumeMenuItem::dealloc caused by using
   dispatch_sync to dispatch to the main queue while running on the main
   queue.
 - Fix a crash in BGMPreferredOutputDevices if
   /Library/Preferences/Audio/com.apple.audio.SystemSettings.plist
   doesn't exist.
 - Add Swinsian to the list of music players in the README. (I must have
   forgotten to do that when I added support for it.)
2018-10-28 17:08:47 +11:00
Kyle Neideck
871bb97a52
Increment minor version number. 2018-10-25 00:00:52 +11:00
Kyle Neideck
ffe7406025
Fix errors logged when the current output device is disconnected. 2018-10-24 23:46:28 +11:00
Kyle Neideck
29642da1cf
Update the preferred devices list when the user changes output device.
When the user chooses a different output device in BGMApp, the new
device is now added to the front of the list of preferred devices. This
stops BGMPreferredOutputDevices changing the output device back shortly
afterward when it gets a device connection/disconnection notification,
which is sent because BGMDriver's Null Device is enabled and then
disabled as part of changing the output device.

It also means BGMApp will now account for the times the output device
has been changed since BGMApp started when deciding whether to change to
a newly connected device and deciding which device to change to when the
current output device is removed.
2018-10-24 22:29:20 +11:00
Kyle Neideck
1bb3873a53
Change output device in some cases when devices are added/removed.
Tries to copy the way CoreAudio normally handles devices being added or
removed, which it can't do while Background Music is running (because
BGMDevice needs to be the default output device for the system).

This may break when Background Music is run on later versions of macOS
as the only way BGMApp can tell what CoreAudio (probably) would have
done is by reading one of its Plist files directly.

See #167.
2018-10-23 14:07:13 +11:00
Kyle Neideck
a4c849dcb2
Update the README to link to v0.2.0. Also update the screenshot. 2018-10-20 14:40:24 +11:00
Kyle Neideck
b0282706df
Fix adding "SNAPSHOT"/"DEBUG" to the version string with multiple tags.
The most recent tag is now used to decide whether to add "-SNAPSHOT-..."
to the version string. So now we can make a new release by tagging a
commit even if we've already made a snapshot/debug release from the same
commit.
2018-10-16 12:38:52 +11:00
Kyle Neideck
94a5f37c2b
Fix BGMOutputVolumeMenuItem tooltip not always being updated.
When you changed to an output device with no data sources, the tooltip
was left set to the name of the previous output device.
2018-10-06 21:42:33 +10:00
Kyle Neideck
797d2f14f5
Update the output device name in the UI if its data source changes.
For the label above the output device volume slider, we use the name of
the output device's current data source, if it has one. But it was only
being updated when the user changed to a different output device.
BGMOutputVolumeMenuItem now updates the label if the output device
changes to a different data source, e.g. from Internal Speakers to
Headphones.
2018-10-06 21:17:41 +10:00
Kyle Neideck
b3b4482bda
Automatically set the release name for Travis CI builds.
Also mark them as prereleases, since most will be snapshot/debug builds.
We can just change that back manually for full releases.
2018-10-06 14:35:57 +10:00
Kyle Neideck
9b33fffd23
Fix the Show More Controls buttons displaying as "...".
The character we use for them (looks like '^') seems to be 1 pixel wider
on macOS 10.14, which meant it didn't fit in the text label anymore.
2018-10-06 12:46:07 +10:00
Kyle Neideck
ac33909b51
Fix pkg installer not opening BGMApp if relocated.
If the user moved BGMApp and then installed a new version from a .pkg,
BGMApp would be installed to the same place the old version had been
moved to. When pkg/postinstall tried to open BGMApp, it would fail
because it assumed BGMApp would be installed to /Applications.

Also, the installer now fails with an error message if it can't open
BGMApp after finishing the install.

Fixes #164.
2018-10-04 21:24:29 +10:00