Quellcode durchsuchen

Improved player, song rename, login statistic

Alexandr vor 6 Jahren
Ursprung
Commit
0ea5b76040

+ 7 - 0
app/Http/Controllers/Auth/LoginController.php

@@ -45,4 +45,11 @@ class LoginController extends Controller
     {
         return array_merge($request->only($this->username(), 'password'),['isEnabled'=>true]);
     }
+
+    // Add some logic, if The user has been authenticated.
+    protected function authenticated(Request $request, $user)
+    {
+        $user->numLogin += 1;
+        $user->save();
+    }
 }

+ 9 - 4
app/Http/Controllers/HomeController.php

@@ -41,8 +41,11 @@ class HomeController extends Controller
     public function userShutdown(){
         $users = User::all();
         foreach ($users as $user) {
-            $user->isEnabled = false;
-            $user->save();
+            if(!$user->isAdmin) {
+                $user->isEnabled = false;
+                $user->save();
+            }
+
         }
         return redirect('users');
     }
@@ -50,8 +53,10 @@ class HomeController extends Controller
     public function userGreenlight(){
         $users = User::all();
         foreach ($users as $user) {
-            $user->isEnabled = true;
-            $user->save();
+            if(!$user->isAdmin) {
+                $user->isEnabled = true;
+                $user->save();
+            }
         }
         return redirect('users');
     }

+ 22 - 16
app/Http/Controllers/MusicController.php

@@ -53,8 +53,9 @@ class MusicController extends Controller
         $songs = Music::all();
         foreach ($files as $f) {
             $fix_path = Str::replaceFirst('public/', 'storage/', $f['path']);
+            $melody_db = Music::where('file_name', $fix_path)->first();
             // add NEW files to DB
-            if (!Music::where('file_name', $fix_path)->first()) {
+            if (!$melody_db) {
                 $melody = new Music();
                 $melody->title = $f['filename'];
                 $melody->description = $f['filename'];
@@ -73,11 +74,19 @@ class MusicController extends Controller
                         $melody->type = $f['extension'];
                     }
                 }
-
                 $melody->save();
+            } else {
+                // Update description, even if it's already fetched to db
+                // Update data ONLY from TXT files, leave folders and mp3 as it is
+                if ($f['type'] == 'file' && $f['extension'] == 'txt') {
+                    $melody = $melody_db;
+                    $melody->description = Storage::disk('local')->read($f['path']);
+                    $melody->save();
+                }
             }
             $fIndex[] = $fix_path;
         }
+
         // Clean DB of OLD files
         $musicdB = Music::all();
         foreach ($musicdB as $song) {
@@ -89,9 +98,18 @@ class MusicController extends Controller
         return $files;
     }
 
