MusicController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Music;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Storage;
  6. use Illuminate\Support\Str;
  7. class MusicController extends Controller
  8. {
  9. /**
  10. * Display a listing of the resource.
  11. *
  12. * @return \Illuminate\Http\Response
  13. */
  14. public function index()
  15. {
  16. // list all songs
  17. $songs = Music::all();
  18. return view('home', ['song_list' => $songs]);
  19. }
  20. public function playLog(Music $music)
  21. {
  22. // add one to played log
  23. $music->played += 1;
  24. $music->save();
  25. return $music->played;
  26. }
  27. public function dwLog(Music $music)
  28. {
  29. // add one to download log
  30. $music->downloads += 1;
  31. $music->save();
  32. return $music->downloads;
  33. }
  34. public function fileRefresh()
  35. {
  36. // Scan for files
  37. $fIndex = array();
  38. try {
  39. $files = Storage::disk('local')->listContents('public/audio', true);
  40. } catch (\Exception $e){
  41. $files = array();
  42. }
  43. //return $files;
  44. // Update storage index
  45. $songs = Music::all();
  46. foreach ($files as $f) {
  47. $fix_path = Str::replaceFirst('public/', 'storage/', $f['path']);
  48. $melody_db = Music::where('file_name', $fix_path)->first();
  49. // add NEW files to DB
  50. if (!$melody_db) {
  51. $melody = new Music();
  52. $melody->title = $f['filename'];
  53. $melody->description = $f['filename'];
  54. $melody->played = 0;
  55. $melody->downloads = 0;
  56. $melody->hidden = 0; // visible
  57. $melody->file_name = $fix_path;
  58. if ($f['type'] == 'dir') {
  59. $melody->type = 'dir';
  60. } elseif ($f['type'] == 'file') {
  61. if ($f['extension'] == 'txt') {
  62. $melody->type = 'txt';
  63. $melody->description = Storage::disk('local')->read($f['path']);
  64. } else {
  65. $melody->type = $f['extension'];
  66. }
  67. }
  68. $melody->save();
  69. } else {
  70. // Update description, even if it's already fetched to db
  71. // Update data ONLY from TXT files, leave folders and mp3 as it is
  72. if ($f['type'] == 'file' && $f['extension'] == 'txt') {
  73. $melody = $melody_db;
  74. $melody->description = Storage::disk('local')->read($f['path']);
  75. $melody->save();
  76. }
  77. }
  78. $fIndex[] = $fix_path;
  79. }
  80. // Clean DB of OLD files
  81. $musicdB = Music::all();
  82. foreach ($musicdB as $song) {
  83. if (!in_array($song->file_name, $fIndex)) {
  84. $song->delete();
  85. }
  86. }
  87. return $files;
  88. }
  89. /**
  90. * Update the specified resource in storage.
  91. *
  92. * @param \Illuminate\Http\Request $request
  93. * @param \App\Music $music
  94. * @return \Illuminate\Http\Response
  95. */
  96. public function update(Request $request, Music $music)
  97. {
  98. $music->title = $request->newname;
  99. $music->save();
  100. return true;
  101. }
  102. /**
  103. * Show the form for creating a new resource.
  104. *
  105. * @return \Illuminate\Http\Response
  106. */
  107. public function create()
  108. {
  109. //
  110. }
  111. /**
  112. * Store a newly created resource in storage.
  113. *
  114. * @param \Illuminate\Http\Request $request
  115. * @return \Illuminate\Http\Response
  116. */
  117. public function store(Request $request)
  118. {
  119. //
  120. }
  121. /**
  122. * Display the specified resource.
  123. *
  124. * @param \App\Music $music
  125. * @return \Illuminate\Http\Response
  126. */
  127. public function show(Music $music)
  128. {
  129. //
  130. }
  131. /**
  132. * Show the form for editing the specified resource.
  133. *
  134. * @param \App\Music $music
  135. * @return \Illuminate\Http\Response
  136. */
  137. public function edit(Music $music)
  138. {
  139. //
  140. }
  141. /**
  142. * Remove the specified resource from storage.
  143. *
  144. * @param \App\Music $music
  145. * @return \Illuminate\Http\Response
  146. */
  147. public function destroy(Music $music)
  148. {
  149. //
  150. }
  151. }