Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: MusikPolice/musik
base: aa01cb5370
...
head fork: MusikPolice/musik
compare: master
Checking mergeability… Don't worry, you can still create the pull request.
This comparison is big! We're only showing the most recent 250 commits
Commits on Oct 14, 2012
@sampsyo sampsyo move cpu_count to util module; credit @storrgie 3ce5275
Commits on Oct 15, 2012
@MusikPolice Modified index page to make use of new artist/album apis. A full list…
… of artists/albums is now displayed on front page load. Need to make these links to artist/album pages. Also brought a specific version of jquery into the project and moved the images directory in with the static content.
6335930
@sampsyo sampsyo fix "beet modify" for date fields (GC-449)
This is fixed by allowing MediaFiles to convert strings to integers on
assignment. An eventual complete fix will perform these type conversions in the
Item interface.
7a1fda1
@sampsyo sampsyo fix "beet modify" for date fields (GC-449)
This is fixed by allowing MediaFiles to convert strings to integers on
assignment. An eventual complete fix will perform these type conversions in the
Item interface.
29419cf
@sampsyo sampsyo fix crash when stdin comes from pipe w/o encoding
This allows, for example, "yes | beet convert".
6a23fe0
Commits on Oct 16, 2012
@MusikPolice Added a basic header bar that will be displayed across the top of eve…
…ry page. Had to bypass 960 Grid's default column sizes to get the spacing right.
29996e3
@MusikPolice Added logo to left hand side of header bar 3eea270
@MusikPolice Added album and artist pages to the web application 4777ea2
@MusikPolice alphabetizing and refactoring 6cbd677
Commits on Oct 18, 2012
@sampsyo sampsyo replaygain: add fields to Item
This has been a long time coming, but we now finally keep track of ReplayGain
values in the database. This is an intermediate step toward a refactoring of the
RG plugin; at the moment, these values are not actually saved!
c1f5d25
Commits on Oct 19, 2012
@sampsyo sampsyo windows: use UTF-8 in displayable_path 93bd8c4
@sampsyo sampsyo windows: use UTF-8 in displayable_path c518b46
Commits on Oct 20, 2012
@mk-fg mk-fg library: log path, reading of which has raised an exception ef951f5
@mk-fg mk-fg library: don't set/update item mtime if read-path is passed to read() cb5032a
@mk-fg mk-fg Fix inconsistent three-space indentation 9dd9cf3
@mk-fg mk-fg Fix inconsistent three-space indentation 8e80c91
@mk-fg mk-fg ui: use configured format when printing album/item from all commands cf6e96c
@mk-fg mk-fg ui: add --format option to all commands that can use it 904b1d8
@sampsyo sampsyo changelog & cleanup for pull request #59 971cbce
Commits on Oct 21, 2012
@sampsyo sampsyo Merge pull request #60 from mk-fg/dont_update_mtime_for_different_path
library: don't set/update item mtime if read-path is passed to read()
b0724ec
@sampsyo sampsyo Merge pull request #61 from mk-fg/indentation_fix
Fix inconsistent three-space indentation
2b36457
@sampsyo sampsyo Merge pull request #62 from mk-fg/unified_presentation_format
Unified presentation format in ui commands
afdfd9a
@sampsyo sampsyo docs & changelog for pervasive format config (#62)
This version of the (renamed) _print_obj function uses introspection to
determine whether we're printing an Album or an Item. It's like function
overloading for Python! :grin:
c555367
@sampsyo sampsyo #62: use list_format_* in non-list commands
The list_format_album and list_format_item options now *actually* affect the
display in commands other than "beet list". This replaces the -f/--format flags
-- if any users want to control this on the command line, we can reconsider this
decision.

Note that this involved passing around a "config" object, which we previously
haven't done. This seems a little bit messy, but configuration is about to
change entirely to be more like this style -- so this isn't a huge liability.
4594316
@sampsyo sampsyo #62: move format/print utilities to beets.ui
Now that these functions are generally useful, this is the right home for them.
Plugins should also use print_obj.
342e4ba
@sampsyo sampsyo #62: simplify list (and random) code
With the new centralized print_obj function, we can greatly simplify the code
for the list command. This necessitated a couple of additional tweaks:

- For performance reasons, print_obj can now take a compiled template. (There's
  still an issue with using the default/configured template, but we can cross
  that bridge later).
- When listing albums, $path now expands to the album's item dir. So the format
  string '$path' now exactly corresponds to passing the -p switch.

As an added bonus, we can now also reduce copypasta in the random plugin (which
behaves almost exactly the same as list).
fa21b39
@sampsyo sampsyo make syspath/bytestring_path roundtrip on Windows
This is an alternative to #58 that makes bytestring_path perform more like the
inverse of syspath on Windows. This way, we can convert to syspath, operate on
the path, and then bring back to internal representation without data loss. This
involves looking for the magic prefix on the Unicode string and removing it
before encoding to the internal (UTF-8) representation.
86b4ad3
@sampsyo sampsyo make syspath/bytestring_path roundtrip on Windows
This is an alternative to #58 that makes bytestring_path perform more like the
inverse of syspath on Windows. This way, we can convert to syspath, operate on
the path, and then bring back to internal representation without data loss. This
involves looking for the magic prefix on the Unicode string and removing it
before encoding to the internal (UTF-8) representation.
d616ca3
@yagebu yagebu Speedup 'beet ls' if no format is specified a76cfd1
@sampsyo sampsyo warnings about using syspath with some utils
Also pertaining to #58: for most utility functions, paths should *not* be
`syspath`-ified. (This only occurs right before a path is sent to the OS.) In
fact, as @Wessie discovered, using the result of `syspath` with `ancestry` leads
to incorrect behavior. I checked and this should not currently happen anywhere,
but these docstring changes make that requirement explicit.
d274f3d
@sampsyo sampsyo warnings about using syspath with some utils
Also pertaining to #58: for most utility functions, paths should *not* be
`syspath`-ified. (This only occurs right before a path is sent to the OS.) In
fact, as @Wessie discovered, using the result of `syspath` with `ancestry` leads
to incorrect behavior. I checked and this should not currently happen anywhere,
but these docstring changes make that requirement explicit.
73c883d
@sampsyo sampsyo merge 506a2e5
Commits on Oct 24, 2012
@sampsyo sampsyo fix several non-unicode logging statements
A user reported a problem with one of the logging statements where .format()
tried to convert a Unicode string to bytes because the log message was '', not
u''. As a rule, we should ensure that all logging statements use Unicode
literals.
2a0963a
Commits on Oct 27, 2012
@sampsyo sampsyo send "failed reading file" message to debug
This message was being logged as an error every time MediaFile failed to parse a
file. But this is not actually an error -- the importer uses FileTypeErrors to
determine whether a file is music or not. This resulted in error logs for every
album art file, .m3u, etc. in the imported directory. Verbose output is a better
home for this message.
b578f4f
@jpennell jpennell Fix #1 - Update readme to include getting started info 85f5139
@jpennell jpennell Fix #2 - Add dynamic port functionality to musik server b8223b4
@jpennell jpennell Merge branch '2-dynamic-port' cd199cb
@MusikPolice Merge pull request #12 from jpennell/1-readme
Fix #1 - Update readme to include getting started info
8a4fe9d
@MusikPolice Merge pull request #13 from jpennell/2-dynamic-port
Fix #2 - Add dynamic port functionality to musik server
11b8ec9
@jpennell jpennell Merge remote-tracking branch 'upstream/master' e9d9a96
@jpennell jpennell Work on #3 - Add Procfile fd5086b
@jpennell jpennell Work on #3 - Add foreman and sublime files to gitignore 427a354
@jpennell jpennell Fix #3 - Add foreman instructions to readme 9c5c4d5
@jpennell jpennell Fix #3 - Update foreman section of readme 310f348
@MusikPolice Merge pull request #14 from jpennell/3-procfile
Add Procfile to support running Musik with Foreman
29a536c
@MusikPolice Updated readme file 1c3d53a
@MusikPolice Modified the api to support rich searches on Album and Artist types. …
…Still need to implement the new style on Disc and Track types. New approach does not handle null values correctly.
6c8ee62
Commits on Oct 28, 2012
@Kraymer Kraymer Add 'maxwidth' option to embedart and fetchart plugins.
artresizer.py instances an ArtResizer object that uses internally the PIL; ImageMagick
or a web proxy service to perform the resizing operations.
Because embedart works on input images located on filesystem it requires PIL or ImageMagick, whereas
fetchart is able to do the job with the fallback webproxy resizer.
c7580fe
@Kraymer Kraymer Add 'maxwidth' option to embedart and fetchart plugins.
artresizer.py instances an ArtResizer object that uses internally the PIL; ImageMagick
or a web proxy service to perform the resizing operations.
Because embedart works on input images located on filesystem it requires PIL or ImageMagick, whereas
fetchart is able to do the job with the fallback webproxy resizer.
cd7f9e9
Commits on Oct 29, 2012
@MusikPolice extended new search api to track and disc searches. method needs impr…
…ovement to handle nulls, make some specialized searches more useful, greater than, less than support, order by support, etc. for now it's good enough
9adaa19
Commits on Oct 30, 2012
@MusikPolice added placeholder for a list of recently played songs to the index pa…
…ge. at this time, it is just mocked up with html
97bc317
@MusikPolice first shot at making header buttons powered by javascript. the end go…
…al is to dynamically load content into the main div via ajax calls. this will allow us to navigate the collection and keep a persistent audio player on the page at all times.
17fc2a0
Commits on Nov 01, 2012
@sampsyo sampsyo changelog and light style fixes for #64 08ab754
@sampsyo sampsyo changelog and light style fixes for #64 071ff58
@sampsyo sampsyo misc. minor fixes for artresizer (#64)
- Safer proxy resize. The URL parameters are now properly encoded. And a
  spurious additional request has been removed.
- Removed manual search of $PATH. Invoking "convert" without a path does this
  automatically.
- More pyflakes-friendly test import of PIL.
- Do not delete the NamedTemporaryFile -- doing so creates a race condition
  where the file might be created between the filename generation and the tool
  invocation.
c6a1af8
@sampsyo sampsyo misc. minor fixes for artresizer (#64)
- Safer proxy resize. The URL parameters are now properly encoded. And a
  spurious additional request has been removed.
- Removed manual search of $PATH. Invoking "convert" without a path does this
  automatically.
- More pyflakes-friendly test import of PIL.
- Do not delete the NamedTemporaryFile -- doing so creates a race condition
  where the file might be created between the filename generation and the tool
  invocation.
5c3c21c
@sampsyo sampsyo artresizer (#64): helper functions, not classes
The previous method was to change self.__class__ dynamically to make __init__
instantiate different classes. This new way, which uses bare functions instead
of separate functor-like classes, instead just forwards the resize() call to
a module-global implementation based on self.method.

Additionally, the semantics of ArtResizer have changed. Clients now *always*
call resize() and proxy_url(), regardless of method. The method makes *one* of
these a no-op. This way, clients need not manually inspect which method is
being used.
576935d
@sampsyo sampsyo artresizer (#64): helper functions, not classes
The previous method was to change self.__class__ dynamically to make __init__
instantiate different classes. This new way, which uses bare functions instead
of separate functor-like classes, instead just forwards the resize() call to
a module-global implementation based on self.method.

Additionally, the semantics of ArtResizer have changed. Clients now *always*
call resize() and proxy_url(), regardless of method. The method makes *one* of
these a no-op. This way, clients need not manually inspect which method is
being used.
1dcf3b5
@sampsyo sampsyo lazily initialize ArtResizer singleton (#64)
Searching for `convert` or PIL has non-negligible performance overhead, so it's
preferable to only do it when really necessary. This way, the search is only
performed when ArtResizer.shared is accessed for the first time.
182d87e
@sampsyo sampsyo lazily initialize ArtResizer singleton (#64)
Searching for `convert` or PIL has non-negligible performance overhead, so it's
preferable to only do it when really necessary. This way, the search is only
performed when ArtResizer.shared is accessed for the first time.
add0279
@sampsyo sampsyo don't use subprocess.check_output
This function was added in Python 2.7 and we're currently targetting 2.6 as a
minimum version. Replaced with a function in util.
8633640
@sampsyo sampsyo don't use subprocess.check_output
This function was added in Python 2.7 and we're currently targetting 2.6 as a
minimum version. Replaced with a function in util.
0f8743f
@sampsyo sampsyo artresizer: fix argument lists to helper functions
Also added some useful debug logs.
cd39bba
@sampsyo sampsyo artresizer: fix argument lists to helper functions
Also added some useful debug logs.
283f9b1
@MusikPolice fixed JS click event binding in header, removed unused JS includes fr…
…om templates, tidied template layouts
4a464b2
Commits on Nov 02, 2012
@MusikPolice re-jigged page rendering functions to include a method that renders h…
…eader/footer elements as well as one that does not
03d11db
@MusikPolice Wired up header links so that all page loads are handled with ajax re…
…quests. This will allow us to keep a static media player on the page during navigation. Also worked on importmedia page to get it using the API correctly via ajax. Still needs polish to handle success/error cases
b7bd8e6
Commits on Nov 03, 2012
@sampsyo sampsyo human-readable mkdir error 734a3d9
@sampsyo sampsyo human-readable mkdir error 4121455
Commits on Nov 06, 2012
@sampsyo sampsyo decode Unicode arguments to import -L (GC-457) b4cec78
@MusikPolice modified album and artist pages to show a friendly error message when…
… no artists/albums are present in the database
464afab
Commits on Nov 07, 2012
@MusikPolice Caught exception when trying to import a file that has audio/mpeg mim…
…e type but no id3 tags. Importer now commits after each track import so that if an error does occur, we don't lose incremental progress on the queue.
856c51b
@MusikPolice First stab at making the artist/album listing pretty. Using the jquer…
…y.listnav plugin to alphabetize lists. Still need to generalize the approach for both artists and albums, tidy up styling, make template changes to support individual artist/album pages, and add arist/album image placeholders
6d014c5
Commits on Nov 16, 2012
@MusikPolice missed a file 0a200c0
@MusikPolice improved the logging situation throughout the web app and api. also a…
…dded a library called responses that allows for api calls to be made from within the web app as per #19
5f704e4
@MusikPolice Modified albums page to call API internall instead of using a client …
…side AJAX call as per #19. API call needs to be customized to get the correct data, styling needs some more work, and this approach needs to be used for artists page as well.
5fcdfdf
Commits on Nov 17, 2012
@MusikPolice updated artists page to be similar to albums page in appearance and i…
…mplementation.
44e1f99
@MusikPolice Moved jquery library to a more logical spot f5ab4d5
@MusikPolice Consolidated main content switch operation into a single function e2bc33c
@MusikPolice Added artist and album pages with filler text. Next step is a redesign 1dba146
@MusikPolice Modified styles throughout the application to include a sidebar that …
…will eventually hold a persistent streaming media player.
7e260cd
Commits on Nov 27, 2012
@sampsyo sampsyo version change: b16 is now 1.0rc1 dd41ae9
Commits on Nov 28, 2012
@sampsyo sampsyo truncate bytes instead of unicode (GC-422) dcda928
@sampsyo sampsyo truncate bytes instead of unicode (GC-422) bbc2fbd
@sampsyo sampsyo truncation incorporates extension length (GC-461) ea29058
@sampsyo sampsyo truncation incorporates extension length (GC-461) 053534f
@sampsyo sampsyo autotag: use albumartist if available (GC-423) cd524f8
@sampsyo sampsyo avoid potential error with malformed dates from MB 7369ba9
Commits on Nov 29, 2012
@jpennell jpennell Ignore osx files 78402ff
@jpennell jpennell Rearange javascript for better performance 6fd2f45
@jpennell jpennell Add grater and bootstrap 6f05617
@jpennell jpennell Front end work 7401698
@MusikPolice Updated the readme to include mention of GStreamer bindings 4a85456
Commits on Nov 30, 2012
@MusikPolice Copied gstdec.py in from sampsyo's audioread repository. Unfortunatel…
…y, I couldn't figure out how to preserve commit history
1a2679e
Commits on Dec 01, 2012
@MusikPolice First shot at streaming PCM content. It appears to work, but clients …
…are unable to properly buffer the source. My guess is that it's because of the missing container format. Next step is to add ogg vorbis transcoding to the pipeline
23c73b6
Commits on Dec 02, 2012
@MusikPolice Modified pipeline to transcode to ogg vorbis ab9f663
@MusikPolice fixed streaming object such that close is always called. Added some l…
…ogging in the streaming provider. Streaming to multiple clients simultaneously now works
95ad209
Commits on Dec 03, 2012
@sampsyo sampsyo echonest_tempo: changelog + doc fixes + print fix 97c6f15
@sampsyo sampsyo handle non-Unicode exception strings correctly 7c4fe80
@sampsyo sampsyo handle non-Unicode exception strings correctly dd23456
@MusikPolice The stream api can now look up track paths based on the specified tra…
…ck id and pass their uris to GStreamer. Added a stream_uri field to the tracks api. There is a bug in the way that we handle unicode paths. See issue #24
857ed08
Commits on Dec 04, 2012
@MusikPolice Replaced the uridecode element with a combination of filesrc and deco…
…debin2. This fixes issue #24 at the cost of support for streaming http/ftp/other non-local files
af3bc2e
@jizz jizz Update beets/ui/__init__.py
Fix for Issue 450: Expand templates in art_filename config option
4efe056
@jizz jizz Update beets/library.py
Fix for Issue 450: Expand templates in art_filename config option
99efef4
Commits on Dec 05, 2012
@jizz jizz updated comments 6b27419
@jizz jizz updated art_destination
art_filename now acceptable as a string or a Template
9e3c216
@jizz jizz minor tweak d339f2a
@MusikPolice Updated to reflect changes suggested in #25 9775996
@sampsyo sampsyo GH-69/GC-450: docs, changelog, simplification 33dba02
@sampsyo sampsyo GH-69/GC-450: docs, changelog, simplification c189bf4
Commits on Dec 06, 2012
@jbillo jbillo Create log directory in application path 62651c9
@MusikPolice Merge pull request #28 from jbillo/patch-1
Create log directory in application path
ae1a77c
@MusikPolice Merge https://github.com/MusikPolice/musik into gstreamer 52b2432
@MusikPolice Improved streaming api logging, fixed jake's clumsy dirname error 2711927
@jpennell jpennell Fix #31: Update README with Mac dependency information 2ff1f28
@jpennell jpennell Merge pull request #33 from MusikPolice/31-mac-dependencies
Fix #31: Update README with Mac dependency information
6559c83
Commits on Dec 07, 2012
@MusikPolice Fixed the logging issue once and for all by rewriting the log class a…
…nd adding a new config manager that allows us to specify the log directory.
d1fa0dd
@MusikPolice Merge https://github.com/MusikPolice/musik 709bc36
@MusikPolice Added some convenience methods to config.py and used them to ensure t…
…hat the application respects configured values for database file location, server domain name, and server port
814a7c3
Commits on Dec 08, 2012
@sampsyo sampsyo log Mutagen exceptions in debug message 03bfece
@sampsyo sampsyo don't crash when singleton-importing broken files 82c79d5
@MusikPolice Moved the gstreamer wrapper into a new streaming package. f16cd02
@MusikPolice Files are now opened for streaming in a manner that is non-dependent …
…on having any particular backend available. This will allow the application to be run even if GStreamer is not present on the system. Later, we could write adaptors for other backends that are capable of working in place of GStreamer on some devices/platforms
ba09266
Commits on Dec 09, 2012
@MusikPolice Started work on #39. On page load, an audio element is created, and s…
…tarts loading a static streaming url. The user can play or pause the stream with a link in the sidebar. Need to handle events and create shuffle play functionality.
01a61a7
Commits on Dec 10, 2012
@MusikPolice Fixed a couple of application end points to use the config class to b…
…uild api urls
095cdb7
@MusikPolice Updated commenting to reflect config class changes 502e70d
@MusikPolice Modified album and artist pages to show a list of tracks and albums r…
…espectively.
78ab1b0
@MusikPolice Added a click event to the album page that starts tracks playing on c…
…lick. Users can now play any track in their library with a single click
8863272
@MusikPolice added a shuffle play feature that doesn't work reliably. it seems as …
…though the ended event isn't always thrown by the HTML5 audio player.
34d813a
Commits on Dec 11, 2012
Daniele Sluijters mediafile: Handle FLAC albumart correctly.
FLAC's metadata_block_picture should just contain the image, not
base64'ed like ogg/vorbis wants it.
---
 beets/mediafile.py |   23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)
a9340db
@sampsyo sampsyo use Mutagen's API for FLAC images (GC-468) e270bbd
Commits on Dec 12, 2012
@MusikPolice Switched audio playback from pure HTML5 to SoundManager2. This librar…
…y gives a much cleaner api and automatic flash fallback. Shuffle functionality has been re-implemented, barring issues in #40
5c153ff
Commits on Dec 15, 2012
@jpennell jpennell Merge frontend 117cca3
@jpennell jpennell Javascript changes af50870
@jpennell jpennell Merge pull request #42 from jpennell/master
Front end merge from external fork
58f0733
Commits on Dec 16, 2012
@sampsyo sampsyo fix non-boolean modifications to boolean MF fields 0287663
Commits on Dec 17, 2012
@MusikPolice Great big reorganization of the API layer. The entire API is now rest…
…ful. All functionality has been restored and some importer and javascript bugs that were introduced in previous commits have been fixed
9512d00
@MusikPolice merged my restful branch into the head 1cb8d06
@MusikPolice removed music player placeholder e7134d3
@MusikPolice Visual tweaks, put player controls into the header. Pause button isn'…
…t working correctly
d8a95b1
Commits on Dec 18, 2012
@sampsyo sampsyo exit without traceback on ^C 24c74c0
@sampsyo sampsyo fetchart: fix exception when source returns None 85dcbaf
@MusikPolice moved mediafile into a folder structure resembling that of musik so t…
…hat i can merge it into my project while retaining commit history
11461f8
@MusikPolice Merge branch 'master' of ../beets into importer de91175
@MusikPolice pulled in the mediafile.py script from sampsyo/beets, preserving comm…
…it history
c16fbe6
@MusikPolice refactoring all importer-specific classes into the new importer packa…
…ge. For the time being, we'll keep the class path pretty by forcing the ImportThread class to live in the __init__.py file.
9563eb3
@MusikPolice renamed a bunch of methods to follow project conventions, swapped out…
… mutagen for mediafile. this change breaks the importer
1e2f791
Commits on Dec 19, 2012
@MusikPolice cleaning up in preparation for moving the enumeration module into mus…
…ik while maintaining revision history
00f9560
@MusikPolice Merge branch 'master' of ../beets into importer 14b40a1
@MusikPolice Incremental update to media importer and database schema. This code d…
…oes not compile
6826d3c
Commits on Dec 24, 2012
@MusikPolice Fixed missing variable scope ebf4d55
@MusikPolice fixed a jquery selector bug on the importmedia page that was introduc…
…ed by jpennell's new UI
fc9fe65
@MusikPolice Moved all javascript library imports into the header template, remove…
…d duplicate javascript functions
3889a08
@MusikPolice updated the importer to use the mediafile abstraction layer. This req…
…uired database schema changes, and of course query updates. There are probably still outstanding bugs in the query engine
371c018
@MusikPolice updated the library queries to be significantly more compact and auto…
…matically handle changes to the underlying database objects. This could still be optimized and error handling is rough, but it's a significant improvement
88faf3c
@MusikPolice Added a generic query function to the musik.web.api.library class tha…
…t replaces all of the object-specific query functions.
33dcaba
@MusikPolice Library queries now raise an HTTP 400 error if the user specifies a k…
…ey that doesn't exist in the target object
26d6968
@MusikPolice Removed unnecessary documentation 79cb7fd
Commits on Dec 29, 2012
@MusikPolice added a database logger for WARNING, ERROR, and CRITICAL log messages…
…. to start, this will be used by the importer status api to show warnings and errors from the most recent import activity, but in the long run, it should be a useful set of general data to show to users
5832f44
@MusikPolice Added a list of importer warnings and errors to the importmedia GET e…
…ndpoint. These will be used to provide feedback on the current status of the importer to the user
ed2bace
@MusikPolice Added an update loop to the importmedia page that shows the current s…
…tatus of the importer as well as a list of warnings/errors that were generated during the import
a71aa9f
Commits on Dec 30, 2012
@MusikPolice Updated requirements to work with the latest Python 2.7.x release b29e2cc
@MusikPolice Removed shuffle flag from application. For now, we're always assuming…
… that shuffle is on, but play queues will replace this feature in the near future
a5abbec
Commits on Jan 05, 2013
@MusikPolice the api is now protected by http basic authentication. the /api/users…
… GET and POST methods can be called without authentication, which allows strangers to create new accounts. for now, all users have the same level of permissions
3d11dca
@MusikPolice Added a current user check that returns information about the current…
…ly logged in user or a 401 if no user is logged in. this allows the front end to check if it is logged in
845e997
@MusikPolice refactored the check_password function into the api/users module c734afe
Commits on Jan 09, 2013
@MusikPolice Added a pre-request tool that will eventually check credentials store…
…d in session variables. If authorization succeeds, the cherrypy.request.authorized flag will be set to True. Re-jigged the way that template rendering is done in the web app to simplify, and to support checking for this new flag. The requested part of the app can now be replaced dynamically depending on the results of authentication.
76fbc00
@MusikPolice Added a snazzy new login form. Unfortunately, it's all you see becaus…
…e the account registration and login functionality is still missing in action.
89f0577
Commits on Jan 12, 2013
@MusikPolice PEP8 compliance corrections fa8a9d2
@MusikPolice PEP8 compliance corrections 805b9de
@MusikPolice PEP8 compliance 7891d7a
Commits on Jan 13, 2013
@MusikPolice PEP8 Compliance ae2ceb9
Commits on Jan 14, 2013
@MusikPolice PEP8 compliance and some more work on the authentication layer 15f734b
Commits on Jan 15, 2013
@MusikPolice Started work on a new front-end implementation that is written in bac…
…kbone.js. So far, it doesn't actually communicate with the API, but eventually, it will replace the existing web client and provide a much cleaner communication model
c622624
Commits on Jan 16, 2013
@MusikPolice Added login form to page on first load, hooked submit button on login…
… form up to the current user's login function. Next steps are to make that function call the API and throw a login event on success.
3b17a72
Commits on Jan 17, 2013
@MusikPolice Wired up login event to work locally. Still having trouble hooking lo…
…gout event to the anchor in CurrentUserView. Next step is to actually talk to the API
8177a10
Commits on Jan 20, 2013
@MusikPolice Wired up the logout link 4fcbcc9
Commits on Jan 24, 2013
@MusikPolice Got an error message showing on incorrect credentials. Added a check …
…for the X-Requested-With header in authorization function. If present, we return a 403 instead of a 401, which prevents the browser from popping its own login box. This header is always added by jQuery, so it shouldn't affect other clients
4eb81c8
Commits on Jan 27, 2013
@MusikPolice Added a new account registration view. Still needs to be hooked up to…
… the api
9e0da9f
Commits on Jan 28, 2013
@MusikPolice Finished wiring up login and registration forms. Thank christ this ta…
…sk is behind me.
4823506
@MusikPolice Added a now playing view that is the first to be rendered on successf…
…ul login. Need to add some models to back it up
31b1a97
@MusikPolice Nav menu is now a view that appears on login and disappears on logout…
…. Nav links are wired, but only show alerts for now. Need to create views for each page type. Removed debug logging from credentials check.
1904fa3
Commits on Jan 29, 2013
@MusikPolice Added the import media page and wired associated events. Need to hook…
… it up to the API
21c56c4
Commits on Feb 01, 2013
@MusikPolice Wired up add media form to the API. Next step is to sync the importer…
… status information
aa9b4e2
@MusikPolice added an override to Backbone.sync. This should allow us to specify t…
…he auth header for all sync calls
1b275d2
@MusikPolice added the auth header to Backbone.sync. No idea if this works quite yet. 6aad733
Commits on Feb 05, 2013
@MusikPolice Replaced login ajax call with a Backbone.sync update call a7e027a
Commits on Mar 04, 2013
@MusikPolice Finally got model sync working for registration, login, and logout th…
…anks to a new javascript library found on github
ac85478
Commits on Mar 06, 2013
@MusikPolice fixed documentation 504e04d
@MusikPolice added more documentation c569d1b
@MusikPolice Modified user account registration form validation to user backbone.f…
…etch instead of raw jquery
88275f9
@MusikPolice Added an artists page to the app and wired up navigation 240c6d6
Commits on Mar 12, 2013
@MusikPolice PEP8 Compliance d24937e
@MusikPolice Modified basicauth library to save auth token in the global user mode…
…l. This works around scope issues that were causing it to get lost in earlier implementations
2461fd1
@MusikPolice Removed debug logging, changed name of users collection, added basica…
…uth header to file importer post ajax
da37f14
@MusikPolice Added an artist object and collection to front-end UI, refactored to …
…move registration and login views above other in-app views
61c4306
Commits on Mar 13, 2013
@MusikPolice Added a not so minified version of backbone.js to ease debugging 7764606
@MusikPolice Artists view now pulls data from the server and displays artists in a…
… pretty list
556c5c3
Commits on Mar 24, 2013
@MusikPolice Continued working with backbone.js. Not convinced that this is the wa…
…y forward
5ccb036
@MusikPolice Ripped out all of the backbone stuff and renamed references to backbo…
…ne so that they refer to ember instead
2a1514b
@MusikPolice Continued refactoring and got the app running with ember 8b984de
@MusikPolice Added nav and current user controls to the default template. 2bc9cb5
Commits on Mar 29, 2013
@MusikPolice Basic application navigation now works with ember.js. Obviously need …
…to make the pages a bit more complex and pull some models in from the server
0ee68a8
@MusikPolice Temporarily disabled HTTP Basic Auth until we get it working on the c…
…lient side. Artists page now pulls and displays a list of artists.
b87fdcf
Commits on Apr 02, 2013
@MusikPolice Added some prettier formatting to the artists list page e3623fc
@MusikPolice Modified python routing so that all urls that don't start with /api a…
…re redirected to index page. This allows ember to handle url management on the client side
e32b5a0
@MusikPolice Created an artist details page that is linked from the artists list. …
…navigating directly to an artist id does not work
5355206
@MusikPolice Implemented a find() function on the Artist model to allow url naviga…
…tion directly do an artist without first loading the full artist list.
20c7b1f
Commits on Apr 05, 2013
@MusikPolice Implemented albums view and album pages 627053b
@MusikPolice Got rid of unnecessary global variables in objects 1372701
@MusikPolice refactored to group stuff better 47a0d09
Commits on Apr 06, 2013
@MusikPolice Added a function to fetch all existing user accounts 95b8d46
Commits on Jul 05, 2013
@MusikPolice Updated dependencies to their most recent versions. A lot has changed…
… since the last time I actively worked on this project.
eca84cf
@MusikPolice Wired add media button click events up with ember and fixed css. Stil…
…l need to response appropriately to events.
cc1f585
@MusikPolice Fixed output string. Turns out that %b does not work for boolean values a3e8322
@MusikPolice Wired add media form submit button up to the importer POST api. It's …
…rough, but it lets you import media. Next step here is to listen for import errors and warnings
2013685
Commits on Sep 28, 2013
@MusikPolice Upgraded all packages to latest versions be22606
@MusikPolice Added the requests library 78cedb0
Commits on Oct 05, 2013
@MusikPolice Added nested objects to api queries. artist queries now include album…
…s by the artist, which in turn include tracks on the album, etc. Front-end web application templates need to be upgraded to support these new fields
d7842db
Commits on Nov 27, 2013
@MusikPolice Started ripping out ember and replacing it with a home-brewed solutio…
…n that uses jQuery and Handlebars. I've wasted too much time learning frameworks when I could have just written the app myself
336e525
@MusikPolice Added artist listing to new jQuery interface. Next steps are to add i…
…ndividual links to details pages
6cfda5c
Commits on Nov 29, 2013
@MusikPolice Added album and track counts to artists display, hooked up artist det…
…ails page.
aa7cfeb
Commits on Feb 08, 2014
@MusikPolice A bunch of upgrades and improvements to the UI. Albums are displayed …
…on artist pages, tracks are displayed on album pages, and templates are cleaner in general. Still some odd width issues on the artist page, and we need to create some kind of bread crumb nav, but it's coming along.
ffdab05
Commits on Mar 18, 2014
@MusikPolice Removed reference to jquery-nested. It's not being used anywhere 02ce91b
@MusikPolice Upgrading soundmanager2 to v2.97a and removing unused variations of t…
…he library
1cea743
@MusikPolice Moved soundmanager 2 js library up into libs folder and renamed it to…
… contain version info in file name
41f0eb9
@MusikPolice Upgraded soundmanager2 swf files for non-html5 playback to version 2.97a c7f3452
Commits on Mar 19, 2014
@MusikPolice Added some initialization code for SoundManager2. Still need to hook …
…up player buttons
a26f83c
@MusikPolice Pulled in some old SoundManager2 code from the master branch. Wired u…
…p album page track listings to have individual play links that construct a streaming url and load it into SoundManager2. Unfortunately, the streaming code seems to be broken - I can't open an ogg stream with either vlc or js.
f370000
Commits on Aug 02, 2014
@MusikPolice Removed audioread from the project e96d9a7
@MusikPolice Added python-audiotranscode to project. This project is not in pip, s…
…o I've forked it and am copying files over manually.
d48da75
@MusikPolice Added available codecs to startup messaging, disabled import for old …
…streaming library
cada8ab
@MusikPolice Integrated new audiotranscode library and fixed the interface event h…
…andlers. ogg/vorbis streaming is now working! Next steps are to send a content-type header to the server in the stream request that specifies the codecs that the player supports. The server will then intelligently choose whether or not it's necessary to transcode
bcd133a
@MusikPolice Merging ember branch into master. This change represents an entirely …
…re-written javascript client that avoids page refreshes so that the user can navigate while music is playing. Some features (notably accounts and sessions) have been disabled to support the re-write
f3b4b21
Commits on Aug 03, 2014
@MusikPolice Fixed a typo in the importer that was causing an exception during imp…
…ort of albums with disc subtitles
25ed170
Commits on Aug 21, 2014
@MusikPolice Added file mime type to Track object in database and ensured that it …
…is guessed at import type
9f7194d
@MusikPolice Client now intelligently selects the desired format of a song that is…
… selected for playback. We try to play the native format of the file whenever possible. If it isn't supported, we choose either ogg vorbis or mp3, depending on what is supported by both server and client.
ad1d459
@MusikPolice Updated the readme cac90c1
Commits on Aug 22, 2014
@MusikPolice Wired up the login/register button in the nav bar, started work on re…
…storing the old login and registration forms
f739359
Commits on Aug 26, 2014
@MusikPolice Updated login and registration form styles and hooked up javascript n…
…av events. Next step is basic validation and button click handling
12e4196
Commits on Sep 07, 2014
@MusikPolice Wired up basic auth and modified client to require a valid session pr…
…ior to doing anything useful. Getting this to work required me to remove auth requirements for calls to /api/stream/*, which could be considered a security hole, as it allows arbitrary clients to stream without credentials. See issue #54 for details
5f1e63e
@MusikPolice Documented the security hole issue number 51ce65a
Commits on Oct 05, 2014
@MusikPolice Simplified streaming of a file that doesn't require transcoding, sinc…
…e cherrypy supports returning a file-like object from an http handler instead of manually reading the file and yielding its bytes. Also added a basic progress bar to the web interface. The progress bar only works on files that are not being transcoded, since we don't know the size or duration of files that are being transcoded. Next step is to use the length from track metadata instead
4ad077f
@MusikPolice Added singular Artist and Album endpoints that return full details ab…
…out an artist or album respectively. Trimmed down the objects returned by the Artists and Albums endpoints to that the client needs less data when assembling a list of multiple artists or albums. Updated the client appropriately.
12da695
@MusikPolice Added an explicit sort to sub-objects of artist, album and disc. This…
… means that an artist's albums will be sorted by title_sort, and an album or disc's tracks will be sorted by tracknumber whenever their parent objects are returned by the api
8493318
Commits on Nov 09, 2014
@MusikPolice Added some null ref protection in the case where certain properties o…
…f an object were not set, fixed length documentation to read seconds instead of milliseconds
0733222
@MusikPolice Added global maps of artist, album, and track information keyed on mu…
…sik id that are populated automatically by API calls. These will be used to fetch rich information about an object that we don't want to store in the html attributes
f888c54
@MusikPolice Modified client to extract track mime type from global tracks dict in…
…stead of html template. Hooray for separation of model and view!
a34d679
@MusikPolice Used global track metadata to calculate track playback progress when …
…Content-Length header is not provided by the server. Added a placeholder for an event to be thrown when playback is 80% complete.
1987a9d
@MusikPolice Added a user actions table for tracking user activity. Next step is t…
…o put actions in it whenever they occur
128b67c