Rename libresonic -> airsonic

Signed-off-by: Andrew DeMaria <lostonamountain@gmail.com>
master
Andrew DeMaria 7 years ago
parent 11dc3f6b1f
commit 94dbd3ef94
No known key found for this signature in database
GPG Key ID: 0A3F5E91F8364EDF
  1. 2
      .gitignore
  2. 6
      CHANGELOG.md
  3. 8
      CONTRIBUTING.md
  4. 4
      DOCUMENTATION.md
  5. 36
      README.md
  6. 2
      airsonic-main/Getting Started.html
  7. 22
      airsonic-main/pom.xml
  8. 12
      airsonic-main/src/main/java/org/airsonic/player/ajax/ArtistInfo.java
  9. 12
      airsonic-main/src/main/java/org/airsonic/player/ajax/CoverArtInfo.java
  10. 26
      airsonic-main/src/main/java/org/airsonic/player/ajax/CoverArtService.java
  11. 12
      airsonic-main/src/main/java/org/airsonic/player/ajax/LyricsInfo.java
  12. 14
      airsonic-main/src/main/java/org/airsonic/player/ajax/LyricsService.java
  13. 30
      airsonic-main/src/main/java/org/airsonic/player/ajax/MultiService.java
  14. 12
      airsonic-main/src/main/java/org/airsonic/player/ajax/NowPlayingInfo.java
  15. 18
      airsonic-main/src/main/java/org/airsonic/player/ajax/NowPlayingService.java
  16. 14
      airsonic-main/src/main/java/org/airsonic/player/ajax/PlayQueueInfo.java
  17. 28
      airsonic-main/src/main/java/org/airsonic/player/ajax/PlayQueueService.java
  18. 14
      airsonic-main/src/main/java/org/airsonic/player/ajax/PlaylistInfo.java
  19. 44
      airsonic-main/src/main/java/org/airsonic/player/ajax/PlaylistService.java
  20. 12
      airsonic-main/src/main/java/org/airsonic/player/ajax/ScanInfo.java
  21. 10
      airsonic-main/src/main/java/org/airsonic/player/ajax/SimilarArtist.java
  22. 18
      airsonic-main/src/main/java/org/airsonic/player/ajax/StarService.java
  23. 22
      airsonic-main/src/main/java/org/airsonic/player/ajax/TagService.java
  24. 10
      airsonic-main/src/main/java/org/airsonic/player/ajax/TopSong.java
  25. 16
      airsonic-main/src/main/java/org/airsonic/player/ajax/TransferService.java
  26. 12
      airsonic-main/src/main/java/org/airsonic/player/ajax/UploadInfo.java
  27. 12
      airsonic-main/src/main/java/org/airsonic/player/boot/Application.java
  28. 4
      airsonic-main/src/main/java/org/airsonic/player/boot/TomcatApplication.java
  29. 18
      airsonic-main/src/main/java/org/airsonic/player/cache/CacheFactory.java
  30. 14
      airsonic-main/src/main/java/org/airsonic/player/command/AdvancedSettingsCommand.java
  31. 4
      airsonic-main/src/main/java/org/airsonic/player/command/DatabaseSettingsCommand.java
  32. 12
      airsonic-main/src/main/java/org/airsonic/player/command/EnumHolder.java
  33. 16
      airsonic-main/src/main/java/org/airsonic/player/command/GeneralSettingsCommand.java
  34. 16
      airsonic-main/src/main/java/org/airsonic/player/command/MusicFolderSettingsCommand.java
  35. 14
      airsonic-main/src/main/java/org/airsonic/player/command/PasswordSettingsCommand.java
  36. 16
      airsonic-main/src/main/java/org/airsonic/player/command/PersonalSettingsCommand.java
  37. 22
      airsonic-main/src/main/java/org/airsonic/player/command/PlayerSettingsCommand.java
  38. 14
      airsonic-main/src/main/java/org/airsonic/player/command/PodcastSettingsCommand.java
  39. 20
      airsonic-main/src/main/java/org/airsonic/player/command/SearchCommand.java
  40. 20
      airsonic-main/src/main/java/org/airsonic/player/command/UserSettingsCommand.java
  41. 12
      airsonic-main/src/main/java/org/airsonic/player/controller/AbstractChartController.java
  42. 2
      airsonic-main/src/main/java/org/airsonic/player/controller/AccessDeniedController.java
  43. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/AdvancedSettingsController.java
  44. 12
      airsonic-main/src/main/java/org/airsonic/player/controller/AllmusicController.java
  45. 12
      airsonic-main/src/main/java/org/airsonic/player/controller/AutoCoverDemo.java
  46. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/AvatarController.java
  47. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/AvatarUploadController.java
  48. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/ChangeCoverArtController.java
  49. 2
      airsonic-main/src/main/java/org/airsonic/player/controller/ControllerUtils.java
  50. 28
      airsonic-main/src/main/java/org/airsonic/player/controller/CoverArtController.java
  51. 14
      airsonic-main/src/main/java/org/airsonic/player/controller/DBController.java
  52. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/DLNASettingsController.java
  53. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/DatabaseSettingsController.java
  54. 26
      airsonic-main/src/main/java/org/airsonic/player/controller/DownloadController.java
  55. 22
      airsonic-main/src/main/java/org/airsonic/player/controller/EditTagsController.java
  56. 10
      airsonic-main/src/main/java/org/airsonic/player/controller/ExportPlayListController.java
  57. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/ExternalPlayerController.java
  58. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/GeneralSettingsController.java
  59. 14
      airsonic-main/src/main/java/org/airsonic/player/controller/GettingStartedController.java
  60. 30
      airsonic-main/src/main/java/org/airsonic/player/controller/HLSController.java
  61. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/HelpController.java
  62. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/HomeController.java
  63. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/ImportPlaylistController.java
  64. 8
      airsonic-main/src/main/java/org/airsonic/player/controller/IndexController.java
  65. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/InternetRadioSettingsController.java
  66. 14
      airsonic-main/src/main/java/org/airsonic/player/controller/JAXBWriter.java
  67. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/LeftController.java
  68. 10
      airsonic-main/src/main/java/org/airsonic/player/controller/LoginController.java
  69. 12
      airsonic-main/src/main/java/org/airsonic/player/controller/LyricsController.java
  70. 32
      airsonic-main/src/main/java/org/airsonic/player/controller/M3UController.java
  71. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/MainController.java
  72. 23
      airsonic-main/src/main/java/org/airsonic/player/controller/MoreController.java
  73. 28
      airsonic-main/src/main/java/org/airsonic/player/controller/MusicFolderSettingsController.java
  74. 2
      airsonic-main/src/main/java/org/airsonic/player/controller/NotFoundController.java
  75. 24
      airsonic-main/src/main/java/org/airsonic/player/controller/NowPlayingController.java
  76. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/PasswordSettingsController.java
  77. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/PersonalSettingsController.java
  78. 24
      airsonic-main/src/main/java/org/airsonic/player/controller/PlayQueueController.java
  79. 22
      airsonic-main/src/main/java/org/airsonic/player/controller/PlayerSettingsController.java
  80. 30
      airsonic-main/src/main/java/org/airsonic/player/controller/PlaylistController.java
  81. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/PlaylistsController.java
  82. 14
      airsonic-main/src/main/java/org/airsonic/player/controller/PodcastChannelController.java
  83. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/PodcastChannelsController.java
  84. 26
      airsonic-main/src/main/java/org/airsonic/player/controller/PodcastController.java
  85. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/PodcastReceiverAdminController.java
  86. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/PodcastSettingsController.java
  87. 12
      airsonic-main/src/main/java/org/airsonic/player/controller/ProxyController.java
  88. 253
      airsonic-main/src/main/java/org/airsonic/player/controller/RESTController.java
  89. 22
      airsonic-main/src/main/java/org/airsonic/player/controller/RandomPlayQueueController.java
  90. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/RecoverController.java
  91. 14
      airsonic-main/src/main/java/org/airsonic/player/controller/ReloadFrame.java
  92. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/RightController.java
  93. 26
      airsonic-main/src/main/java/org/airsonic/player/controller/SearchController.java
  94. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/SetMusicFileInfoController.java
  95. 20
      airsonic-main/src/main/java/org/airsonic/player/controller/SetRatingController.java
  96. 16
      airsonic-main/src/main/java/org/airsonic/player/controller/SettingsController.java
  97. 22
      airsonic-main/src/main/java/org/airsonic/player/controller/ShareManagementController.java
  98. 30
      airsonic-main/src/main/java/org/airsonic/player/controller/ShareSettingsController.java
  99. 18
      airsonic-main/src/main/java/org/airsonic/player/controller/SonosSettingsController.java
  100. 24
      airsonic-main/src/main/java/org/airsonic/player/controller/StarredController.java
  101. Some files were not shown because too many files have changed in this diff Show More

2
.gitignore vendored

@ -1,6 +1,6 @@
# #
# .gitignore # .gitignore
# Libresonic/libresonic # airsonic/airsonic
# #
# Project-wide gitignores # Project-wide gitignores
# #

@ -1,6 +1,6 @@
<!-- <!--
# CHANGELOG.md # CHANGELOG.md
# Libresonic/libresonic # airsonic/airsonic
# --> # -->
v6.2 v6.2
@ -62,7 +62,7 @@ v6.1.beta1
v6.1-alpha1 v6.1-alpha1
----------- -----------
* Search+replace subsonic-->libresonic * Search+replace subsonic-->airsonic
* Move out of org.sourceforge.subsonic namespace * Move out of org.sourceforge.subsonic namespace
* Develop becomes horribly unstable, you shouldn't be using this. * Develop becomes horribly unstable, you shouldn't be using this.
@ -76,5 +76,5 @@ v6.0.1
v6.0 v6.0
---- ----
* First release as Libresonic * First release as Airsonic
* Based upon Subsonic 5.3(stable) * Based upon Subsonic 5.3(stable)