-    public function null(Music $music)
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param \Illuminate\Http\Request $request
+     * @param \App\Music $music
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, Music $music)
     {
-        return null;
+        $music->title = $request->newname;
+        $music->save();
+        return true;
     }
 
     /**
@@ -137,18 +155,6 @@ class MusicController extends Controller
         //
     }
 
-    /**
-     * Update the specified resource in storage.
-     *
-     * @param \Illuminate\Http\Request $request
-     * @param \App\Music $music
-     * @return \Illuminate\Http\Response
-     */
-    public function update(Request $request, Music $music)
-    {
-        //
-    }
-
     /**
      * Remove the specified resource from storage.
      *

+ 1 - 0
database/migrations/2014_10_12_000000_create_users_table.php

@@ -19,6 +19,7 @@ class CreateUsersTable extends Migration
             $table->string('name');
             $table->boolean('isAdmin')->default(false);
             $table->boolean('isEnabled')->default(true);
+            $table->bigInteger('numLogin')->default(0);
             $table->string('email')->unique();
             $table->timestamp('email_verified_at')->nullable();
             $table->string('password');

+ 1 - 1
database/migrations/2020_04_10_175800_create_musics_table.php

@@ -16,7 +16,7 @@ class CreateMusicsTable extends Migration
         Schema::create('musics', function (Blueprint $table) {
             $table->id();
             $table->string('title');
-            $table->string('description');
+            $table->text('description');
             $table->integer('played');
             $table->integer('downloads');
             $table->boolean('hidden');

+ 3 - 3
package-lock.json

@@ -5591,9 +5591,9 @@
             }
         },
         "jquery": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz",
-            "integrity": "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==",
+            "version": "3.4.1",
+            "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
+            "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==",
             "dev": true
         },
         "js-tokens": {

Datei-Diff unterdrückt, da er zu groß ist
+ 485 - 840
public/js/app.js


+ 87 - 11
public/js/myScript.js

@@ -3,20 +3,23 @@ $(document).ready(function () {
 
     // --------------------------------------
     // Async data loading
-     function asyncSend(tUri, sObj, isTxtResp){
+     function asyncSend(tUri, sObj, isTxtResp, sData= {}){
          var res = -1;
          $.ajax({
              method: "GET",
              url: tUri,
-             data: {},
-             dataType: "html",
+             data: sData,
          }).done(function (data) {
-             if(isTxtResp) {
-                 sObj.innerText = data;
-             } else {
+             try {
+                 if (isTxtResp) {
+                     sObj.innerText = data;
+                 } else {
+                     //console.log(data);
+                     sObj.removeClass('disabled');
+                     window.location = panelRoute;
+                 }
+             }catch (e) {
                  console.log(data);
-                 $('#fScan').removeClass('disabled');
-                 window.location = panelRoute;
              }
              //console.log(data);
          }).fail(function (jqXHR, textStatus) {
@@ -25,14 +28,45 @@ $(document).ready(function () {
          return res;
      }
 
+     // Password GenSimple
+    function randDiapInt(min, max){
+         return Math.round(min + Math.random() * (max - min));
+    }
+    $('#passgen').click(function () {
+        var pass = "";
+        for (var i=0; i<8; i++){
+            pass += String.fromCharCode(randDiapInt(48,122) )
+        }
+        $('#password').attr("type","text");
+        $('#password-confirm').attr("type","text");
+        $('#password').val(pass);
+        $('#flbl').text(pass);
+        $('#password-confirm').val(pass);
+    });
+
+     // Loop palyback - WIP
+     $('.repeat_btn').click(function () {
+        $(this).toggleClass('active');
+        var audio = $(this).attr('audio_id');
+        $('#audio_object_'+audio).attr("loop", !$('#audio_object_'+audio).attr("loop"));
+     });
+
+     // "Rename track > save" button.
+     $('.btn_rename').click(function () {
+         var data = $(this).parent().prev().val();
+         var myRoute = this.getAttribute('route');
+         asyncSend(myRoute, null, true, {'newname':data});
+     })
+
      // "Scan files" button
     $('#fScan').click(function () {
         $(this).addClass('disabled');
-        asyncSend(scanRoute, null, false);
+        asyncSend(scanRoute, $(this), false);
     });
 
      // --------------------------------------
      // My Player logic
+    var playTimer = null;
     function btnIconSwitch(obj, dir) {
         if (dir) {
             obj.classList.remove('fa-play');
@@ -42,29 +76,71 @@ $(document).ready(function () {
             obj.classList.add('fa-play');
         }
     }
+    function secToHMS(sec) {
+        var date = new Date(0);
+        date.setSeconds(sec);
+        return date.toISOString().substr(11,8);
+    }
+    function playTimePos(audioID) {
+        $("#curTime_"+audioID).text(
+            secToHMS(
+                document.getElementById('audio_object_' + audioID).currentTime
+            )
+        );
+    }
     // Simple player dynamics
     var players = document.getElementsByClassName('play_btn');
     for (var i = 0; i < players.length; i++) {
         players[i].onclick = function () {
             // Finding UI elements
-            var audioID = this.getAttribute('audio_id');
+            var audioID = this.parentNode.getAttribute('audio_id');
             var audio = document.getElementById('audio_object_' + audioID);
             var btn = document.getElementById('play_ctrl_' + audioID);
             var playBadge = document.getElementById('play_num_' + audioID);
             // Handling Events
-            audio.onended = function(){btnIconSwitch(btn, false);}
+            audio.onended = function(){
+                btnIconSwitch(btn, false);
+            }
             if (audio.paused) {
                 audio.play();
+                playTimer = setInterval(function(){playTimePos(audioID)}, 500);
                 btnIconSwitch(btn, true);
                 // Play event
                 var myRoute = this.getAttribute('route');
                 var asRes = asyncSend(myRoute, playBadge, true);
             } else {
                 audio.pause();
+                clearInterval(playTimer);
                 btnIconSwitch(btn, false);
             }
         }
     }
+    // Set step time
+    $('.dropdown-item').click(function () {
+        var audioID = $(this).parent().attr("audio_id");
+        $(this).siblings().each(function () {
+            $(this).removeClass("active");
+        });
+        $(this).addClass("active");
+        $("#audio_object_"+audioID).attr("step", $(this).attr("vsec"))
+    });
+    // Seek buttons handlers
+    $(".s_bkw,.s_fwd").click(function () {
+        var audioID = $(this).parent().attr("audio_id");
+        var audioObj = document.getElementById("audio_object_" + audioID);
+        if(Boolean($(this).attr("direction"))) {
+            audioObj.currentTime += Number(audioObj.getAttribute("step"));
+        } else {
+            audioObj.currentTime -= Number(audioObj.getAttribute("step"));
+        }
+    })
+    // Prescan Durations
+    var audios = document.getElementsByClassName('audio');
+    for (var i = 0; i < audios.length; i++) {
+        var audioID = audios[i].getAttribute('audio_id');
+        var audio = document.getElementById('audio_object_' + audioID);
+        document.getElementById("trkTime_"+ audioID).innerText = secToHMS(audio.duration);
+    }
     // Downloads dynamics
     var downs = document.getElementsByClassName('dw_btn');
     for (var i = 0; i < downs.length; i++) {

+ 0 - 1
resources/js/app.js

@@ -1,2 +1 @@
 require('./bootstrap');
-require('../../public/js/myScript');

+ 11 - 1
resources/lang/en/ui.php

@@ -15,13 +15,23 @@ return[
     'tb_title' => 'Title',
     'tb_ctrl' => 'Control',
     'tb_play' => 'Play',
-    'tb_down' => 'Downl.',
+    'tb_down' => 'Download',
     'tb_uname' => 'User Name',
+    'badge_play' => 'Played times',
+    'badge_down' => 'Downloaded times',
     'back_catlog' => 'Back to music ctalog',
     'disable_all' => 'Block all users',
     'allow_all' => 'Unlock all users',
+    'gen_passw' => 'Generate a password',
     'rescan' => 'Rescan for audio',
     'umanage' => 'Users managment',
+    'fwbk_stpep' => 'Step with...',
+    'sec' => 'seconds',
+    'min' => 'minutes',
+    'loop' => 'Loop playback',
+    'logs' => 'login times',
+    's_fwd' => 'Step forward',
+    's_bkw' => 'Step backward',
     'login_req' => 'Please login, to listen audio',
     'err_play' => 'Your browser does not support the audio element.',
     'docs' => 'Big catalog of classic orthodox songs, recorded in our cathedral',

+ 14 - 4
resources/lang/ru/ui.php

@@ -14,15 +14,25 @@ return[
     'logout' => 'Выйти',
     'tb_title' => 'Название',
     'tb_ctrl' => 'Управление',
-    'tb_play' => 'Слуш.',
-    'tb_down' => 'Скач.',
+    'tb_play' => 'Воспроизведние',
+    'tb_down' => 'Скачать',
     'tb_uname' => 'ФИО Пользователя',
+    'badge_play' => 'Раз проиграно',
+    'badge_down' => 'Раз скачано',
     'back_catlog' => 'Назад к катлогу',
     'disable_all' => 'Заблокировать всех',
     'allow_all' => 'Разаблокировать всех',
-    'rescan' => 'Персканировать аудио',
+    'gen_passw' => 'Создать безопасный пароль',
+    'rescan' => 'Персканировать альбомы',
     'umanage' => 'Управление пользователями',
+    'fwbk_stpep' => 'Мотать запись по...',
+    'sec' => 'секунд',
+    'min' => 'минут',
+    'logs' => 'Выполнено входов',
+    'loop' => 'Зациклить воспроизвдение',
+    's_fwd' => 'Мотать вперд',
+    's_bkw' => 'Мотать назад',
     'login_req' => 'Пожалуйста залогинстесь, чтобы слушать записи',
     'err_play' => 'Ваш браузер не поддерживает воспроизвдение аудио',
-    'docs' => 'Большой каталог церковных песнопений, исполнненых знаменным распевом, записанны в Спасо-Андрониковом маонастыре',
+    'docs' => 'Большой каталог церковных песнопений, исполнненых знаменным распевом, записанные в Спасо-Андрониковом маонастыре',
 ];

+ 12 - 3
resources/views/auth/register.blade.php

@@ -15,7 +15,9 @@
                             <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('ui.name') }}</label>
 
                             <div class="col-md-6">
-                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
+                                    <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
+
+
 
                                 @error('name')
                                     <span class="invalid-feedback" role="alert">
@@ -43,8 +45,15 @@
                             <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('ui.pwd_lb') }}</label>
 
                             <div class="col-md-6">
-                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
+                                <div class="input-group">
 
+                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
+                                    <div class="input-group-append">
+                                        <div class="btn btn-outline-secondary" id="passgen" title="{{__('ui.gen_passw')}}">
+                                            <i class="fas fa-redo-alt"></i>
+                                        </div>
+                                    </div>
+                                </div>
                                 @error('password')
                                     <span class="invalid-feedback" role="alert">
                                         <strong>{{ $message }}</strong>
@@ -62,7 +71,7 @@
                         </div>
 
                         <div class="form-group row mb-0">
-                            <div class="col-md-6 offset-md-4">
+                            <div class="col-md-6 offset-md-4 btn-group">
                                 <button type="submit" class="btn btn-primary">
                                     {{ __('ui.register') }}
                                 </button>

+ 69 - 18
resources/views/home.blade.php

@@ -11,7 +11,7 @@
                         @auth
                         @if(Auth::user()->isAdmin)
                         <div class="btn-group">
-                            <div class="btn btn-sm btn-outline-primary text-right" id="fScan">
+                            <div class="btn btn-sm btn-outline-primary text-left" id="fScan">
                                 <i class="fas fa-retweet"></i>
                                 {{ __('ui.rescan') }}
                             </div>
@@ -35,55 +35,106 @@
                             <div class="alert alert-danger">{{ __('ui.login_req') }}</div>
                         @else
 
-                            <table class="table table-bordered">
+                            <table class="table ">
                                 <thead class="thead-dark">
                                 <tr>
-                                    <th scope="col">{{__('ui.tb_title')}}</th>
-                                    <th scope="col" class="controls col-sm-1"><i class="fas fa-play-circle"></i> {{__('ui.tb_play')}}</th>
-                                    <th scope="col" class="controls col-sm-1"><i class="fas fa-file-audio"></i> {{__('ui.tb_down')}}</th>
+                                    <th scope="col" class="col-8">{{__('ui.tb_title')}}</th>
+                                    <th scope="col" class="controls col-2"><i class="fas fa-play-circle"></i> {{__('ui.tb_play')}}</th>
+                                    <th scope="col" class="controls col-1" title="{{__('ui.tb_down')}}"><i class="fas fa-file-audio"></i></th>
                                 </tr>
                                 </thead>
                                 <tbody>
                                 @foreach($song_list as $song)
                                     @if($song->type == 'dir')
                                         <tr class="thead-light">
-                                            <th colspan="4">{{$song->title}}</th>
+                                            <th colspan="4">
+                                                @if(Auth::user()->isAdmin)
+                                                    <div class="input-group">
+                                                        <input type="text" class="form-control bg-light" value="{{$song->title}}">
+                                                        <div class="input-group-append">
+                                                            <button class="btn btn-sm btn-outline-secondary btn_rename"
+                                                                    route="{{route('mrename', $song->id)}}">
+                                                                <i class="fas fa-check"></i>
+                                                            </button>
+                                                        </div>
+                                                    </div>
+                                                @else
+                                                {{$song->title}}
+                                                @endif
+                                            </th>
                                         </tr>
                                         @elseif($song->type == 'txt')
                                         <tr class="thead-light">
-                                            <th colspan="4" class="font-weight-lighter">{{$song->description}}</th>
+                                            <th colspan="4" class="font-weight-lighter">{!! nl2br(e($song->description)) !!}</th>
                                         </tr>
                                     @else
                                     <tr>
-                                        <td style="text-align: left">
-                                            {{$song->title}}
+                                        <td style="text-align: left;" class="text-left align-middle">
+                                            @if(Auth::user()->isAdmin)
+                                                <div class="input-group">
+                                                    <input type="text" class="form-control" value="{{$song->title}}">
+                                                    <div class="input-group-append">
+                                                        <button class="btn btn-sm btn-outline-success btn_rename"
+                                                                route="{{route('mrename', $song->id)}}">
+                                                            <i class="fas fa-check"></i>
+                                                        </button>
+                                                    </div>
+                                                </div>
+                                            @else
+                                                {{$song->title}}
+                                            @endif
                                         </td>
-                                        <td class="controls">
+                                        <td class="controls btn-toolbar btn-group-vertical">
                                             <div class="btn-group">
-                                                <div class="btn btn-sm btn-outline-primary play_btn"
-                                                     audio_id="{{$song->id}}" route="{{route('mplay', $song->id)}}">
-                                                    <i class="fas fa-play" id="play_ctrl_{{$song->id}}"></i>
+                                                <div class="btn btn-sm btn-primary disabled text-nowrap">
+                                                    <span id="curTime_{{$song->id}}">00:00:00</span> - <span id="trkTime_{{$song->id}}">00:00:00</span>
+                                                </div>
+                                                <div class="btn-group">
+                                                    <div class="btn btn-sm btn-outline-primary dropdown-toggle" title="{{__('ui.fwbk_stpep')}}"
+                                                         data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                                                    </div>
+                                                    <div class="dropdown-menu" aria-labelledby="btnGroupDrop1" audio_id="{{$song->id}}">
+                                                        <div class="dropdown-item disabled">{{__('ui.fwbk_stpep')}}</div>
+                                                        <div class="dropdown-item active" vsec="10">10 {{__('ui.sec')}}</div>
+                                                        <div class="dropdown-item" vsec="60">1 {{__('ui.min')}}</div>
+                                                        <div class="dropdown-item" vsec="600">10 {{__('ui.min')}}</div>
+                                                    </div>
+                                                </div>
+                                                <div class="btn btn-sm btn-outline-primary repeat_btn" audio_id="{{$song->id}}" title="{{__('ui.loop')}}">
+                                                    <i class="fas fa-sync-alt"></i>
                                                 </div>
                                                 <div class="btn btn-sm btn-outline-primary disabled" id="play_num_{{$song->id}}"
-                                                     title="{{__('ui.tb_col3')}}">
+                                                     title="{{__('ui.badge_play')}}">
                                                     {{ $song->played }}
                                                 </div>
                                             </div>
+                                            <div class="btn-group" audio_id="{{$song->id}}">
+                                                <div class="btn btn-sm btn-outline-primary s_bkw" title="{{__('ui.s_bkw')}}" direction="1">
+                                                    <i class="fas fa-backward"></i>
+                                                </div>
+                                                <div class="btn btn-sm btn-outline-primary play_btn"
+                                                     route="{{route('mplay', $song->id)}}">
+                                                    <i class="fas fa-play" id="play_ctrl_{{$song->id}}"></i>
+                                                </div>
+                                                <div class="btn btn-sm btn-outline-primary s_fwd" title="{{__('ui.s_fwd')}}" direction="0">
+                                                    <i class="fas fa-forward"></i>
+                                                </div>
+                                            </div>
                                         </td>
                                         <td class="controls">
-                                            <div class="btn-group">
+                                            <div class="btn-group-vertical">
                                                 <a class="btn btn-sm btn-outline-success dw_btn"
                                                      audio_id="{{$song->id}}" route="{{route('mdown', $song->id)}}"
                                                    href="{{$song->file_name}}" target="_blank">
                                                     <i class="fas fa-file-download"></i>
                                                 </a>
                                                 <div class="btn btn-sm btn-outline-success disabled" id="dw_num_{{$song->id}}"
-                                                     title="{{__('ui.tb_col4')}}">
+                                                     title="{{__('ui.badge_down')}}">
                                                     {{ $song->downloads }}
                                                 </div>
                                             </div>
-                                            <!-- audio object -->
-                                            <audio id="audio_object_{{$song->id}}">
+                                            <!-- real html5 audio object -->
+                                            <audio id="audio_object_{{$song->id}}" audio_id="{{$song->id}}" class="audio" step="10">
                                                 <source src="{{$song->file_name}}" type="audio/mpeg">
                                                 {{ __('ui.err_play') }}
                                             </audio>

+ 10 - 0
resources/views/layouts/app.blade.php

@@ -29,6 +29,12 @@
         .controls{
             text-align: center;
         }
+        div.dropdown-item{
+            cursor: pointer;
+        }
+        .btn {
+            white-space: normal;
+        }
     </style>
 
 </head>
@@ -49,6 +55,9 @@
 
                     </ul>
 
+                    <!-- Fix for navbar collapse event -->
+                    <!-- https://github.com/twbs/bootstrap/issues/30553#issuecomment-612617589 -->
+
                     <!-- Right Side Of Navbar -->
                     <ul class="navbar-nav ml-auto">
                         <!-- Authentication Links -->
@@ -85,6 +94,7 @@
             </div>
         </nav>
 
+
         <main class="py-4">
 
             @yield('content')

+ 8 - 4
resources/views/users.blade.php

@@ -43,18 +43,22 @@
                             <table class="table table-bordered">
                                 <thead class="thead-dark">
                                 <tr>
-                                    <th scope="col">{{__('ui.tb_uname')}}</th>
-                                    <th scope="col" class="controls col-sm-1">{{__('ui.tb_ctrl')}}</th>
+                                    <th scope="col" class="col-8">{{__('ui.tb_uname')}}</th>
+                                    <th scope="col" class="controls col-sm-1" title="{{__('ui.logs')}}"><i class="fas fa-sign-in-alt"></th>
+                                    <th scope="col" class="controls col-sm-1" title="{{__('ui.tb_ctrl')}}"><i class="fas fa-wrench"></th>
                                 </tr>
                                 </thead>
                                 <tbody>
                                 @foreach($user_list as $user)
-                                    @if(!$user->isAdmin)
                                     <tr>
                                         <td style="text-align: left; @if(!$user->isEnabled) text-decoration:line-through @endif">
                                             {{$user->name}}
                                         </td>
+                                        <td class="text-center">
+                                            {{$user->numLogin}}
+                                        </td>
                                         <td class="controls">
+                                            @if(!$user->isAdmin)
                                             <div class="btn-group">
                                                 <a class="btn btn-sm btn-outline-primary play_btn"
                                                      href="{{route('uswitch', $user->id)}}">
@@ -62,8 +66,8 @@
                                                 </a>
                                             </div>
                                         </td>
+                                        @endif
                                     </tr>
-                                    @endif
                                 @endforeach
                                 </tbody>
                             </table>

+ 1 - 0
routes/web.php

@@ -30,6 +30,7 @@ Auth::routes();
 Route::get('/home', 'MusicController@index')->name('home');
 Route::get('/music/play/{music}/', 'MusicController@playlog')->name('mplay');
 Route::get('/music/download/{music}/', 'MusicController@dwlog')->name('mdown');
+Route::get('/music/rename/{music}/', 'MusicController@update')->name('mrename');
 Route::get('/music/scan/', 'MusicController@filerefresh')->name('rescan');
 Route::get('/users/', 'HomeController@usersControl')->name('ucontrol');
 Route::get('/users/{user}', 'HomeController@userSwitch')->name('uswitch');