Black Friday & Cyber Monday 2018

November 2018

You can pickup Denied for just $1 the next few days!

Make sure you’re all set for the Christmas season and only listen to the carols you want to hear. 🎄

Screenshot of Denied skipping explicit content

Denied update 1.5.3 out now

November 2018

A customer pointed out an issue with Denied and iTunes when playing songs from Apple Music playlists. If you skipped back a track in the Mini Player, the artwork would disappear.

This update resolves the issue and improves how Denied works together with Apple Music. Read on to learn what I changed in this latest release.

After some investigation I discovered that Apple Music only returns the artwork for offline tracks, or songs that you’ve added or saved. You don’t even have to store them offline, simply adding them to one of your collections enables retrieving the artwork through AppleScript. That sounds odd, and I was a little surprised at first. An explanation I found online states that iTunes uses two different types of tracks to represent an online and an offline track. It’s unfortunate that the online variant does not include the artwork. I’ll submit a bug report to Apple and ask them if this is by design, or if it can be resolved.

This means that Denied can’t display an image for some of the songs that you’re playing through Apple Music. To accomodate for this I’ve updated the ‘artwork not available’ placeholder image. It changes with the new accent colors in Mojave.

New 'artwork not available' placeholder image in Denied

You can get the update now on the App Store. 🚀

This post originally appeared on denied.app.

Improved disliked song skipping for Denied

November 2018

Apple’s just approved the latest update for Denied. Version 1.5.2 fixes a bug that prevented Denied from retrieving the ‘disliked’ state of a track when it did not have artwork.

You can get the update on the Mac App Store. 🚀

Instead of just pushing the update and forgetting the bug ever existed, I thought it would be interesting to tell you what exactly went wrong and how I resolved the issue.

Introduction

Denied follows a set pattern to shape your listening experience.

  1. Get notified of a song change.
  2. Retrieve the song’s properties.
  3. Check if these attributes match any rules.
  4. Skip the track if a match was found.

To fetch a song’s title, artist etc. from iTunes or Spotify, Denied relies on AppleScript. This scripting language allows anyone to hook into an application (if it supports it) and retrieve information from it. Try this quick example.

  1. Launch Script Editor (/Applications/Utilities/Script Editor.app).
  2. Create a new document.
  3. Copy-paste the lines below. (Make sure you copy the lines for the right player.)

     #Spotify
     tell application "Spotify"
     	name of current track
     end tell
        
     #iTunes
     tell application "iTunes"
     	name of current track
     end tell
    
  4. Play a song.
  5. Run the script.

You should see the name of the current track in the Description field of the Script Editor.

The bug

Besides the track title, Denied also fetches the artist, the album, the artwork and (for iTunes) whether a track is disliked. Here’s what that script looks like.

property trackName : ""
property trackArtist : ""
property trackAlbum : ""
property trackArtwork : ""
property isDisliked : false
if application "iTunes" is running then
	tell application "iTunes"
		try
			set trackName to name of current track
			set trackArtist to artist of current track
			set trackAlbum to album of current track
			set trackArtwork to data of artwork 1 of current track
			set isDisliked to disliked of current track
		end try
	end tell
end if
return {trackName, trackArtist, trackAlbum, trackArtwork, isDisliked}

This all works perfectly fine when scanning a track that has every property setup properly. The track’s artwork isn’t that reliable, unfortunately. Sometimes tracks don’t have artwork at all, sometimes it takes a few moments before it’s retrieved from the internet. I assumed the field would just remain empty then. That’s not what happens, though.

If the song’s artwork does not contain an image, the script returns the default value for all the parameters after it (property isDisliked : false). You can see why this would prevent Denied from ever knowing if a song without artwork was actually disliked.

The fix

Instead of fetching the artwork in the same script as the other properties, I made a seperate method that handles everything artwork related. This is similar to how I implemented fetching artwork for Spotify.

Conclusion

This was a pretty easy fix and I’m happy Apple approved the update withing a few hours. I’ve added some songs without any artwork to my test suite, so this shouldn’t happen again. I hope you found this interesting. 🙂

This post originally appeared on denied.app.

Denied adds Dark Mode and skips disliked songs (in iTunes)

September 2018

Apple has released the latest version of macOS to the public. The prominent new feature Mojave introduces is a new graphical theme, that Apple has dubbed Dark Mode. It’s a gorgeous, rough, yet elegant way to present the operating system you’re familiar with. Apps that customize their interface to take full advantage of Dark Mode look right at home and feel great to use.

I’m very proud to say that Denied supports Dark Mode from day one.

Dark Mode

While updating the color palette I took the opportunity to re-evaluate all the buttons, switches and other interface elements. Denied was released in 2014 and with this release it’s more than ready for 2018 and beyond. You’ll notice that it looks stunning in a lighter theme and on previous versions of macOS as well.

Skipping disliked songs

This has been a much requested feature and I’m happy to say that it’s finally here. iTunes and Apple Music allow us to mark specific songs as disliked. It’s a quick and easy way to let iTunes know that you don’t want to hear a specific track. You’ll be surprised to learn that this doesn’t actually prevent iTunes from playing these songs, though.

With the latest update of Denied this can been corrected. If enabled, Denied will will automatically skip over songs being played on iTunes or Apple Music if they’re disliked.

A similar feature exists in Spotify, but the property isn’t accessible to third-party applications (like Denied). I’m regularly checking if this changes.

Skipping explicit songs updated

I’ve switched to a new way of checking songs for explicit content. This updated method should be more reliable with more people using Denied every day. I tested it thoroughly and didn’t notice any downsides.

If you do pick up on a negative (or positive!) change in how Denied handles explicit tracks, send me a message.

Get version 1.5 now

I’m pretty stoked about this update and I think you’ll be too. Get version 1.5 in the App Store and consider leaving a five star review while you’re there. Reviews are immensely helpful in getting more people to notice Denied, plus it’ll make my day.

This post originally appeared on denied.app.

Shipped an update!

July 2018

Denied has been my favorite project since it first came out in 2014. Still, it took a while for this update to arrive. The main reason for the gap in releases is that Denied has been working really, really well for me (and quite a few of you!). It’s been stable (more on that in a bit) and feature-wise it was hard to work on anything new without overhauling the app. I’m commited to change that, though! (The part about not wanting to overhaul the app, obviously. Keeping it stable would be nice.)

Maybe you’ve heard of Apple’s latest iteration of macOS called Mojave, due for release this fall. Besides a lot of behind-the-scenes upgrades, it comes with a brand new Dark Mode. I’m stoked about making Denied look awesome with it enabled.

Keynote in macOS Mojave's Dark Mode

The update I just released also addresses a bug that could cause Denied to crash. According to my information this was the only one in the app and I’m happy that it’s resolved. A side effect is that there’s now a new option: “Pause When Filter Fails” which is off by default. This preference let’s you indicate if you want to pause playback if Denied is unable to execute a filter. Currently, this only applies to the ‘Skip explicit songs’ filter as it could fail to retrieve the information from the internet.

That’s it for now. Contact me on Twitter via @deniedapp for comments, questions or feedback. I’d love to hear from you.

Oh, one last thing: it would be great if you could review Denied on the App Store. Reviews really help me spread the word about Denied. Thanks!