@ -1,10 +1,10 @@
Guidelines for Contributing Guidelines for Contributing
--------------------------- ---------------------------
Libresonic development is a community project, and contributions are welcomed. Here are a few guidelines you should follow before submitting: Airsonic development is a community project, and contributions are welcomed. Here are a few guidelines you should follow before submitting:
1. **License Acceptance** All contributions must be licensed as [GNU GPLv3](https://github.com/Libresonic/libresonic/blob/develop/LICENSE.txt) to be accepted. Use [`git commit --signoff`](https://jk.gs/git-commit.html) to acknowledge this. 1. **License Acceptance** All contributions must be licensed as [GNU GPLv3](https://github.com/airsonic/airsonic/blob/develop/LICENSE.txt) to be accepted. Use [`git commit --signoff`](https://jk.gs/git-commit.html) to acknowledge this.
2. **No Breakage** New features or changes to existing ones must not degrade the user experience. This means do not introduce bugs, remove functionality, or make large changes to existing themes/UI without prior discussion in an Issue. 2. **No Breakage** New features or changes to existing ones must not degrade the user experience. This means do not introduce bugs, remove functionality, or make large changes to existing themes/UI without prior discussion in an Issue.
3. **Coding standards** Language best-practices should be followed, comment generously, and avoid "clever" algorithms. Refactoring existing messes is great, but watch out for breakage. 3. **Coding standards** Language best-practices should be followed, comment generously, and avoid "clever" algorithms. Refactoring existing messes is great, but watch out for breakage.
4. **Be bold!** Without contributions, this project will vanish. If you just want to help out, try [submiting a patch](https://github.com/Libresonic/libresonic/issues?q=is%3Aissue+is%3Aopen+label%3Apatches-welcome) for an open Issue. 4. **Be bold!** Without contributions, this project will vanish. If you just want to help out, try [submiting a patch](https://github.com/airsonic/airsonic/issues?q=is%3Aissue+is%3Aopen+label%3Apatches-welcome) for an open Issue.
5. **Stay relevant** Issues or commentary that is off-topic or tangential to Libresonic development is subject to moderation. Questions should be focused on improving documentation to solve a problem. Visit [Reddit](https://www.reddit.com/r/libresonic) or [IRC](http://webchat.freenode.net?channels=%23libresonic) for community discussion. 5. **Stay relevant** Issues or commentary that is off-topic or tangential to Airsonic development is subject to moderation. Questions should be focused on improving documentation to solve a problem. Visit [Reddit](https://www.reddit.com/r/airsonic) or [IRC](http://webchat.freenode.net?channels=%23airsonic) for community discussion.

@ -1,10 +1,10 @@
<!-- <!--
# DOCUMENTATION.md # DOCUMENTATION.md
# Libresonic/player # Airsonic/player
--> -->
Documentation Documentation
============= =============
Documentation is stored in a [dedicated repository](https://github.com/Libresonic/documentation). Documentation is stored in a [dedicated repository](https://github.com/Airsonic/documentation).

@ -1,22 +1,22 @@
<!-- <!--
# README.md # README.md
# Libresonic/libresonic # airsonic/airsonic
--> -->
Libresonic Airsonic
======== ========
What is Libresonic? What is Airsonic?
----------------- -----------------
Libresonic is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room. Airsonic is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.
Libresonic is designed to handle very large music collections (hundreds of gigabytes). Although optimized for MP3 streaming, it works for any audio or video format that can stream over HTTP, for instance AAC and OGG. By using transcoder plug-ins, Libresonic supports on-the-fly conversion and streaming of virtually any audio format, including WMA, FLAC, APE, Musepack, WavPack and Shorten. Airsonic is designed to handle very large music collections (hundreds of gigabytes). Although optimized for MP3 streaming, it works for any audio or video format that can stream over HTTP, for instance AAC and OGG. By using transcoder plug-ins, Airsonic supports on-the-fly conversion and streaming of virtually any audio format, including WMA, FLAC, APE, Musepack, WavPack and Shorten.
If you have constrained bandwidth, you may set an upper limit for the bitrate of the music streams. Libresonic will then automatically resample the music to a suitable bitrate. If you have constrained bandwidth, you may set an upper limit for the bitrate of the music streams. Airsonic will then automatically resample the music to a suitable bitrate.
In addition to being a streaming media server, Libresonic works very well as a local jukebox. The intuitive web interface, as well as search and index facilities, are optimized for efficient browsing through large media libraries. Libresonic also comes with an integrated Podcast receiver, with many of the same features as you find in iTunes. In addition to being a streaming media server, Airsonic works very well as a local jukebox. The intuitive web interface, as well as search and index facilities, are optimized for efficient browsing through large media libraries. Airsonic also comes with an integrated Podcast receiver, with many of the same features as you find in iTunes.
Based on Java technology, Libresonic runs on most platforms, including Windows, Mac, Linux and Unix variants. Based on Java technology, Airsonic runs on most platforms, including Windows, Mac, Linux and Unix variants.
![Screenshot](contrib/assets/screenshot.jpg) ![Screenshot](contrib/assets/screenshot.jpg)
@ -25,31 +25,31 @@ History
The original [Subsonic](http://www.subsonic.org/) is developed by [Sindre Mehus](mailto:sindre@activeobjects.no). Subsonic was open source through version 6.0-beta1, and closed-source from then onwards. The original [Subsonic](http://www.subsonic.org/) is developed by [Sindre Mehus](mailto:sindre@activeobjects.no). Subsonic was open source through version 6.0-beta1, and closed-source from then onwards.
Libresonic is maintained by [Eugene E. Kashpureff Jr](mailto:eugene@kashpureff.org). It originated as an unofficial("Kang") of Subsonic which did not contain the Licensing code checks present in the official builds. With the announcement of Subsonic's closed-source future, a decision was made to make a full fork and rebrand to Libresonic. Airsonic is maintained by [Eugene E. Kashpureff Jr](mailto:eugene@kashpureff.org). It originated as an unofficial("Kang") of Subsonic which did not contain the Licensing code checks present in the official builds. With the announcement of Subsonic's closed-source future, a decision was made to make a full fork and rebrand to Airsonic.
Libresonic will strive to maintain compatibility and stability for Subsonic users, including a clean upgrade path. New features and refactoring are welcomed as a Pull Request on GitHub. Airsonic will strive to maintain compatibility and stability for Subsonic users, including a clean upgrade path. New features and refactoring are welcomed as a Pull Request on GitHub.
License License
------- -------
Libresonic is free software and licensed under the [GNU General Public License version 3](http://www.gnu.org/copyleft/gpl.html). The code in this repository (and associated binaries) are free of any "license key" or other restrictions. If you wish to thank the maintainer of this repository, please consider a donation to the [Electronic Frontier Foundation](https://supporters.eff.org/donate). Airsonic is free software and licensed under the [GNU General Public License version 3](http://www.gnu.org/copyleft/gpl.html). The code in this repository (and associated binaries) are free of any "license key" or other restrictions. If you wish to thank the maintainer of this repository, please consider a donation to the [Electronic Frontier Foundation](https://supporters.eff.org/donate).
The [Subsonic source code](https://github.com/Libresonic/subsonic-svn) was released under the GPLv3 through version 6.0-beta1. Beginning with 6.0-beta2, source is no longer provided. Binaries of Subsonic are only available under a commercial license. There is a [Subsonic Premium](http://www.subsonic.org/pages/premium.jsp) service which adds functionality not available in Libresonic. Subsonic also offers RPM, Deb, Exe, and other pre-built packages that Libresonic [currently does not](https://github.com/Libresonic/libresonic/issues/65). The [Subsonic source code](https://github.com/airsonic/subsonic-svn) was released under the GPLv3 through version 6.0-beta1. Beginning with 6.0-beta2, source is no longer provided. Binaries of Subsonic are only available under a commercial license. There is a [Subsonic Premium](http://www.subsonic.org/pages/premium.jsp) service which adds functionality not available in Airsonic. Subsonic also offers RPM, Deb, Exe, and other pre-built packages that Airsonic [currently does not](https://github.com/airsonic/airsonic/issues/65).
Usage Usage
----- -----
Libresonic can be downloaded from Airsonic can be downloaded from
[GitHub](https://github.com/Libresonic/libresonic/releases) for personal usage. [GitHub](https://github.com/airsonic/airsonic/releases) for personal usage.
Packagers can also reference the [release repository](https://libresonic.org/release/). Packagers can also reference the [release repository](https://airsonic.org/release/).
Please use the [Libresonic documentation](https://libresonic.github.io/docs/) for instructions on running Libresonic. Please use the [Airsonic documentation](https://airsonic.github.io/docs/) for instructions on running Airsonic.
Community Community
--------- ---------
Please see [Reddit](https://www.reddit.com/r/libresonic) or Please see [Reddit](https://www.reddit.com/r/airsonic) or
[IRC](http://webchat.freenode.net?channels=%23libresonic) for community [IRC](http://webchat.freenode.net?channels=%23airsonic) for community
discussion. discussion.

@ -1,7 +1,7 @@
<html> <html>
<head> <head>
<meta http-equiv="refresh" content="0;URL=http://libresonic.org/pages/getting-started.jsp"> <meta http-equiv="refresh" content="0;URL=http://airsonic.org/pages/getting-started.jsp">
</head> </head>
<body> <body>

@ -2,13 +2,13 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>libresonic-main</artifactId> <artifactId>airsonic-main</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<name>Libresonic Main</name> <name>Airsonic Main</name>
<parent> <parent>
<groupId>org.libresonic.player</groupId> <groupId>org.airsonic.player</groupId>
<artifactId>libresonic</artifactId> <artifactId>airsonic</artifactId>
<version>6.3-SNAPSHOT</version> <version>6.3-SNAPSHOT</version>
</parent> </parent>
@ -20,14 +20,14 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.libresonic.player</groupId> <groupId>org.airsonic.player</groupId>
<artifactId>subsonic-rest-api</artifactId> <artifactId>subsonic-rest-api</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.libresonic.player</groupId> <groupId>org.airsonic.player</groupId>
<artifactId>libresonic-sonos-api</artifactId> <artifactId>airsonic-sonos-api</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
@ -465,7 +465,7 @@
</dependencies> </dependencies>
<build> <build>
<finalName>libresonic</finalName> <finalName>airsonic</finalName>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@ -476,7 +476,7 @@
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.2.RELEASE</version> <version>1.5.2.RELEASE</version>
<configuration> <configuration>
<mainClass>org.libresonic.player.boot.Application</mainClass> <mainClass>org.airsonic.player.boot.Application</mainClass>
<layout>WAR</layout> <layout>WAR</layout>
<excludeGroupIds>${boot.group.excludes}</excludeGroupIds> <excludeGroupIds>${boot.group.excludes}</excludeGroupIds>
<excludeArtifactIds>${boot.artifact.excludes}</excludeArtifactIds> <excludeArtifactIds>${boot.artifact.excludes}</excludeArtifactIds>
@ -522,8 +522,8 @@
<configuration> <configuration>
<target> <target>
<tstamp/> <tstamp/>
<copy file="${basedir}/src/main/resources/org/libresonic/player/i18n/ResourceBundle_en.properties" <copy file="${basedir}/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en.properties"
tofile="${project.build.directory}/classes/org/libresonic/player/i18n/ResourceBundle.properties"/> tofile="${project.build.directory}/classes/org/airsonic/player/i18n/ResourceBundle.properties"/>
<echo file="${project.build.directory}/classes/build_number.txt">${buildNumber}</echo> <echo file="${project.build.directory}/classes/build_number.txt">${buildNumber}</echo>
<echo file="${project.build.directory}/classes/build_date.txt">${DSTAMP}</echo> <echo file="${project.build.directory}/classes/build_date.txt">${DSTAMP}</echo>
<echo file="${project.build.directory}/classes/version.txt">${project.version}</echo> <echo file="${project.build.directory}/classes/version.txt">${project.version}</echo>

@ -1,25 +1,25 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2014 (C) Sindre Mehus * Copyright 2014 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.libresonic.player.domain.ArtistBio; import org.airsonic.player.domain.ArtistBio;
import java.util.List; import java.util.List;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
/** /**
* Contains info about cover art images for an album. * Contains info about cover art images for an album.

@ -1,36 +1,36 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.domain.LastFmCoverArt;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.service.LastFmService;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.libresonic.player.domain.LastFmCoverArt;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.service.LastFmService;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
/** /**
* Contains lyrics info for a song. * Contains lyrics info for a song.

@ -1,24 +1,25 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.http.client.ResponseHandler; import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig;
@ -30,7 +31,6 @@ import org.jdom.Document;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.Namespace; import org.jdom.Namespace;
import org.jdom.input.SAXBuilder; import org.jdom.input.SAXBuilder;
import org.libresonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,33 +1,33 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.domain.ArtistBio;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.domain.MusicFolder;
import org.airsonic.player.domain.UserSettings;
import org.airsonic.player.service.LastFmService;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.directwebremoting.WebContextFactory; import org.directwebremoting.WebContextFactory;
import org.libresonic.player.domain.ArtistBio;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.domain.MusicFolder;
import org.libresonic.player.domain.UserSettings;
import org.libresonic.player.service.LastFmService;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
/** /**
* Details about what a user is currently listening to. * Details about what a user is currently listening to.

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.*;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.directwebremoting.WebContext; import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory; import org.directwebremoting.WebContextFactory;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.*;
import org.libresonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,25 +1,25 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.libresonic.player.util.StringUtil; import org.airsonic.player.util.StringUtil;
import java.util.List; import java.util.List;

@ -1,33 +1,33 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.airsonic.player.dao.MediaFileDao;
import org.airsonic.player.dao.PlayQueueDao;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.*;
import org.airsonic.player.service.PlaylistService;
import org.airsonic.player.util.StringUtil;
import org.directwebremoting.WebContextFactory; import org.directwebremoting.WebContextFactory;
import org.libresonic.player.dao.MediaFileDao;
import org.libresonic.player.dao.PlayQueueDao;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.*;
import org.libresonic.player.service.PlaylistService;
import org.libresonic.player.util.StringUtil;
import org.springframework.web.servlet.support.RequestContextUtils; import org.springframework.web.servlet.support.RequestContextUtils;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -54,7 +54,7 @@ public class PlayQueueService {
private SearchService searchService; private SearchService searchService;
private RatingService ratingService; private RatingService ratingService;
private PodcastService podcastService; private PodcastService podcastService;
private org.libresonic.player.service.PlaylistService playlistService; private PlaylistService playlistService;
private MediaFileDao mediaFileDao; private MediaFileDao mediaFileDao;
private PlayQueueDao playQueueDao; private PlayQueueDao playQueueDao;
private JWTSecurityService jwtSecurityService; private JWTSecurityService jwtSecurityService;
@ -146,7 +146,7 @@ public class PlayQueueService {
List<Integer> ids = MediaFile.toIdList(playQueue.getFiles()); List<Integer> ids = MediaFile.toIdList(playQueue.getFiles());
Integer currentId = currentSongIndex == -1 ? null : playQueue.getFile(currentSongIndex).getId(); Integer currentId = currentSongIndex == -1 ? null : playQueue.getFile(currentSongIndex).getId();
SavedPlayQueue savedPlayQueue = new SavedPlayQueue(null, username, ids, currentId, positionMillis, new Date(), "Libresonic"); SavedPlayQueue savedPlayQueue = new SavedPlayQueue(null, username, ids, currentId, positionMillis, new Date(), "Airsonic");
playQueueDao.savePlayQueue(savedPlayQueue); playQueueDao.savePlayQueue(savedPlayQueue);
} }

@ -1,25 +1,25 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.libresonic.player.domain.Playlist; import org.airsonic.player.domain.Playlist;
import java.util.List; import java.util.List;

@ -1,35 +1,35 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.dao.MediaFileDao;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.domain.MusicFolder;
import org.airsonic.player.domain.Player;
import org.airsonic.player.domain.Playlist;
import org.airsonic.player.i18n.LocaleResolver;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.PlayerService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.directwebremoting.WebContextFactory; import org.directwebremoting.WebContextFactory;
import org.libresonic.player.dao.MediaFileDao;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.domain.MusicFolder;
import org.libresonic.player.domain.Player;
import org.libresonic.player.domain.Playlist;
import org.libresonic.player.i18n.LibresonicLocaleResolver;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.PlayerService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -47,11 +47,11 @@ public class PlaylistService {
private MediaFileService mediaFileService; private MediaFileService mediaFileService;
private SecurityService securityService; private SecurityService securityService;
private org.libresonic.player.service.PlaylistService playlistService; private org.airsonic.player.service.PlaylistService playlistService;
private MediaFileDao mediaFileDao; private MediaFileDao mediaFileDao;
private SettingsService settingsService; private SettingsService settingsService;
private PlayerService playerService; private PlayerService playerService;
private LibresonicLocaleResolver localeResolver; private LocaleResolver localeResolver;
public List<Playlist> getReadablePlaylists() { public List<Playlist> getReadablePlaylists() {
HttpServletRequest request = WebContextFactory.get().getHttpServletRequest(); HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
@ -136,7 +136,7 @@ public class PlaylistService {
playlist.setChanged(now); playlist.setChanged(now);
playlist.setShared(false); playlist.setShared(false);
ResourceBundle bundle = ResourceBundle.getBundle("org.libresonic.player.i18n.ResourceBundle", locale); ResourceBundle bundle = ResourceBundle.getBundle("org.airsonic.player.i18n.ResourceBundle", locale);
playlist.setName(bundle.getString("top.starred") + " " + dateFormat.format(now)); playlist.setName(bundle.getString("top.starred") + " " + dateFormat.format(now));
playlistService.createPlaylist(playlist); playlistService.createPlaylist(playlist);
@ -233,7 +233,7 @@ public class PlaylistService {
return getPlaylist(id); return getPlaylist(id);
} }
public void setPlaylistService(org.libresonic.player.service.PlaylistService playlistService) { public void setPlaylistService(org.airsonic.player.service.PlaylistService playlistService) {
this.playlistService = playlistService; this.playlistService = playlistService;
} }
@ -257,7 +257,7 @@ public class PlaylistService {
this.playerService = playerService; this.playerService = playerService;
} }
public void setLocaleResolver(LibresonicLocaleResolver localeResolver) { public void setLocaleResolver(LocaleResolver localeResolver) {
this.localeResolver = localeResolver; this.localeResolver = localeResolver;
} }
} }

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
/** /**
* Media folder scanning status. * Media folder scanning status.

@ -1,22 +1,22 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2014 (C) Sindre Mehus * Copyright 2014 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
/** /**
* Contains info about a similar artist. * Contains info about a similar artist.

@ -1,29 +1,29 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.dao.MediaFileDao;
import org.airsonic.player.domain.User;
import org.airsonic.player.service.SecurityService;
import org.directwebremoting.WebContext; import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory; import org.directwebremoting.WebContextFactory;
import org.libresonic.player.dao.MediaFileDao;
import org.libresonic.player.domain.User;
import org.libresonic.player.service.SecurityService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,32 +1,32 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.metadata.MetaData;
import org.airsonic.player.service.metadata.MetaDataParser;
import org.airsonic.player.service.metadata.MetaDataParserFactory;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.metadata.MetaData;
import org.libresonic.player.service.metadata.MetaDataParser;
import org.libresonic.player.service.metadata.MetaDataParserFactory;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,22 +1,22 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2015 (C) Sindre Mehus * Copyright 2015 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
/** /**
* See {@link ArtistInfo}. * See {@link ArtistInfo}.

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
import org.airsonic.player.controller.UploadController;
import org.airsonic.player.domain.TransferStatus;
import org.directwebremoting.WebContextFactory; import org.directwebremoting.WebContextFactory;
import org.libresonic.player.controller.UploadController;
import org.libresonic.player.domain.TransferStatus;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.ajax; package org.airsonic.player.ajax;
/** /**
* Contains status for a file upload. * Contains status for a file upload.

@ -1,9 +1,9 @@
package org.libresonic.player.boot; package org.airsonic.player.boot;
import net.sf.ehcache.constructs.web.ShutdownListener; import net.sf.ehcache.constructs.web.ShutdownListener;
import org.airsonic.player.filter.*;
import org.airsonic.player.spring.CustomPropertySourceConfigurer;
import org.directwebremoting.servlet.DwrServlet; import org.directwebremoting.servlet.DwrServlet;
import org.libresonic.player.filter.*;
import org.libresonic.player.spring.LibresonicPropertySourceConfigurer;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -40,7 +40,7 @@ import java.lang.reflect.Method;
@ImportResource(value = {"classpath:/applicationContext-service.xml", @ImportResource(value = {"classpath:/applicationContext-service.xml",
"classpath:/applicationContext-cache.xml", "classpath:/applicationContext-cache.xml",
"classpath:/applicationContext-sonos.xml", "classpath:/applicationContext-sonos.xml",
"classpath:/libresonic-servlet.xml"}) "classpath:/servlet.xml"})
public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer { public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {
private static final Logger LOG = LoggerFactory.getLogger(Application.class); private static final Logger LOG = LoggerFactory.getLogger(Application.class);
@ -180,7 +180,7 @@ public class Application extends SpringBootServletInitializer implements Embedde
// Customize the application or call application.sources(...) to add sources // Customize the application or call application.sources(...) to add sources
// Since our example is itself a @Configuration class (via @SpringBootApplication) // Since our example is itself a @Configuration class (via @SpringBootApplication)
// we actually don't need to override this method. // we actually don't need to override this method.
return application.sources(Application.class).web(true).initializers(new LibresonicPropertySourceConfigurer()); return application.sources(Application.class).web(true).initializers(new CustomPropertySourceConfigurer());
} }
@Override @Override
@ -200,7 +200,7 @@ public class Application extends SpringBootServletInitializer implements Embedde
if(tomcatESCF.isInstance(container)) { if(tomcatESCF.isInstance(container)) {
LOG.debug("Attempting to optimize tomcat"); LOG.debug("Attempting to optimize tomcat");
Object tomcatESCFInstance = tomcatESCF.cast(container); Object tomcatESCFInstance = tomcatESCF.cast(container);
Class<?> tomcatApplicationClass = Class.forName("org.libresonic.player.boot.TomcatApplication"); Class<?> tomcatApplicationClass = Class.forName("TomcatApplication");
Method configure = ReflectionUtils.findMethod(tomcatApplicationClass, "configure", tomcatESCF); Method configure = ReflectionUtils.findMethod(tomcatApplicationClass, "configure", tomcatESCF);
configure.invoke(null, tomcatESCFInstance); configure.invoke(null, tomcatESCFInstance);
LOG.debug("Tomcat optimizations complete"); LOG.debug("Tomcat optimizations complete");

@ -1,4 +1,4 @@
package org.libresonic.player.boot; package org.airsonic.player.boot;
import org.apache.catalina.Container; import org.apache.catalina.Container;
import org.apache.catalina.Wrapper; import org.apache.catalina.Wrapper;
@ -12,7 +12,7 @@ public class TomcatApplication {
tomcatFactory.addContextCustomizers((TomcatContextCustomizer) context -> { tomcatFactory.addContextCustomizers((TomcatContextCustomizer) context -> {
boolean development = (System.getProperty("libresonic.development") != null); boolean development = (System.getProperty("airsonic.development") != null);
// Increase the size and time before eviction of the Tomcat // Increase the size and time before eviction of the Tomcat
// cache so that resources aren't uncompressed too often. // cache so that resources aren't uncompressed too often.

@ -1,29 +1,29 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.cache; package org.airsonic.player.cache;
import net.sf.ehcache.CacheManager; import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache; import net.sf.ehcache.Ehcache;
import net.sf.ehcache.config.Configuration; import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.ConfigurationFactory; import net.sf.ehcache.config.ConfigurationFactory;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
@ -44,8 +44,8 @@ public class CacheFactory implements InitializingBean {
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
Configuration configuration = ConfigurationFactory.parseConfiguration(); Configuration configuration = ConfigurationFactory.parseConfiguration();
// Override configuration to make sure cache is stored in Libresonic home dir. // Override configuration to make sure cache is stored in Airsonic home dir.
File cacheDir = new File(SettingsService.getLibresonicHome(), "cache"); File cacheDir = new File(SettingsService.getAirsonicHome(), "cache");
configuration.getDiskStoreConfiguration().setPath(cacheDir.getPath()); configuration.getDiskStoreConfiguration().setPath(cacheDir.getPath());
cacheManager = CacheManager.create(configuration); cacheManager = CacheManager.create(configuration);

@ -1,25 +1,25 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.AdvancedSettingsController; import org.airsonic.player.controller.AdvancedSettingsController;
/** /**
* Command used in {@link AdvancedSettingsController}. * Command used in {@link AdvancedSettingsController}.

@ -1,6 +1,6 @@
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.spring.DataSourceConfigType; import org.airsonic.player.spring.DataSourceConfigType;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
/** /**
* Holds the name and description of an enum value. * Holds the name and description of an enum value.

@ -1,26 +1,26 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.GeneralSettingsController; import org.airsonic.player.controller.GeneralSettingsController;
import org.libresonic.player.domain.Theme; import org.airsonic.player.domain.Theme;
/** /**
* Command used in {@link GeneralSettingsController}. * Command used in {@link GeneralSettingsController}.

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.airsonic.player.controller.MusicFolderSettingsController;
import org.airsonic.player.domain.MusicFolder;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.controller.MusicFolderSettingsController;
import org.libresonic.player.domain.MusicFolder;
import java.io.File; import java.io.File;
import java.util.Date; import java.util.Date;

@ -1,25 +1,25 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.PasswordSettingsController; import org.airsonic.player.controller.PasswordSettingsController;
/** /**
* Command used in {@link PasswordSettingsController}. * Command used in {@link PasswordSettingsController}.

@ -1,26 +1,26 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.PersonalSettingsController; import org.airsonic.player.controller.PersonalSettingsController;
import org.libresonic.player.domain.*; import org.airsonic.player.domain.*;
import java.util.List; import java.util.List;

@ -1,29 +1,29 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.PlayerSettingsController; import org.airsonic.player.controller.PlayerSettingsController;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.domain.PlayerTechnology; import org.airsonic.player.domain.PlayerTechnology;
import org.libresonic.player.domain.TranscodeScheme; import org.airsonic.player.domain.TranscodeScheme;
import org.libresonic.player.domain.Transcoding; import org.airsonic.player.domain.Transcoding;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;

@ -1,25 +1,25 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.PodcastSettingsController; import org.airsonic.player.controller.PodcastSettingsController;
/** /**
* Command used in {@link PodcastSettingsController}. * Command used in {@link PodcastSettingsController}.

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.SearchController; import org.airsonic.player.controller.SearchController;
import org.libresonic.player.domain.MediaFile; import org.airsonic.player.domain.MediaFile;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import java.util.List; import java.util.List;

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.command; package org.airsonic.player.command;
import org.libresonic.player.controller.UserSettingsController; import org.airsonic.player.controller.UserSettingsController;
import org.libresonic.player.domain.MusicFolder; import org.airsonic.player.domain.MusicFolder;
import org.libresonic.player.domain.TranscodeScheme; import org.airsonic.player.domain.TranscodeScheme;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import java.util.List; import java.util.List;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.springframework.ui.context.Theme; import org.springframework.ui.context.Theme;
import org.springframework.web.servlet.support.RequestContextUtils; import org.springframework.web.servlet.support.RequestContextUtils;

@ -1,4 +1,4 @@
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.command.AdvancedSettingsCommand;
import org.airsonic.player.service.SettingsService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.command.AdvancedSettingsCommand;
import org.libresonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2013 (C) Sindre Mehus Based upon Subsonic, Copyright 2013 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.Avatar; import org.airsonic.player.domain.Avatar;
import org.libresonic.player.domain.AvatarScheme; import org.airsonic.player.domain.AvatarScheme;
import org.libresonic.player.domain.UserSettings; import org.airsonic.player.domain.UserSettings;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,34 +1,34 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.Avatar;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.libresonic.player.domain.Avatar;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.libresonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.service.MediaFileService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.service.MediaFileService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,4 +1,4 @@
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.springframework.util.AntPathMatcher; import org.springframework.util.AntPathMatcher;
import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.HandlerMapping;

@ -1,33 +1,33 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.dao.AlbumDao;
import org.airsonic.player.dao.ArtistDao;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.*;
import org.airsonic.player.service.metadata.JaudiotaggerParser;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.libresonic.player.dao.AlbumDao;
import org.libresonic.player.dao.ArtistDao;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.*;
import org.libresonic.player.service.metadata.JaudiotaggerParser;
import org.libresonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -292,7 +292,7 @@ public class CoverArtController implements LastModified {
} }
private synchronized File getImageCacheDirectory(int size) { private synchronized File getImageCacheDirectory(int size) {
File dir = new File(SettingsService.getLibresonicHome(), "thumbs"); File dir = new File(SettingsService.getAirsonicHome(), "thumbs");
dir = new File(dir, String.valueOf(size)); dir = new File(dir, String.valueOf(size));
if (!dir.exists()) { if (!dir.exists()) {
if (dir.mkdirs()) { if (dir.mkdirs()) {

@ -1,26 +1,26 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.dao.DaoHelper;
import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.lang.exception.ExceptionUtils;
import org.libresonic.player.dao.DaoHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.ColumnMapRowMapper; import org.springframework.jdbc.core.ColumnMapRowMapper;

@ -1,26 +1,26 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2013 (C) Sindre Mehus * Copyright 2013 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.service.SettingsService;
import org.airsonic.player.service.UPnPService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.service.SettingsService;
import org.libresonic.player.service.UPnPService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@ -74,7 +74,7 @@ public class DLNASettingsController {
String dlnaServerName = StringUtils.trimToNull(request.getParameter("dlnaServerName")); String dlnaServerName = StringUtils.trimToNull(request.getParameter("dlnaServerName"));
String dlnaBaseLANURL = StringUtils.trimToNull(request.getParameter("dlnaBaseLANURL")); String dlnaBaseLANURL = StringUtils.trimToNull(request.getParameter("dlnaBaseLANURL"));
if (dlnaServerName == null) { if (dlnaServerName == null) {
dlnaServerName = "Libresonic"; dlnaServerName = "Airsonic";
} }
upnpService.setMediaServerEnabled(false); upnpService.setMediaServerEnabled(false);

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.command.DatabaseSettingsCommand; import org.airsonic.player.command.DatabaseSettingsCommand;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.libresonic.player.spring.DataSourceConfigType; import org.airsonic.player.spring.DataSourceConfigType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,32 +1,32 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.*;
import org.airsonic.player.io.RangeOutputStream;
import org.airsonic.player.service.*;
import org.airsonic.player.util.FileUtil;
import org.airsonic.player.util.HttpRange;
import org.airsonic.player.util.Util;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.libresonic.player.domain.*;
import org.libresonic.player.io.RangeOutputStream;
import org.libresonic.player.service.*;
import org.libresonic.player.util.FileUtil;
import org.libresonic.player.util.HttpRange;
import org.libresonic.player.util.Util;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.metadata.JaudiotaggerParser;
import org.airsonic.player.service.metadata.MetaDataParser;
import org.airsonic.player.service.metadata.MetaDataParserFactory;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.metadata.JaudiotaggerParser;
import org.libresonic.player.service.metadata.MetaDataParser;
import org.libresonic.player.service.metadata.MetaDataParserFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,9 +1,9 @@
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.Playlist; import org.airsonic.player.domain.Playlist;
import org.libresonic.player.service.PlaylistService; import org.airsonic.player.service.PlaylistService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.util.StringUtil; import org.airsonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

@ -1,29 +1,29 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.DecodedJWT;
import org.airsonic.player.domain.*;
import org.airsonic.player.security.JWTAuthenticationToken;
import org.airsonic.player.service.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.libresonic.player.domain.*;
import org.libresonic.player.security.JWTAuthenticationToken;
import org.libresonic.player.service.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.command.GeneralSettingsCommand; import org.airsonic.player.command.GeneralSettingsCommand;
import org.libresonic.player.domain.Theme; import org.airsonic.player.domain.Theme;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,25 +1,25 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,33 +1,33 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.domain.Player;
import org.airsonic.player.service.JWTSecurityService;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.PlayerService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.util.Pair;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.domain.Player;
import org.libresonic.player.service.JWTSecurityService;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.PlayerService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.util.Pair;
import org.libresonic.player.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.airsonic.player.service.VersionService;
import org.apache.commons.io.input.ReversedLinesFileReader; import org.apache.commons.io.input.ReversedLinesFileReader;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.libresonic.player.service.VersionService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

@ -1,26 +1,26 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.*; import org.airsonic.player.domain.*;
import org.libresonic.player.service.*; import org.airsonic.player.service.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,33 +1,33 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.Playlist;
import org.airsonic.player.service.PlaylistService;
import org.airsonic.player.service.SecurityService;
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.Playlist;
import org.libresonic.player.service.PlaylistService;
import org.libresonic.player.service.SecurityService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,8 +1,8 @@
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.UserSettings; import org.airsonic.player.domain.UserSettings;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.InternetRadio;
import org.airsonic.player.service.SettingsService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.InternetRadio;
import org.libresonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,31 +1,31 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.eclipse.persistence.jaxb.JAXBContext; import org.eclipse.persistence.jaxb.JAXBContext;
import org.eclipse.persistence.jaxb.MarshallerProperties; import org.eclipse.persistence.jaxb.MarshallerProperties;
import org.jdom.Attribute; import org.jdom.Attribute;
import org.jdom.Document; import org.jdom.Document;
import org.jdom.input.SAXBuilder; import org.jdom.input.SAXBuilder;
import org.libresonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.subsonic.restapi.Error; import org.subsonic.restapi.Error;

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.*; import org.airsonic.player.domain.*;
import org.libresonic.player.service.*; import org.airsonic.player.service.*;
import org.libresonic.player.util.FileUtil; import org.airsonic.player.util.FileUtil;
import org.libresonic.player.util.StringUtil; import org.airsonic.player.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,9 +1,9 @@
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.libresonic.player.util.StringUtil; import org.airsonic.player.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,32 +1,32 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.MediaFile; import org.airsonic.player.domain.MediaFile;
import org.libresonic.player.domain.PlayQueue; import org.airsonic.player.domain.PlayQueue;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.service.JWTSecurityService; import org.airsonic.player.service.JWTSecurityService;
import org.libresonic.player.service.NetworkService; import org.airsonic.player.service.NetworkService;
import org.libresonic.player.service.PlayerService; import org.airsonic.player.service.PlayerService;
import org.libresonic.player.service.TranscodingService; import org.airsonic.player.service.TranscodingService;
import org.libresonic.player.util.StringUtil; import org.airsonic.player.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -111,7 +111,7 @@ public class M3UController {
out.print("\ufeff"); out.print("\ufeff");
} }
out.println("#EXTM3U"); out.println("#EXTM3U");
out.println("#EXTINF:-1,Libresonic"); out.println("#EXTINF:-1,Airsonic");
out.println(jwtSecurityService.addJWTToken(url)); out.println(jwtSecurityService.addJWTToken(url));
} }

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.*;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,28 +1,31 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.MusicFolder; import org.airsonic.player.domain.MusicFolder;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import org.libresonic.player.service.*; import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.PlayerService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,31 +1,31 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.command.MusicFolderSettingsCommand; import org.airsonic.player.command.MusicFolderSettingsCommand;
import org.libresonic.player.dao.AlbumDao; import org.airsonic.player.dao.AlbumDao;
import org.libresonic.player.dao.ArtistDao; import org.airsonic.player.dao.ArtistDao;
import org.libresonic.player.dao.MediaFileDao; import org.airsonic.player.dao.MediaFileDao;
import org.libresonic.player.domain.MusicFolder; import org.airsonic.player.domain.MusicFolder;
import org.libresonic.player.service.MediaScannerService; import org.airsonic.player.service.MediaScannerService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,4 +1,4 @@
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.MediaFile; import org.airsonic.player.domain.MediaFile;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.domain.TransferStatus; import org.airsonic.player.domain.TransferStatus;
import org.libresonic.player.service.MediaFileService; import org.airsonic.player.service.MediaFileService;
import org.libresonic.player.service.PlayerService; import org.airsonic.player.service.PlayerService;
import org.libresonic.player.service.StatusService; import org.airsonic.player.service.StatusService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.command.PasswordSettingsCommand; import org.airsonic.player.command.PasswordSettingsCommand;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.validator.PasswordSettingsValidator; import org.airsonic.player.validator.PasswordSettingsValidator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;

@ -1,29 +1,29 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.command.PersonalSettingsCommand;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.command.PersonalSettingsCommand;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import org.libresonic.player.domain.UserSettings; import org.airsonic.player.domain.UserSettings;
import org.libresonic.player.service.PlayerService; import org.airsonic.player.service.PlayerService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.command.PlayerSettingsCommand;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.PlayerService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.TranscodingService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.command.PlayerSettingsCommand;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.PlayerService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.TranscodingService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,32 +1,32 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.domain.Playlist; import org.airsonic.player.domain.Playlist;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import org.libresonic.player.domain.UserSettings; import org.airsonic.player.domain.UserSettings;
import org.libresonic.player.service.PlayerService; import org.airsonic.player.service.PlayerService;
import org.libresonic.player.service.PlaylistService; import org.airsonic.player.service.PlaylistService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,27 +1,27 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2014 (C) Sindre Mehus * Copyright 2014 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.Playlist; import org.airsonic.player.domain.Playlist;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import org.libresonic.player.service.PlaylistService; import org.airsonic.player.service.PlaylistService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,26 +1,26 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2015 (C) Sindre Mehus * Copyright 2015 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.service.PodcastService; import org.airsonic.player.service.PodcastService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,28 +1,28 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2015 (C) Sindre Mehus * Copyright 2015 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.PodcastChannel; import org.airsonic.player.domain.PodcastChannel;
import org.libresonic.player.domain.PodcastEpisode; import org.airsonic.player.domain.PodcastEpisode;
import org.libresonic.player.service.PodcastService; import org.airsonic.player.service.PodcastService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.MediaFile; import org.airsonic.player.domain.MediaFile;
import org.libresonic.player.domain.Playlist; import org.airsonic.player.domain.Playlist;
import org.libresonic.player.service.PlaylistService; import org.airsonic.player.service.PlaylistService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.libresonic.player.util.StringUtil; import org.airsonic.player.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,29 +1,29 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.PodcastEpisode;
import org.airsonic.player.domain.PodcastStatus;
import org.airsonic.player.service.PodcastService;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.PodcastEpisode;
import org.libresonic.player.domain.PodcastStatus;
import org.libresonic.player.service.PodcastService;
import org.libresonic.player.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.command.PodcastSettingsCommand; import org.airsonic.player.command.PodcastSettingsCommand;
import org.libresonic.player.service.PodcastService; import org.airsonic.player.service.PodcastService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,23 +1,23 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;

@ -1,47 +1,36 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.ajax.LyricsInfo;
import org.airsonic.player.ajax.LyricsService;
import org.airsonic.player.ajax.PlayQueueService;
import org.airsonic.player.command.UserSettingsCommand;
import org.airsonic.player.dao.*;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.*;
import org.airsonic.player.util.Pair;
import org.airsonic.player.util.StringUtil;
import org.airsonic.player.util.Util;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
import org.libresonic.player.ajax.LyricsInfo;
import org.libresonic.player.ajax.LyricsService;
import org.libresonic.player.ajax.PlayQueueService;
import org.libresonic.player.command.UserSettingsCommand;
import org.libresonic.player.dao.*;
import org.libresonic.player.domain.*;
import org.libresonic.player.domain.Artist;
import org.libresonic.player.domain.Bookmark;
import org.libresonic.player.domain.Genre;
import org.libresonic.player.domain.MusicFolder;
import org.libresonic.player.domain.PlayQueue;
import org.libresonic.player.domain.Playlist;
import org.libresonic.player.domain.PodcastChannel;
import org.libresonic.player.domain.PodcastEpisode;
import org.libresonic.player.domain.SearchResult;
import org.libresonic.player.domain.Share;
import org.libresonic.player.domain.User;
import org.libresonic.player.service.*;
import org.libresonic.player.util.Pair;
import org.libresonic.player.util.StringUtil;
import org.libresonic.player.util.Util;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -62,7 +51,7 @@ import javax.servlet.http.HttpServletResponse;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import static org.libresonic.player.security.RESTRequestParameterProcessingFilter.decrypt; import static org.airsonic.player.security.RESTRequestParameterProcessingFilter.decrypt;
import static org.springframework.web.bind.ServletRequestUtils.*; import static org.springframework.web.bind.ServletRequestUtils.*;
/** /**
@ -141,7 +130,7 @@ public class RESTController {
@Autowired @Autowired
private MediaScannerService mediaScannerService; private MediaScannerService mediaScannerService;
private final Map<BookmarkKey, Bookmark> bookmarkCache = new ConcurrentHashMap<BookmarkKey, Bookmark>(); private final Map<BookmarkKey, org.airsonic.player.domain.Bookmark> bookmarkCache = new ConcurrentHashMap<BookmarkKey, org.airsonic.player.domain.Bookmark>();
private final JAXBWriter jaxbWriter = new JAXBWriter(); private final JAXBWriter jaxbWriter = new JAXBWriter();
private static final String NOT_YET_IMPLEMENTED = "Not yet implemented"; private static final String NOT_YET_IMPLEMENTED = "Not yet implemented";
@ -154,7 +143,7 @@ public class RESTController {
private void refreshBookmarkCache() { private void refreshBookmarkCache() {
bookmarkCache.clear(); bookmarkCache.clear();
for (Bookmark bookmark : bookmarkDao.getBookmarks()) { for (org.airsonic.player.domain.Bookmark bookmark : bookmarkDao.getBookmarks()) {
bookmarkCache.put(BookmarkKey.forBookmark(bookmark), bookmark); bookmarkCache.put(BookmarkKey.forBookmark(bookmark), bookmark);
} }
} }
@ -179,7 +168,7 @@ public class RESTController {
License license = new License(); License license = new License();
license.setEmail("libresonic@github.com"); license.setEmail("airsonic@github.com");
license.setValid(true); license.setValid(true);
Date neverExpireDate = new Date(Long.MAX_VALUE); Date neverExpireDate = new Date(Long.MAX_VALUE);
license.setLicenseExpires(jaxbWriter.convertDate(neverExpireDate)); license.setLicenseExpires(jaxbWriter.convertDate(neverExpireDate));
@ -197,7 +186,7 @@ public class RESTController {
MusicFolders musicFolders = new MusicFolders(); MusicFolders musicFolders = new MusicFolders();
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
for (MusicFolder musicFolder : settingsService.getMusicFoldersForUser(username)) { for (org.airsonic.player.domain.MusicFolder musicFolder : settingsService.getMusicFoldersForUser(username)) {
org.subsonic.restapi.MusicFolder mf = new org.subsonic.restapi.MusicFolder(); org.subsonic.restapi.MusicFolder mf = new org.subsonic.restapi.MusicFolder();
mf.setId(musicFolder.getId()); mf.setId(musicFolder.getId());
mf.setName(musicFolder.getName()); mf.setName(musicFolder.getName());
@ -226,10 +215,10 @@ public class RESTController {
indexes.setLastModified(lastModified); indexes.setLastModified(lastModified);
indexes.setIgnoredArticles(settingsService.getIgnoredArticles()); indexes.setIgnoredArticles(settingsService.getIgnoredArticles());
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
if (musicFolderId != null) { if (musicFolderId != null) {
for (MusicFolder musicFolder : musicFolders) { for (org.airsonic.player.domain.MusicFolder musicFolder : musicFolders) {
if (musicFolderId.equals(musicFolder.getId())) { if (musicFolderId.equals(musicFolder.getId())) {
musicFolders = Collections.singletonList(musicFolder); musicFolders = Collections.singletonList(musicFolder);
break; break;
@ -283,7 +272,7 @@ public class RESTController {
request = wrapRequest(request); request = wrapRequest(request);
org.subsonic.restapi.Genres genres = new org.subsonic.restapi.Genres(); org.subsonic.restapi.Genres genres = new org.subsonic.restapi.Genres();
for (Genre genre : mediaFileDao.getGenres(false)) { for (org.airsonic.player.domain.Genre genre : mediaFileDao.getGenres(false)) {
org.subsonic.restapi.Genre g = new org.subsonic.restapi.Genre(); org.subsonic.restapi.Genre g = new org.subsonic.restapi.Genre();
genres.getGenre().add(g); genres.getGenre().add(g);
g.setContent(genre.getName()); g.setContent(genre.getName());
@ -308,7 +297,7 @@ public class RESTController {
int count = getIntParameter(request, "count", 10); int count = getIntParameter(request, "count", 10);
count = Math.max(0, Math.min(count, 500)); count = Math.max(0, Math.min(count, 500));
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
for (MediaFile mediaFile : mediaFileDao.getSongsByGenre(genre, offset, count, musicFolders)) { for (MediaFile mediaFile : mediaFileDao.getSongsByGenre(genre, offset, count, musicFolders)) {
songs.getSong().add(createJaxbChild(player, mediaFile, username)); songs.getSong().add(createJaxbChild(player, mediaFile, username));
@ -325,9 +314,9 @@ public class RESTController {
ArtistsID3 result = new ArtistsID3(); ArtistsID3 result = new ArtistsID3();
result.setIgnoredArticles(settingsService.getIgnoredArticles()); result.setIgnoredArticles(settingsService.getIgnoredArticles());
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
List<Artist> artists = artistDao.getAlphabetialArtists(0, Integer.MAX_VALUE, musicFolders); List<org.airsonic.player.domain.Artist> artists = artistDao.getAlphabetialArtists(0, Integer.MAX_VALUE, musicFolders);
SortedMap<MusicIndex, List<MusicIndex.SortableArtistWithArtist>> indexedArtists = musicIndexService.getIndexedArtists(artists); SortedMap<MusicIndex, List<MusicIndex.SortableArtistWithArtist>> indexedArtists = musicIndexService.getIndexedArtists(artists);
for (Map.Entry<MusicIndex, List<MusicIndex.SortableArtistWithArtist>> entry : indexedArtists.entrySet()) { for (Map.Entry<MusicIndex, List<MusicIndex.SortableArtistWithArtist>> entry : indexedArtists.entrySet()) {
IndexID3 index = new IndexID3(); IndexID3 index = new IndexID3();
@ -358,7 +347,7 @@ public class RESTController {
error(request, response, ErrorCode.NOT_FOUND, "Media file not found."); error(request, response, ErrorCode.NOT_FOUND, "Media file not found.");
return; return;
} }
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
List<MediaFile> similarSongs = lastFmService.getSimilarSongs(mediaFile, count, musicFolders); List<MediaFile> similarSongs = lastFmService.getSimilarSongs(mediaFile, count, musicFolders);
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
for (MediaFile similarSong : similarSongs) { for (MediaFile similarSong : similarSongs) {
@ -380,13 +369,13 @@ public class RESTController {
SimilarSongs2 result = new SimilarSongs2(); SimilarSongs2 result = new SimilarSongs2();
Artist artist = artistDao.getArtist(id); org.airsonic.player.domain.Artist artist = artistDao.getArtist(id);
if (artist == null) { if (artist == null) {
error(request, response, ErrorCode.NOT_FOUND, "Artist not found."); error(request, response, ErrorCode.NOT_FOUND, "Artist not found.");
return; return;
} }
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
List<MediaFile> similarSongs = lastFmService.getSimilarSongs(artist, count, musicFolders); List<MediaFile> similarSongs = lastFmService.getSimilarSongs(artist, count, musicFolders);
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
for (MediaFile similarSong : similarSongs) { for (MediaFile similarSong : similarSongs) {
@ -408,7 +397,7 @@ public class RESTController {
TopSongs result = new TopSongs(); TopSongs result = new TopSongs();
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
List<MediaFile> topSongs = lastFmService.getTopSongs(artist, count, musicFolders); List<MediaFile> topSongs = lastFmService.getTopSongs(artist, count, musicFolders);
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
for (MediaFile topSong : topSongs) { for (MediaFile topSong : topSongs) {
@ -436,7 +425,7 @@ public class RESTController {
error(request, response, ErrorCode.NOT_FOUND, "Media file not found."); error(request, response, ErrorCode.NOT_FOUND, "Media file not found.");
return; return;
} }
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
List<MediaFile> similarArtists = lastFmService.getSimilarArtists(mediaFile, count, includeNotPresent, musicFolders); List<MediaFile> similarArtists = lastFmService.getSimilarArtists(mediaFile, count, includeNotPresent, musicFolders);
for (MediaFile similarArtist : similarArtists) { for (MediaFile similarArtist : similarArtists) {
result.getSimilarArtist().add(createJaxbArtist(similarArtist, username)); result.getSimilarArtist().add(createJaxbArtist(similarArtist, username));
@ -467,15 +456,15 @@ public class RESTController {
ArtistInfo2 result = new ArtistInfo2(); ArtistInfo2 result = new ArtistInfo2();
Artist artist = artistDao.getArtist(id); org.airsonic.player.domain.Artist artist = artistDao.getArtist(id);
if (artist == null) { if (artist == null) {
error(request, response, ErrorCode.NOT_FOUND, "Artist not found."); error(request, response, ErrorCode.NOT_FOUND, "Artist not found.");
return; return;
} }
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
List<Artist> similarArtists = lastFmService.getSimilarArtists(artist, count, includeNotPresent, musicFolders); List<org.airsonic.player.domain.Artist> similarArtists = lastFmService.getSimilarArtists(artist, count, includeNotPresent, musicFolders);
for (Artist similarArtist : similarArtists) { for (org.airsonic.player.domain.Artist similarArtist : similarArtists) {
result.getSimilarArtist().add(createJaxbArtist(new ArtistID3(), similarArtist, username)); result.getSimilarArtist().add(createJaxbArtist(new ArtistID3(), similarArtist, username));
} }
ArtistBio artistBio = lastFmService.getArtistBio(artist); ArtistBio artistBio = lastFmService.getArtistBio(artist);
@ -493,7 +482,7 @@ public class RESTController {
jaxbWriter.writeResponse(request, response, res); jaxbWriter.writeResponse(request, response, res);
} }
private <T extends ArtistID3> T createJaxbArtist(T jaxbArtist, Artist artist, String username) { private <T extends ArtistID3> T createJaxbArtist(T jaxbArtist, org.airsonic.player.domain.Artist artist, String username) {
jaxbArtist.setId(String.valueOf(artist.getId())); jaxbArtist.setId(String.valueOf(artist.getId()));
jaxbArtist.setName(artist.getName()); jaxbArtist.setName(artist.getName());
jaxbArtist.setStarred(jaxbWriter.convertDate(mediaFileDao.getMediaFileStarredDate(artist.getId(), username))); jaxbArtist.setStarred(jaxbWriter.convertDate(mediaFileDao.getMediaFileStarredDate(artist.getId(), username)));
@ -519,13 +508,13 @@ public class RESTController {
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
int id = getRequiredIntParameter(request, "id"); int id = getRequiredIntParameter(request, "id");
Artist artist = artistDao.getArtist(id); org.airsonic.player.domain.Artist artist = artistDao.getArtist(id);
if (artist == null) { if (artist == null) {
error(request, response, ErrorCode.NOT_FOUND, "Artist not found."); error(request, response, ErrorCode.NOT_FOUND, "Artist not found.");
return; return;
} }
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
ArtistWithAlbumsID3 result = createJaxbArtist(new ArtistWithAlbumsID3(), artist, username); ArtistWithAlbumsID3 result = createJaxbArtist(new ArtistWithAlbumsID3(), artist, username);
for (Album album : albumDao.getAlbumsForArtist(artist.getName(), musicFolders)) { for (Album album : albumDao.getAlbumsForArtist(artist.getName(), musicFolders)) {
result.getAlbum().add(createJaxbAlbum(new AlbumID3(), album, username)); result.getAlbum().add(createJaxbAlbum(new AlbumID3(), album, username));
@ -541,7 +530,7 @@ public class RESTController {
jaxbAlbum.setName(album.getName()); jaxbAlbum.setName(album.getName());
if (album.getArtist() != null) { if (album.getArtist() != null) {
jaxbAlbum.setArtist(album.getArtist()); jaxbAlbum.setArtist(album.getArtist());
Artist artist = artistDao.getArtist(album.getArtist()); org.airsonic.player.domain.Artist artist = artistDao.getArtist(album.getArtist());
if (artist != null) { if (artist != null) {
jaxbAlbum.setArtistId(String.valueOf(artist.getId())); jaxbAlbum.setArtistId(String.valueOf(artist.getId()));
} }
@ -558,7 +547,7 @@ public class RESTController {
return jaxbAlbum; return jaxbAlbum;
} }
private <T extends org.subsonic.restapi.Playlist> T createJaxbPlaylist(T jaxbPlaylist, Playlist playlist) { private <T extends org.subsonic.restapi.Playlist> T createJaxbPlaylist(T jaxbPlaylist, org.airsonic.player.domain.Playlist playlist) {
jaxbPlaylist.setId(String.valueOf(playlist.getId())); jaxbPlaylist.setId(String.valueOf(playlist.getId()));
jaxbPlaylist.setName(playlist.getName()); jaxbPlaylist.setName(playlist.getName());
jaxbPlaylist.setComment(playlist.getComment()); jaxbPlaylist.setComment(playlist.getComment());
@ -695,9 +684,9 @@ public class RESTController {
criteria.setQuery(query.toString().trim()); criteria.setQuery(query.toString().trim());
criteria.setCount(getIntParameter(request, "count", 20)); criteria.setCount(getIntParameter(request, "count", 20));
criteria.setOffset(getIntParameter(request, "offset", 0)); criteria.setOffset(getIntParameter(request, "offset", 0));
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
SearchResult result = searchService.search(criteria, musicFolders, SearchService.IndexType.SONG); org.airsonic.player.domain.SearchResult result = searchService.search(criteria, musicFolders, SearchService.IndexType.SONG);
org.subsonic.restapi.SearchResult searchResult = new org.subsonic.restapi.SearchResult(); org.subsonic.restapi.SearchResult searchResult = new org.subsonic.restapi.SearchResult();
searchResult.setOffset(result.getOffset()); searchResult.setOffset(result.getOffset());
searchResult.setTotalHits(result.getTotalHits()); searchResult.setTotalHits(result.getTotalHits());
@ -716,7 +705,7 @@ public class RESTController {
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
SearchResult2 searchResult = new SearchResult2(); SearchResult2 searchResult = new SearchResult2();
@ -725,21 +714,21 @@ public class RESTController {
criteria.setQuery(StringUtils.trimToEmpty(query)); criteria.setQuery(StringUtils.trimToEmpty(query));
criteria.setCount(getIntParameter(request, "artistCount", 20)); criteria.setCount(getIntParameter(request, "artistCount", 20));
criteria.setOffset(getIntParameter(request, "artistOffset", 0)); criteria.setOffset(getIntParameter(request, "artistOffset", 0));
SearchResult artists = searchService.search(criteria, musicFolders, SearchService.IndexType.ARTIST); org.airsonic.player.domain.SearchResult artists = searchService.search(criteria, musicFolders, SearchService.IndexType.ARTIST);
for (MediaFile mediaFile : artists.getMediaFiles()) { for (MediaFile mediaFile : artists.getMediaFiles()) {
searchResult.getArtist().add(createJaxbArtist(mediaFile, username)); searchResult.getArtist().add(createJaxbArtist(mediaFile, username));
} }
criteria.setCount(getIntParameter(request, "albumCount", 20)); criteria.setCount(getIntParameter(request, "albumCount", 20));
criteria.setOffset(getIntParameter(request, "albumOffset", 0)); criteria.setOffset(getIntParameter(request, "albumOffset", 0));
SearchResult albums = searchService.search(criteria, musicFolders, SearchService.IndexType.ALBUM); org.airsonic.player.domain.SearchResult albums = searchService.search(criteria, musicFolders, SearchService.IndexType.ALBUM);
for (MediaFile mediaFile : albums.getMediaFiles()) { for (MediaFile mediaFile : albums.getMediaFiles()) {
searchResult.getAlbum().add(createJaxbChild(player, mediaFile, username)); searchResult.getAlbum().add(createJaxbChild(player, mediaFile, username));
} }
criteria.setCount(getIntParameter(request, "songCount", 20)); criteria.setCount(getIntParameter(request, "songCount", 20));
criteria.setOffset(getIntParameter(request, "songOffset", 0)); criteria.setOffset(getIntParameter(request, "songOffset", 0));
SearchResult songs = searchService.search(criteria, musicFolders, SearchService.IndexType.SONG); org.airsonic.player.domain.SearchResult songs = searchService.search(criteria, musicFolders, SearchService.IndexType.SONG);
for (MediaFile mediaFile : songs.getMediaFiles()) { for (MediaFile mediaFile : songs.getMediaFiles()) {
searchResult.getSong().add(createJaxbChild(player, mediaFile, username)); searchResult.getSong().add(createJaxbChild(player, mediaFile, username));
} }
@ -755,7 +744,7 @@ public class RESTController {
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
SearchResult3 searchResult = new SearchResult3(); SearchResult3 searchResult = new SearchResult3();
@ -764,8 +753,8 @@ public class RESTController {
criteria.setQuery(StringUtils.trimToEmpty(query)); criteria.setQuery(StringUtils.trimToEmpty(query));
criteria.setCount(getIntParameter(request, "artistCount", 20)); criteria.setCount(getIntParameter(request, "artistCount", 20));
criteria.setOffset(getIntParameter(request, "artistOffset", 0)); criteria.setOffset(getIntParameter(request, "artistOffset", 0));
SearchResult result = searchService.search(criteria, musicFolders, SearchService.IndexType.ARTIST_ID3); org.airsonic.player.domain.SearchResult result = searchService.search(criteria, musicFolders, SearchService.IndexType.ARTIST_ID3);
for (Artist artist : result.getArtists()) { for (org.airsonic.player.domain.Artist artist : result.getArtists()) {
searchResult.getArtist().add(createJaxbArtist(new ArtistID3(), artist, username)); searchResult.getArtist().add(createJaxbArtist(new ArtistID3(), artist, username));
} }
@ -792,7 +781,7 @@ public class RESTController {
public void getPlaylists(HttpServletRequest request, HttpServletResponse response) throws Exception { public void getPlaylists(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
String authenticatedUsername = user.getUsername(); String authenticatedUsername = user.getUsername();
String requestedUsername = request.getParameter("username"); String requestedUsername = request.getParameter("username");
@ -805,7 +794,7 @@ public class RESTController {
Playlists result = new Playlists(); Playlists result = new Playlists();
for (Playlist playlist : playlistService.getReadablePlaylistsForUser(requestedUsername)) { for (org.airsonic.player.domain.Playlist playlist : playlistService.getReadablePlaylistsForUser(requestedUsername)) {
result.getPlaylist().add(createJaxbPlaylist(new org.subsonic.restapi.Playlist(), playlist)); result.getPlaylist().add(createJaxbPlaylist(new org.subsonic.restapi.Playlist(), playlist));
} }
@ -822,7 +811,7 @@ public class RESTController {
int id = getRequiredIntParameter(request, "id"); int id = getRequiredIntParameter(request, "id");
Playlist playlist = playlistService.getPlaylist(id); org.airsonic.player.domain.Playlist playlist = playlistService.getPlaylist(id);
if (playlist == null) { if (playlist == null) {
error(request, response, ErrorCode.NOT_FOUND, "Playlist not found: " + id); error(request, response, ErrorCode.NOT_FOUND, "Playlist not found: " + id);
return; return;
@ -847,7 +836,7 @@ public class RESTController {
public void jukeboxControl(HttpServletRequest request, HttpServletResponse response) throws Exception { public void jukeboxControl(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request, true); request = wrapRequest(request, true);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isJukeboxRole()) { if (!user.isJukeboxRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to use jukebox."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to use jukebox.");
return; return;
@ -891,11 +880,11 @@ public class RESTController {
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
Player jukeboxPlayer = jukeboxService.getPlayer(); Player jukeboxPlayer = jukeboxService.getPlayer();
boolean controlsJukebox = jukeboxPlayer != null && jukeboxPlayer.getId().equals(player.getId()); boolean controlsJukebox = jukeboxPlayer != null && jukeboxPlayer.getId().equals(player.getId());
PlayQueue playQueue = player.getPlayQueue(); org.airsonic.player.domain.PlayQueue playQueue = player.getPlayQueue();
int currentIndex = controlsJukebox && !playQueue.isEmpty() ? playQueue.getIndex() : -1; int currentIndex = controlsJukebox && !playQueue.isEmpty() ? playQueue.getIndex() : -1;
boolean playing = controlsJukebox && !playQueue.isEmpty() && playQueue.getStatus() == PlayQueue.Status.PLAYING; boolean playing = controlsJukebox && !playQueue.isEmpty() && playQueue.getStatus() == org.airsonic.player.domain.PlayQueue.Status.PLAYING;
float gain = jukeboxService.getGain(); float gain = jukeboxService.getGain();
int position = controlsJukebox && !playQueue.isEmpty() ? jukeboxService.getPosition() : 0; int position = controlsJukebox && !playQueue.isEmpty() ? jukeboxService.getPosition() : 0;
@ -934,7 +923,7 @@ public class RESTController {
return; return;
} }
Playlist playlist; org.airsonic.player.domain.Playlist playlist;
if (playlistId != null) { if (playlistId != null) {
playlist = playlistService.getPlaylist(playlistId); playlist = playlistService.getPlaylist(playlistId);
if (playlist == null) { if (playlist == null) {
@ -946,7 +935,7 @@ public class RESTController {
return; return;
} }
} else { } else {
playlist = new Playlist(); playlist = new org.airsonic.player.domain.Playlist();
playlist.setName(name); playlist.setName(name);
playlist.setCreated(new Date()); playlist.setCreated(new Date());
playlist.setChanged(new Date()); playlist.setChanged(new Date());
@ -973,7 +962,7 @@ public class RESTController {
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
int id = getRequiredIntParameter(request, "playlistId"); int id = getRequiredIntParameter(request, "playlistId");
Playlist playlist = playlistService.getPlaylist(id); org.airsonic.player.domain.Playlist playlist = playlistService.getPlaylist(id);
if (playlist == null) { if (playlist == null) {
error(request, response, ErrorCode.NOT_FOUND, "Playlist not found: " + id); error(request, response, ErrorCode.NOT_FOUND, "Playlist not found: " + id);
return; return;
@ -1041,7 +1030,7 @@ public class RESTController {
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
int id = getRequiredIntParameter(request, "id"); int id = getRequiredIntParameter(request, "id");
Playlist playlist = playlistService.getPlaylist(id); org.airsonic.player.domain.Playlist playlist = playlistService.getPlaylist(id);
if (playlist == null) { if (playlist == null) {
error(request, response, ErrorCode.NOT_FOUND, "Playlist not found: " + id); error(request, response, ErrorCode.NOT_FOUND, "Playlist not found: " + id);
return; return;
@ -1065,7 +1054,7 @@ public class RESTController {
int offset = getIntParameter(request, "offset", 0); int offset = getIntParameter(request, "offset", 0);
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
size = Math.max(0, Math.min(size, 500)); size = Math.max(0, Math.min(size, 500));
String type = getRequiredStringParameter(request, "type"); String type = getRequiredStringParameter(request, "type");
@ -1116,7 +1105,7 @@ public class RESTController {
String type = getRequiredStringParameter(request, "type"); String type = getRequiredStringParameter(request, "type");
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
List<Album> albums; List<Album> albums;
if ("frequent".equals(type)) { if ("frequent".equals(type)) {
@ -1162,7 +1151,7 @@ public class RESTController {
Integer fromYear = getIntParameter(request, "fromYear"); Integer fromYear = getIntParameter(request, "fromYear");
Integer toYear = getIntParameter(request, "toYear"); Integer toYear = getIntParameter(request, "toYear");
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
RandomSearchCriteria criteria = new RandomSearchCriteria(size, genre, fromYear, toYear, musicFolders); RandomSearchCriteria criteria = new RandomSearchCriteria(size, genre, fromYear, toYear, musicFolders);
Songs result = new Songs(); Songs result = new Songs();
@ -1182,7 +1171,7 @@ public class RESTController {
int size = getIntParameter(request, "size", Integer.MAX_VALUE); int size = getIntParameter(request, "size", Integer.MAX_VALUE);
int offset = getIntParameter(request, "offset", 0); int offset = getIntParameter(request, "offset", 0);
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
Videos result = new Videos(); Videos result = new Videos();
for (MediaFile mediaFile : mediaFileDao.getVideos(size, offset, musicFolders)) { for (MediaFile mediaFile : mediaFileDao.getVideos(size, offset, musicFolders)) {
@ -1267,7 +1256,7 @@ public class RESTController {
child.setIsVideo(mediaFile.isVideo()); child.setIsVideo(mediaFile.isVideo());
child.setPath(getRelativePath(mediaFile)); child.setPath(getRelativePath(mediaFile));
Bookmark bookmark = bookmarkCache.get(new BookmarkKey(username, mediaFile.getId())); org.airsonic.player.domain.Bookmark bookmark = bookmarkCache.get(new BookmarkKey(username, mediaFile.getId()));
if (bookmark != null) { if (bookmark != null) {
child.setBookmarkPosition(bookmark.getPositionMillis()); child.setBookmarkPosition(bookmark.getPositionMillis());
} }
@ -1279,7 +1268,7 @@ public class RESTController {
} }
} }
if (mediaFile.getArtist() != null) { if (mediaFile.getArtist() != null) {
Artist artist = artistDao.getArtist(mediaFile.getArtist()); org.airsonic.player.domain.Artist artist = artistDao.getArtist(mediaFile.getArtist());
if (artist != null) { if (artist != null) {
child.setArtistId(String.valueOf(artist.getId())); child.setArtistId(String.valueOf(artist.getId()));
} }
@ -1329,8 +1318,8 @@ public class RESTController {
String filePathLower = filePath.toLowerCase(); String filePathLower = filePath.toLowerCase();
List<MusicFolder> musicFolders = settingsService.getAllMusicFolders(false, true); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getAllMusicFolders(false, true);
for (MusicFolder musicFolder : musicFolders) { for (org.airsonic.player.domain.MusicFolder musicFolder : musicFolders) {
String folderPath = musicFolder.getPath().getPath(); String folderPath = musicFolder.getPath().getPath();
folderPath = folderPath.replace('\\', '/'); folderPath = folderPath.replace('\\', '/');
String folderPathLower = folderPath.toLowerCase(); String folderPathLower = folderPath.toLowerCase();
@ -1350,7 +1339,7 @@ public class RESTController {
@RequestMapping(value = "/download") @RequestMapping(value = "/download")
public ModelAndView download(HttpServletRequest request, HttpServletResponse response) throws Exception { public ModelAndView download(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isDownloadRole()) { if (!user.isDownloadRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to download files."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to download files.");
return null; return null;
@ -1374,7 +1363,7 @@ public class RESTController {
@RequestMapping(value = "/stream") @RequestMapping(value = "/stream")
public ModelAndView stream(HttpServletRequest request, HttpServletResponse response) throws Exception { public ModelAndView stream(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isStreamRole()) { if (!user.isStreamRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to play files."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to play files.");
return null; return null;
@ -1387,7 +1376,7 @@ public class RESTController {
@RequestMapping(value = "/hls") @RequestMapping(value = "/hls")
public ModelAndView hls(HttpServletRequest request, HttpServletResponse response) throws Exception { public ModelAndView hls(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isStreamRole()) { if (!user.isStreamRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to play files."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to play files.");
return null; return null;
@ -1478,7 +1467,7 @@ public class RESTController {
} }
} }
for (int artistId : getIntParameters(request, "artistId")) { for (int artistId : getIntParameters(request, "artistId")) {
Artist artist = artistDao.getArtist(artistId); org.airsonic.player.domain.Artist artist = artistDao.getArtist(artistId);
if (artist == null) { if (artist == null) {
error(request, response, ErrorCode.NOT_FOUND, "Artist not found: " + artistId); error(request, response, ErrorCode.NOT_FOUND, "Artist not found: " + artistId);
return; return;
@ -1499,7 +1488,7 @@ public class RESTController {
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
Starred result = new Starred(); Starred result = new Starred();
for (MediaFile artist : mediaFileDao.getStarredDirectories(0, Integer.MAX_VALUE, username, musicFolders)) { for (MediaFile artist : mediaFileDao.getStarredDirectories(0, Integer.MAX_VALUE, username, musicFolders)) {
@ -1522,10 +1511,10 @@ public class RESTController {
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
Integer musicFolderId = getIntParameter(request, "musicFolderId"); Integer musicFolderId = getIntParameter(request, "musicFolderId");
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username, musicFolderId);
Starred2 result = new Starred2(); Starred2 result = new Starred2();
for (Artist artist : artistDao.getStarredArtists(0, Integer.MAX_VALUE, username, musicFolders)) { for (org.airsonic.player.domain.Artist artist : artistDao.getStarredArtists(0, Integer.MAX_VALUE, username, musicFolders)) {
result.getArtist().add(createJaxbArtist(new ArtistID3(), artist, username)); result.getArtist().add(createJaxbArtist(new ArtistID3(), artist, username));
} }
for (Album album : albumDao.getStarredAlbums(0, Integer.MAX_VALUE, username, musicFolders)) { for (Album album : albumDao.getStarredAlbums(0, Integer.MAX_VALUE, username, musicFolders)) {
@ -1549,7 +1538,7 @@ public class RESTController {
Podcasts result = new Podcasts(); Podcasts result = new Podcasts();
for (PodcastChannel channel : podcastService.getAllChannels()) { for (org.airsonic.player.domain.PodcastChannel channel : podcastService.getAllChannels()) {
if (channelId == null || channelId.equals(channel.getId())) { if (channelId == null || channelId.equals(channel.getId())) {
org.subsonic.restapi.PodcastChannel c = new org.subsonic.restapi.PodcastChannel(); org.subsonic.restapi.PodcastChannel c = new org.subsonic.restapi.PodcastChannel();
@ -1565,8 +1554,8 @@ public class RESTController {
c.setErrorMessage(channel.getErrorMessage()); c.setErrorMessage(channel.getErrorMessage());
if (includeEpisodes) { if (includeEpisodes) {
List<PodcastEpisode> episodes = podcastService.getEpisodes(channel.getId()); List<org.airsonic.player.domain.PodcastEpisode> episodes = podcastService.getEpisodes(channel.getId());
for (PodcastEpisode episode : episodes) { for (org.airsonic.player.domain.PodcastEpisode episode : episodes) {
c.getEpisode().add(createJaxbPodcastEpisode(player, username, episode)); c.getEpisode().add(createJaxbPodcastEpisode(player, username, episode));
} }
} }
@ -1586,7 +1575,7 @@ public class RESTController {
int count = getIntParameter(request, "count", 20); int count = getIntParameter(request, "count", 20);
NewestPodcasts result = new NewestPodcasts(); NewestPodcasts result = new NewestPodcasts();
for (PodcastEpisode episode : podcastService.getNewestEpisodes(count)) { for (org.airsonic.player.domain.PodcastEpisode episode : podcastService.getNewestEpisodes(count)) {
result.getEpisode().add(createJaxbPodcastEpisode(player, username, episode)); result.getEpisode().add(createJaxbPodcastEpisode(player, username, episode));
} }
@ -1595,7 +1584,7 @@ public class RESTController {
jaxbWriter.writeResponse(request, response, res); jaxbWriter.writeResponse(request, response, res);
} }
private org.subsonic.restapi.PodcastEpisode createJaxbPodcastEpisode(Player player, String username, PodcastEpisode episode) { private org.subsonic.restapi.PodcastEpisode createJaxbPodcastEpisode(Player player, String username, org.airsonic.player.domain.PodcastEpisode episode) {
org.subsonic.restapi.PodcastEpisode e = new org.subsonic.restapi.PodcastEpisode(); org.subsonic.restapi.PodcastEpisode e = new org.subsonic.restapi.PodcastEpisode();
String path = episode.getPath(); String path = episode.getPath();
@ -1617,7 +1606,7 @@ public class RESTController {
@RequestMapping(value = "/refreshPodcasts") @RequestMapping(value = "/refreshPodcasts")
public void refreshPodcasts(HttpServletRequest request, HttpServletResponse response) throws Exception { public void refreshPodcasts(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isPodcastRole()) { if (!user.isPodcastRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts.");
return; return;
@ -1629,7 +1618,7 @@ public class RESTController {
@RequestMapping(value = "/createPodcastChannel") @RequestMapping(value = "/createPodcastChannel")
public void createPodcastChannel(HttpServletRequest request, HttpServletResponse response) throws Exception { public void createPodcastChannel(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isPodcastRole()) { if (!user.isPodcastRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts.");
return; return;
@ -1643,7 +1632,7 @@ public class RESTController {
@RequestMapping(value = "/deletePodcastChannel") @RequestMapping(value = "/deletePodcastChannel")
public void deletePodcastChannel(HttpServletRequest request, HttpServletResponse response) throws Exception { public void deletePodcastChannel(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isPodcastRole()) { if (!user.isPodcastRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts.");
return; return;
@ -1657,7 +1646,7 @@ public class RESTController {
@RequestMapping(value = "/deletePodcastEpisode") @RequestMapping(value = "/deletePodcastEpisode")
public void deletePodcastEpisode(HttpServletRequest request, HttpServletResponse response) throws Exception { public void deletePodcastEpisode(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isPodcastRole()) { if (!user.isPodcastRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts.");
return; return;
@ -1671,14 +1660,14 @@ public class RESTController {
@RequestMapping(value = "/downloadPodcastEpisode") @RequestMapping(value = "/downloadPodcastEpisode")
public void downloadPodcastEpisode(HttpServletRequest request, HttpServletResponse response) throws Exception { public void downloadPodcastEpisode(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isPodcastRole()) { if (!user.isPodcastRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to administrate podcasts.");
return; return;
} }
int id = getRequiredIntParameter(request, "id"); int id = getRequiredIntParameter(request, "id");
PodcastEpisode episode = podcastService.getEpisode(id, true); org.airsonic.player.domain.PodcastEpisode episode = podcastService.getEpisode(id, true);
if (episode == null) { if (episode == null) {
error(request, response, ErrorCode.NOT_FOUND, "Podcast episode " + id + " not found."); error(request, response, ErrorCode.NOT_FOUND, "Podcast episode " + id + " not found.");
return; return;
@ -1713,7 +1702,7 @@ public class RESTController {
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
Bookmarks result = new Bookmarks(); Bookmarks result = new Bookmarks();
for (Bookmark bookmark : bookmarkDao.getBookmarks(username)) { for (org.airsonic.player.domain.Bookmark bookmark : bookmarkDao.getBookmarks(username)) {
org.subsonic.restapi.Bookmark b = new org.subsonic.restapi.Bookmark(); org.subsonic.restapi.Bookmark b = new org.subsonic.restapi.Bookmark();
result.getBookmark().add(b); result.getBookmark().add(b);
b.setPosition(bookmark.getPositionMillis()); b.setPosition(bookmark.getPositionMillis());
@ -1740,7 +1729,7 @@ public class RESTController {
String comment = request.getParameter("comment"); String comment = request.getParameter("comment");
Date now = new Date(); Date now = new Date();
Bookmark bookmark = new Bookmark(0, mediaFileId, position, username, comment, now, now); org.airsonic.player.domain.Bookmark bookmark = new org.airsonic.player.domain.Bookmark(0, mediaFileId, position, username, comment, now, now);
bookmarkDao.createOrUpdateBookmark(bookmark); bookmarkDao.createOrUpdateBookmark(bookmark);
refreshBookmarkCache(); refreshBookmarkCache();
writeEmptyResponse(request, response); writeEmptyResponse(request, response);
@ -1814,11 +1803,11 @@ public class RESTController {
request = wrapRequest(request); request = wrapRequest(request);
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
Shares result = new Shares(); Shares result = new Shares();
for (Share share : shareService.getSharesForUser(user)) { for (org.airsonic.player.domain.Share share : shareService.getSharesForUser(user)) {
org.subsonic.restapi.Share s = createJaxbShare(request, share); org.subsonic.restapi.Share s = createJaxbShare(request, share);
result.getShare().add(s); result.getShare().add(s);
@ -1837,7 +1826,7 @@ public class RESTController {
Player player = playerService.getPlayer(request, response); Player player = playerService.getPlayer(request, response);
String username = securityService.getCurrentUsername(request); String username = securityService.getCurrentUsername(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isShareRole()) { if (!user.isShareRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to share media."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to share media.");
return; return;
@ -1848,7 +1837,7 @@ public class RESTController {
files.add(mediaFileService.getMediaFile(id)); files.add(mediaFileService.getMediaFile(id));
} }
Share share = shareService.createShare(request, files); org.airsonic.player.domain.Share share = shareService.createShare(request, files);
share.setDescription(request.getParameter("description")); share.setDescription(request.getParameter("description"));
long expires = getLongParameter(request, "expires", 0L); long expires = getLongParameter(request, "expires", 0L);
if (expires != 0) { if (expires != 0) {
@ -1860,7 +1849,7 @@ public class RESTController {
org.subsonic.restapi.Share s = createJaxbShare(request, share); org.subsonic.restapi.Share s = createJaxbShare(request, share);
result.getShare().add(s); result.getShare().add(s);
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(username);
for (MediaFile mediaFile : shareService.getSharedFiles(share.getId(), musicFolders)) { for (MediaFile mediaFile : shareService.getSharedFiles(share.getId(), musicFolders)) {
s.getEntry().add(createJaxbChild(player, mediaFile, username)); s.getEntry().add(createJaxbChild(player, mediaFile, username));
@ -1874,10 +1863,10 @@ public class RESTController {
@RequestMapping(value = "/deleteShare") @RequestMapping(value = "/deleteShare")
public void deleteShare(HttpServletRequest request, HttpServletResponse response) throws Exception { public void deleteShare(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
int id = getRequiredIntParameter(request, "id"); int id = getRequiredIntParameter(request, "id");
Share share = shareService.getShareById(id); org.airsonic.player.domain.Share share = shareService.getShareById(id);
if (share == null) { if (share == null) {
error(request, response, ErrorCode.NOT_FOUND, "Shared media not found."); error(request, response, ErrorCode.NOT_FOUND, "Shared media not found.");
return; return;
@ -1894,10 +1883,10 @@ public class RESTController {
@RequestMapping(value = "/updateShare") @RequestMapping(value = "/updateShare")
public void updateShare(HttpServletRequest request, HttpServletResponse response) throws Exception { public void updateShare(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
int id = getRequiredIntParameter(request, "id"); int id = getRequiredIntParameter(request, "id");
Share share = shareService.getShareById(id); org.airsonic.player.domain.Share share = shareService.getShareById(id);
if (share == null) { if (share == null) {
error(request, response, ErrorCode.NOT_FOUND, "Shared media not found."); error(request, response, ErrorCode.NOT_FOUND, "Shared media not found.");
return; return;
@ -1917,7 +1906,7 @@ public class RESTController {
writeEmptyResponse(request, response); writeEmptyResponse(request, response);
} }
private org.subsonic.restapi.Share createJaxbShare(HttpServletRequest request, Share share) { private org.subsonic.restapi.Share createJaxbShare(HttpServletRequest request, org.airsonic.player.domain.Share share) {
org.subsonic.restapi.Share result = new org.subsonic.restapi.Share(); org.subsonic.restapi.Share result = new org.subsonic.restapi.Share();
result.setId(String.valueOf(share.getId())); result.setId(String.valueOf(share.getId()));
result.setUrl(shareService.getShareUrl(request, share)); result.setUrl(shareService.getShareUrl(request, share));
@ -1983,7 +1972,7 @@ public class RESTController {
String username = getRequiredStringParameter(request, "username"); String username = getRequiredStringParameter(request, "username");
String password = decrypt(getRequiredStringParameter(request, "password")); String password = decrypt(getRequiredStringParameter(request, "password"));
User authUser = securityService.getCurrentUser(request); org.airsonic.player.domain.User authUser = securityService.getCurrentUser(request);
boolean allowed = authUser.isAdminRole() boolean allowed = authUser.isAdminRole()
|| username.equals(authUser.getUsername()) && authUser.isSettingsRole(); || username.equals(authUser.getUsername()) && authUser.isSettingsRole();
@ -1993,7 +1982,7 @@ public class RESTController {
return; return;
} }
User user = securityService.getUserByName(username); org.airsonic.player.domain.User user = securityService.getUserByName(username);
user.setPassword(password); user.setPassword(password);
securityService.updateUser(user); securityService.updateUser(user);
@ -2006,13 +1995,13 @@ public class RESTController {
String username = getRequiredStringParameter(request, "username"); String username = getRequiredStringParameter(request, "username");
User currentUser = securityService.getCurrentUser(request); org.airsonic.player.domain.User currentUser = securityService.getCurrentUser(request);
if (!username.equals(currentUser.getUsername()) && !currentUser.isAdminRole()) { if (!username.equals(currentUser.getUsername()) && !currentUser.isAdminRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, currentUser.getUsername() + " is not authorized to get details for other users."); error(request, response, ErrorCode.NOT_AUTHORIZED, currentUser.getUsername() + " is not authorized to get details for other users.");
return; return;
} }
User requestedUser = securityService.getUserByName(username); org.airsonic.player.domain.User requestedUser = securityService.getUserByName(username);
if (requestedUser == null) { if (requestedUser == null) {
error(request, response, ErrorCode.NOT_FOUND, "No such user: " + username); error(request, response, ErrorCode.NOT_FOUND, "No such user: " + username);
return; return;
@ -2027,14 +2016,14 @@ public class RESTController {
public void getUsers(HttpServletRequest request, HttpServletResponse response) throws Exception { public void getUsers(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User currentUser = securityService.getCurrentUser(request); org.airsonic.player.domain.User currentUser = securityService.getCurrentUser(request);
if (!currentUser.isAdminRole()) { if (!currentUser.isAdminRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, currentUser.getUsername() + " is not authorized to get details for other users."); error(request, response, ErrorCode.NOT_AUTHORIZED, currentUser.getUsername() + " is not authorized to get details for other users.");
return; return;
} }
Users result = new Users(); Users result = new Users();
for (User user : securityService.getAllUsers()) { for (org.airsonic.player.domain.User user : securityService.getAllUsers()) {
result.getUser().add(createJaxbUser(user)); result.getUser().add(createJaxbUser(user));
} }
@ -2043,7 +2032,7 @@ public class RESTController {
jaxbWriter.writeResponse(request, response, res); jaxbWriter.writeResponse(request, response, res);
} }
private org.subsonic.restapi.User createJaxbUser(User user) { private org.subsonic.restapi.User createJaxbUser(org.airsonic.player.domain.User user) {
UserSettings userSettings = settingsService.getUserSettings(user.getUsername()); UserSettings userSettings = settingsService.getUserSettings(user.getUsername());
org.subsonic.restapi.User result = new org.subsonic.restapi.User(); org.subsonic.restapi.User result = new org.subsonic.restapi.User();
@ -2061,7 +2050,7 @@ public class RESTController {
result.setStreamRole(user.isStreamRole()); result.setStreamRole(user.isStreamRole());
result.setJukeboxRole(user.isJukeboxRole()); result.setJukeboxRole(user.isJukeboxRole());
result.setShareRole(user.isShareRole()); result.setShareRole(user.isShareRole());
// currently this role isn't supported by libresonic // currently this role isn't supported by airsonic
result.setVideoConversionRole(false); result.setVideoConversionRole(false);
// Useless // Useless
result.setAvatarLastChanged(null); result.setAvatarLastChanged(null);
@ -2071,8 +2060,8 @@ public class RESTController {
result.setMaxBitRate(transcodeScheme.getMaxBitRate()); result.setMaxBitRate(transcodeScheme.getMaxBitRate());
} }
List<MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(user.getUsername()); List<org.airsonic.player.domain.MusicFolder> musicFolders = settingsService.getMusicFoldersForUser(user.getUsername());
for (MusicFolder musicFolder : musicFolders) { for (org.airsonic.player.domain.MusicFolder musicFolder : musicFolders) {
result.getFolder().add(musicFolder.getId()); result.getFolder().add(musicFolder.getId());
} }
return result; return result;
@ -2081,7 +2070,7 @@ public class RESTController {
@RequestMapping(value = "/createUser") @RequestMapping(value = "/createUser")
public void createUser(HttpServletRequest request, HttpServletResponse response) throws Exception { public void createUser(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isAdminRole()) { if (!user.isAdminRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to create new users."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to create new users.");
return; return;
@ -2106,7 +2095,7 @@ public class RESTController {
int[] folderIds = ServletRequestUtils.getIntParameters(request, "musicFolderId"); int[] folderIds = ServletRequestUtils.getIntParameters(request, "musicFolderId");
if (folderIds.length == 0) { if (folderIds.length == 0) {
folderIds = Util.toIntArray(MusicFolder.toIdList(settingsService.getAllMusicFolders())); folderIds = Util.toIntArray(org.airsonic.player.domain.MusicFolder.toIdList(settingsService.getAllMusicFolders()));
} }
command.setAllowedMusicFolderIds(folderIds); command.setAllowedMusicFolderIds(folderIds);
@ -2117,20 +2106,20 @@ public class RESTController {
@RequestMapping(value = "/updateUser") @RequestMapping(value = "/updateUser")
public void updateUser(HttpServletRequest request, HttpServletResponse response) throws Exception { public void updateUser(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isAdminRole()) { if (!user.isAdminRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to update users."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to update users.");
return; return;
} }
String username = getRequiredStringParameter(request, "username"); String username = getRequiredStringParameter(request, "username");
User u = securityService.getUserByName(username); org.airsonic.player.domain.User u = securityService.getUserByName(username);
UserSettings s = settingsService.getUserSettings(username); UserSettings s = settingsService.getUserSettings(username);
if (u == null) { if (u == null) {
error(request, response, ErrorCode.NOT_FOUND, "No such user: " + username); error(request, response, ErrorCode.NOT_FOUND, "No such user: " + username);
return; return;
} else if (User.USERNAME_ADMIN.equals(username)) { } else if (org.airsonic.player.domain.User.USERNAME_ADMIN.equals(username)) {
error(request, response, ErrorCode.NOT_AUTHORIZED, "Not allowed to change admin user"); error(request, response, ErrorCode.NOT_AUTHORIZED, "Not allowed to change admin user");
return; return;
} }
@ -2160,7 +2149,7 @@ public class RESTController {
int[] folderIds = ServletRequestUtils.getIntParameters(request, "musicFolderId"); int[] folderIds = ServletRequestUtils.getIntParameters(request, "musicFolderId");
if (folderIds.length == 0) { if (folderIds.length == 0) {
folderIds = Util.toIntArray(MusicFolder.toIdList(settingsService.getMusicFoldersForUser(username))); folderIds = Util.toIntArray(org.airsonic.player.domain.MusicFolder.toIdList(settingsService.getMusicFoldersForUser(username)));
} }
command.setAllowedMusicFolderIds(folderIds); command.setAllowedMusicFolderIds(folderIds);
@ -2175,14 +2164,14 @@ public class RESTController {
@RequestMapping(value = "/deleteUser") @RequestMapping(value = "/deleteUser")
public void deleteUser(HttpServletRequest request, HttpServletResponse response) throws Exception { public void deleteUser(HttpServletRequest request, HttpServletResponse response) throws Exception {
request = wrapRequest(request); request = wrapRequest(request);
User user = securityService.getCurrentUser(request); org.airsonic.player.domain.User user = securityService.getCurrentUser(request);
if (!user.isAdminRole()) { if (!user.isAdminRole()) {
error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to delete users."); error(request, response, ErrorCode.NOT_AUTHORIZED, user.getUsername() + " is not authorized to delete users.");
return; return;
} }
String username = getRequiredStringParameter(request, "username"); String username = getRequiredStringParameter(request, "username");
if (User.USERNAME_ADMIN.equals(username)) { if (org.airsonic.player.domain.User.USERNAME_ADMIN.equals(username)) {
error(request, response, ErrorCode.NOT_AUTHORIZED, "Not allowed to delete admin user"); error(request, response, ErrorCode.NOT_AUTHORIZED, "Not allowed to delete admin user");
return; return;
} }
@ -2402,8 +2391,8 @@ public class RESTController {
GENERIC(0, "A generic error."), GENERIC(0, "A generic error."),
MISSING_PARAMETER(10, "Required parameter is missing."), MISSING_PARAMETER(10, "Required parameter is missing."),
PROTOCOL_MISMATCH_CLIENT_TOO_OLD(20, "Incompatible Libresonic REST protocol version. Client must upgrade."), PROTOCOL_MISMATCH_CLIENT_TOO_OLD(20, "Incompatible Airsonic REST protocol version. Client must upgrade."),
PROTOCOL_MISMATCH_SERVER_TOO_OLD(30, "Incompatible Libresonic REST protocol version. Server must upgrade."), PROTOCOL_MISMATCH_SERVER_TOO_OLD(30, "Incompatible Airsonic REST protocol version. Server must upgrade."),
NOT_AUTHENTICATED(40, "Wrong username or password."), NOT_AUTHENTICATED(40, "Wrong username or password."),
NOT_AUTHORIZED(50, "User is not authorized for the given operation."), NOT_AUTHORIZED(50, "User is not authorized for the given operation."),
NOT_FOUND(70, "Requested data was not found."); NOT_FOUND(70, "Requested data was not found.");
@ -2430,7 +2419,7 @@ public class RESTController {
super(username, mediaFileId); super(username, mediaFileId);
} }
static BookmarkKey forBookmark(Bookmark b) { static BookmarkKey forBookmark(org.airsonic.player.domain.Bookmark b) {
return new BookmarkKey(b.getUsername(), b.getMediaFileId()); return new BookmarkKey(b.getUsername(), b.getMediaFileId());
} }
} }

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.PlayerService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.PlayerService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;

@ -1,13 +1,13 @@
package org.libresonic.player.controller; package org.airsonic.player.controller;
import net.tanesha.recaptcha.ReCaptcha; import net.tanesha.recaptcha.ReCaptcha;
import net.tanesha.recaptcha.ReCaptchaFactory; import net.tanesha.recaptcha.ReCaptchaFactory;
import net.tanesha.recaptcha.ReCaptchaResponse; import net.tanesha.recaptcha.ReCaptchaResponse;
import org.airsonic.player.domain.User;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.User;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -132,14 +132,14 @@ public class RecoverController {
Message message = new MimeMessage(session); Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(settingsService.getSmtpFrom())); message.setFrom(new InternetAddress(settingsService.getSmtpFrom()));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email));
message.setSubject("Libresonic Password"); message.setSubject("Airsonic Password");
message.setText("Hi there!\n\n" + message.setText("Hi there!\n\n" +
"You have requested to reset your Libresonic password. Please find your new login details below.\n\n" + "You have requested to reset your Airsonic password. Please find your new login details below.\n\n" +
"Username: " + username + "\n" + "Username: " + username + "\n" +
"Password: " + password + "\n\n" + "Password: " + password + "\n\n" +
"--\n" + "--\n" +
"Your Libresonic server\n" + "Your Airsonic server\n" +
"libresonic.org"); "airsonic.org");
message.setSentDate(new Date()); message.setSentDate(new Date());
Transport trans = session.getTransport(prot); Transport trans = session.getTransport(prot);

@ -1,26 +1,26 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
/** /**
* Used in libresonic-servlet.xml to specify frame reloading. * Used in servlet.xml to specify frame reloading.
* *
* @author Sindre Mehus * @author Sindre Mehus
*/ */

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.UserSettings; import org.airsonic.player.domain.UserSettings;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.libresonic.player.service.VersionService; import org.airsonic.player.service.VersionService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,31 +1,31 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.command.SearchCommand;
import org.airsonic.player.domain.*;
import org.airsonic.player.service.PlayerService;
import org.airsonic.player.service.SearchService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.command.SearchCommand;
import org.libresonic.player.domain.*;
import org.libresonic.player.service.PlayerService;
import org.libresonic.player.service.SearchService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,27 +1,27 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.MediaFile; import org.airsonic.player.domain.MediaFile;
import org.libresonic.player.service.MediaFileService; import org.airsonic.player.service.MediaFileService;
import org.libresonic.player.util.StringUtil; import org.airsonic.player.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,28 +1,28 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.MediaFile; import org.airsonic.player.domain.MediaFile;
import org.libresonic.player.service.MediaFileService; import org.airsonic.player.service.MediaFileService;
import org.libresonic.player.service.RatingService; import org.airsonic.player.service.RatingService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.ServletRequestUtils;

@ -1,26 +1,26 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.User; import org.airsonic.player.domain.User;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

@ -1,29 +1,29 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.domain.MediaFile; import org.airsonic.player.domain.MediaFile;
import org.libresonic.player.domain.PlayQueue; import org.airsonic.player.domain.PlayQueue;
import org.libresonic.player.domain.Player; import org.airsonic.player.domain.Player;
import org.libresonic.player.domain.Share; import org.airsonic.player.domain.Share;
import org.libresonic.player.service.*; import org.airsonic.player.service.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestBindingException; import org.springframework.web.bind.ServletRequestBindingException;

@ -1,33 +1,33 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.domain.MusicFolder;
import org.airsonic.player.domain.Share;
import org.airsonic.player.domain.User;
import org.airsonic.player.service.MediaFileService;
import org.airsonic.player.service.SecurityService;
import org.airsonic.player.service.SettingsService;
import org.airsonic.player.service.ShareService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.domain.MediaFile;
import org.libresonic.player.domain.MusicFolder;
import org.libresonic.player.domain.Share;
import org.libresonic.player.domain.User;
import org.libresonic.player.service.MediaFileService;
import org.libresonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService;
import org.libresonic.player.service.ShareService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

@ -1,27 +1,27 @@
/* /*
* This file is part of Libresonic. * This file is part of Airsonic.
* *
* Libresonic is free software: you can redistribute it and/or modify * Airsonic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* Libresonic is distributed in the hope that it will be useful, * Airsonic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Libresonic. If not, see <http://www.gnu.org/licenses/>. * along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
* *
* Copyright 2015 (C) Sindre Mehus * Copyright 2015 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.airsonic.player.service.NetworkService;
import org.airsonic.player.service.SettingsService;
import org.airsonic.player.service.SonosService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.libresonic.player.service.NetworkService;
import org.libresonic.player.service.SettingsService;
import org.libresonic.player.service.SonosService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@ -74,7 +74,7 @@ public class SonosSettingsController {
boolean sonosEnabled = ServletRequestUtils.getBooleanParameter(request, "sonosEnabled", false); boolean sonosEnabled = ServletRequestUtils.getBooleanParameter(request, "sonosEnabled", false);
String sonosServiceName = StringUtils.trimToNull(request.getParameter("sonosServiceName")); String sonosServiceName = StringUtils.trimToNull(request.getParameter("sonosServiceName"));
if (sonosServiceName == null) { if (sonosServiceName == null) {
sonosServiceName = "Libresonic"; sonosServiceName = "Airsonic";
} }
settingsService.setSonosEnabled(sonosEnabled); settingsService.setSonosEnabled(sonosEnabled);

@ -1,30 +1,30 @@
/* /*
This file is part of Libresonic. This file is part of Airsonic.
Libresonic is free software: you can redistribute it and/or modify Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Libresonic is distributed in the hope that it will be useful, Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Libresonic. If not, see <http://www.gnu.org/licenses/>. along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Libresonic Authors Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/ */
package org.libresonic.player.controller; package org.airsonic.player.controller;
import org.libresonic.player.dao.MediaFileDao; import org.airsonic.player.dao.MediaFileDao;
import org.libresonic.player.domain.*; import org.airsonic.player.domain.*;
import org.libresonic.player.service.MediaFileService; import org.airsonic.player.service.MediaFileService;
import org.libresonic.player.service.PlayerService; import org.airsonic.player.service.PlayerService;
import org.libresonic.player.service.SecurityService; import org.airsonic.player.service.SecurityService;
import org.libresonic.player.service.SettingsService; import org.airsonic.player.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save