Как получить зацикленную музыку, чтобы она не воспроизводилась на определенных страницах в Ruby on Rails 5.2? - PullRequest
0 голосов
/ 28 января 2019

У меня на домашней странице установлена ​​музыка, страница не найдена, логово дракона и страница показа пользователя.Я хочу, чтобы музыка перестала воспроизводиться, если я перейду на страницу входа, страницу регистрации или страницу блога.Однако каждый раз, когда я нажимаю на кнопку ссылки, музыка продолжает играть, хотя я больше не на той странице, на которой была музыка.

Кроме того, музыка имеет тенденцию повторяться, когдапользователь нажимает кнопку домашней страницы во второй раз или любой другой.Также, если я переключаюсь с одной музыки на домашней странице на страницу «Драконий ден», музыка на обеих страницах воспроизводится одновременно.

Любые идеи о том, как я могу предотвратить это в ruby ​​на рельсах 5.2.В ruby ​​on rails 3.2 музыка автоматически отключается при переходе на следующую страницу и не зацикливается на себе, даже если щелкнуть ссылку.

Любой совет, как это исправить?

Помощник пользователя

module CusersHelper

   private
      def displayGreeter(name)
         contentFound = Artpage.find_by_name(name)
         @artpage = contentFound
      end

      def displayName(user)
         name = ""
         if(current_user && (current_user.pouch.privilege == "Admin" || current_user.id == user.id))
            name = (user.firstname + " " + user.lastname)
         else
            name = user.firstname
         end
         return name
      end

      def displayBirthday(user)
         birthday = ""
         if(current_user && (current_user.pouch.privilege == "Admin" || current_user.id == user.id))
            birthday = user.birthday.strftime("%B-%d-%Y")
         else
            birthday = user.birthday.strftime("%B-%d")
         end
         return birthday
      end

      def displayVname(user)
         vname = ""
         if(current_user)
            vname = user.vname + " joined on: " + user.joined_on.strftime("%B-%d-%Y")
         else
            vname = user.vname
         end
         return vname
      end

      def playBatVideo
         video = ""
         if(checkMusicFlag != "On")
            control = Webcontrol.find_by_id(1)
            if(current_user && current_user.userinfo.videobrowser == "ogv-browser")
               video = (video_tag(getMusicOrVideo("Crazybat", control.crazybatogv_url), width: "60%", :loop => true, :autoplay => true))
            elsif(current_user && current_user.userinfo.videobrowser == "mp4-browser")
               video = (video_tag(getMusicOrVideo("Crazybat", control.crazybatmp4_url), width: "60%", :loop => true, :autoplay => true))
            else
               video = (video_tag(getMusicOrVideo("Crazybat", control.crazybatogv_url), width: "60%", :loop => true, :autoplay => true))
            end
         end
         return video
      end

      def playUserMusic(user)
         sound = ""
         if(checkMusicFlag != "On" && user.userinfo.music_on)
            if(user.userinfo.ogg.to_s != "" && user.userinfo.mp3.to_s != "")
               if(current_user && current_user.userinfo.audiobrowser == "ogg-browser")
                  sound = (audio_tag(getMusicOrVideo("User", user), :loop => true, :autoplay => true))
               elsif(current_user && current_user.userinfo.audiobrowser == "mp3-browser")
                  sound = (audio_tag(getMusicOrVideo("User", user), :loop => true, :autoplay => true))
               else
                  sound = (audio_tag(getMusicOrVideo("User", user), :loop => true, :autoplay => true))
               end
            end
         end
         return sound
      end

      def playDragonhoardMusic
         sound = ""
         if(checkMusicFlag != "On")
            dragonhoard = Dragonhoard.find_by_id(1)
            if(current_user && current_user.userinfo.audiobrowser == "ogg-browser")
               sound = (audio_tag(getMusicOrVideo("Sound", dragonhoard), :loop => true, :autoplay => true))
            elsif(current_user && current_user.userinfo.audiobrowser == "mp3-browser")
               sound = (audio_tag(getMusicOrVideo("Sound", dragonhoard), :loop => true, :autoplay => true))
            else
               sound = (audio_tag(getMusicOrVideo("Sound", dragonhoard), :loop => true, :autoplay => true))
            end
         end
      end

      def playMaintenanceMusic
         sound = ""
         if(checkMusicFlag != "On")
            control = Webcontrol.find_by_id(1)
            if(current_user && current_user.userinfo.audiobrowser == "ogg-browser")
               sound = (audio_tag(getMusicOrVideo("Maintenance", control.maintenanceogg_url), :loop => true, :autoplay => true))
            elsif(current_user && current_user.userinfo.audiobrowser == "mp3-browser")
               sound = (audio_tag(getMusicOrVideo("Maintenance", control.maintenancemp3_url), :loop => true, :autoplay => true))
            else
               sound = (audio_tag(getMusicOrVideo("Maintenance", control.maintenanceogg_url), :loop => true, :autoplay => true))
            end
         end
         return sound
      end

      def playMainMusic
         sound = ""
         if(checkMusicFlag != "On")
            control = Webcontrol.find_by_id(1)
            criticalMode = Maintenancemode.find_by_id(2)
            betaMode = Maintenancemode.find_by_id(3)
            grandMode = Maintenancemode.find_by_id(4)
            if(current_user && current_user.userinfo.audiobrowser == "ogg-browser")
               sound = (audio_tag(getMusicOrVideo("Homepage", control.ogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               if(criticalMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.criticalogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               elsif(betaMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.betaogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               elsif(grandMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.grandogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               end
            elsif(current_user && current_user.userinfo.audiobrowser == "mp3-browser")
               sound = (audio_tag(getMusicOrVideo("Homepage", control.mp3_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               if(criticalMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.criticalmp3_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               elsif(betaMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.betamp3_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               elsif(grandMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.grandmp3_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               end
            else
               sound = (audio_tag(getMusicOrVideo("Homepage", control.ogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               if(criticalMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.criticalogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               elsif(betaMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.betaogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               elsif(grandMode.maintenance_on)
                  sound = (audio_tag(getMusicOrVideo("Homepage", control.grandogg_url), :controls => true, :hidden => true, :loop => true, :autoplay => true))
               end
            end
         end
         return sound
      end

      def checkMusicFlag
         if(cookies[:mute_on].nil?)
            condition = "Off"
            cookie_lifespan = 2.weeks.from_now.utc
            cookies[:mute_on] = {:value => condition, :expires => cookie_lifespan}
         else
            cookies[:mute_on]
         end
      end

      def getUserPrivilege(user)
         if(user.pouch.privilege == "Admin")
            value = "@"
         else
            pouchFound = Pouch.find_by_user_id(user.id)
            if(pouchFound)
               type = pouchFound.privilege
               if(type == "Keymaster")
                  value = "$"
               elsif(type == "Reviewer")
                  value = "^"
               elsif(type == "Beta")
                  value = "%"
               elsif(type == "Banned")
                  value = "!"
               elsif(type == "Trial")
                  value = "?"
               else
                  value = "~"
               end
            else
               value = "~"
            end
         end
         return value
      end

      def getUserStatus(status)
         allPouches = Pouch.all

         #Status value
         activatedUsers = allPouches.select{|pouch| pouch.activated && ((pouch.privilege != "Bot" && pouch.privilege != "Trial") && (pouch.privilege != "Admin"))}

         onlineUsers = activatedUsers.select{|pouch| !pouch.signed_out_at && (pouch.last_visited && (currentTime - pouch.last_visited) < 30.minutes)}
         inactiveUsers = activatedUsers.select{|pouch| !pouch.signed_out_at && (pouch.last_visited && (currentTime - pouch.last_visited) >= 30.minutes)}
         offlineUsers = activatedUsers.select{|pouch| (pouch.signed_in_at && pouch.signed_out_at) && !pouch.gone}
         goneUsers = activatedUsers.select{|pouch| (pouch.signed_in_at && pouch.signed_out_at) && pouch.gone}
         bots = allPouches.select{|pouch| !pouch.activated}

         #Count values
         onlineCount = onlineUsers.count
         inactiveCount = inactiveUsers.count
         offlineCount = offlineUsers.count
         goneCount = goneUsers.count
         botCount = bots.count

         value = onlineCount
         if(status == "Inactive")
            value = inactiveCount
         elsif(status == "Offline")
            value = offlineCount
         elsif(status == "Gone")
            value = goneCount
         elsif(status == "Bots")
            value = botCount
         end
         return value
      end

      def newestContent(type)
         allContents = ""

         #Determines the correct type of content to display
         if(type == "Art")
            allContents = Art.order("created_on desc")
         elsif(type == "Movie")
            allContents = Movie.order("created_on desc")
         elsif(type == "Sound")
            allContents = Sound.order("created_on desc")
         elsif(type == "Book")
            allContents = Book.order("created_on desc")
         else
            raise "Invalid content type detected!"
         end
         reviewedContents = allContents.select{|content| content.reviewed && checkBookgroupStatus(content)}
         contents = reviewedContents.take(3)
         return contents
      end

      def checkBookgroupStatus(content)
         group = ((content.bookgroup.name == "Peter Rabbit") || (current_user && content.bookgroup.id <= getBookGroups(current_user)))
         return group
      end

      def getMusicOrVideo(type, content)
         music = ""
         if(current_user)
            #Determine if we are looking at a video or audio browser
            oggbrowser = (current_user.userinfo.audiobrowser == "ogg-browser")
            if(type == "Movie" || type == "Crazybat")
               oggbrowser = (current_user.userinfo.videobrowser == "ogv-browser")
            end

            #Determine if we are looking at a video or audio browser
            mp3browser = (current_user.userinfo.audiobrowser == "mp3-browser")
            if(type == "Movie" || type == "Crazybat")
               mp3browser = (current_user.userinfo.videobrowser == "mp4-browser")
            end

            #Determines the correct type of content to play
            if(oggbrowser)
               music = ""
               if(type == "User")
                  music = content.userinfo.ogg_url
               elsif(type == "Movie")
                  music = content.ogv_url
               elsif(type == "Sound")
                  music = content.ogg_url
               elsif(type == "Homepage" || "Crazybat" || "Maintenance")
                  music = content
               end
            elsif(mp3browser)
               music = ""
               if(type == "User")
                  music = content.userinfo.mp3_url
               elsif(type == "Movie")
                  music = content.mp4_url
               elsif(type == "Sound")
                  music = content.mp3_url
               elsif(type == "Homepage" || "Crazybat" || "Maintenance")
                  music = content
               end
            end
         else
            #Determines the content to play for guests
            music = ""
            if(type == "User")
               music = content.userinfo.ogg_url
            elsif(type == "Movie")
               music = content.ogv_url
            elsif(type == "Sound")
               music = content.ogg_url
            elsif(type == "Homepage" || "Crazybat" || "Maintenance")
               music = content
            end
         end
         return music
      end

      def logout_user
         if(current_user)
            flash[:success] = "Don't worry #{current_user.vname} we will await your return."
            resetExpiretime(current_user)
            cookies.delete(:remember_token)
            self.current_user = nil
         else
            flash[:error] = "You are already logged out of the system!"
         end
      end

      def logoutExpiredUsers
         allUsers = User.order("joined_on desc")
         users = allUsers.select{|user| !user.pouch.expiretime.nil? && (currentTime >= user.pouch.expiretime)}
         if(users.count > 0)
            users.each do |user|
               resetExpiretime(user)
            end
         end
      end

      def resetExpiretime(user)
         userPouch = Pouch.find_by_user_id(user.id)
         userPouch.remember_token = "NULL"
         userPouch.last_visited = nil
         value = currentTime
         if(timeExpired)
            value = userPouch.expiretime
         end
         userPouch.signed_out_at = value
         userPouch.expiretime = nil
         @pouch = userPouch
         @pouch.save
      end

      def timeExpired
         #Determines if the user has exceed the time limit
         if(current_user)
            userPouch = Pouch.find_by_user_id(current_user.id)
            if(userPouch && !userPouch.expiretime.nil?)
               if(currentTime >= userPouch.expiretime)
                  return true
               else
                  return false
               end
            end
         else
            return false
         end
      end

      def getClock
         if(current_user)
            clockTime = currentTime.in_time_zone(current_user.country_timezone)
            if(current_user.userinfo.militarytime)
               clockTime.strftime("%H:%M:%S %Z")
            else
               clockTime.strftime("%I:%M:%S %p %Z")
            end
         else
            currentTime.strftime("%I:%M:%S %p %Z")
         end
      end

      def currentTime
         Time.zone.now
      end

      def current_user
         userPouch = Pouch.find_by_remember_token(cookies[:remember_token])
         if(userPouch)
            @current_user ||= User.find_by_vname(userPouch.user.vname)
         else
            @current_user
         end
      end

      def current_user=(user)
         @current_user = user
      end
end

Помощник пользователя

module UsersHelper

   private
      def user_params
         params.require(:user).permit(:firstname, :lastname, :email, :country, 
         :country_timezone, :military_time, :birthday, :login_id, :vname,
         :password, :password_confirmation)
      end

      def musicCommons(type)
         userFound = User.find_by_id(params[:id])
         if(userFound)
            if(current_user && current_user.id == userFound.id)
               userInfo = Userinfo.find_by_user_id(userFound.id)
               if(userInfo.music_on)
                  userInfo.music_on = false
               else
                  userInfo.music_on = true
               end
               @userinfo = userInfo
               @userinfo.save
               redirect_to user_path(@userinfo.user)
            end
         else
            redirect_to crazybat_path
         end
      end

      def showCommons(type)
         userFound = User.find_by_vname(params[:id])
         if(userFound)
            setLastpageVisited
            #visitTimer(type, userFound)
            #cleanupOldVisits
            @user = userFound
            if(type == "destroy")
               logged_in = current_user
               if(logged_in && ((logged_in.id == userFound.id) || logged_in.admin))
                  adminXorCurrentUser = (logged_in.admin && logged_in.id != userFound.id) || (!logged_in.admin && logged_in.id == userFound.id)
                  if(adminXorCurrentUser)
                     allColors = Colorscheme.all
                     allInfos = Userinfo.all
                     userColors = allColors.select{|colorscheme| colorscheme.user_id == @user.id}
                     if(userColors.size != 0)
                        userColors.each do |colorscheme|
                           infosToChange = allInfos.select{|userinfo| userinfo.colorscheme_id == colorscheme.id}
                           if(infosToChange.size != 0)
                              infosToChange.each do |userinfo|
                                 userinfo.colorscheme_id = 1
                                 @userinfo = userinfo
                                 @userinfo.save
                              end
                           end
                        end
                     end
                     @user.destroy
                     flash[:success] = "#{@user.vname} was successfully removed."
                     if(logged_in.admin)
                        redirect_to users_path
                     else
                        redirect_to root_path
                     end
                  else
                     flash[:error] = "You cannot delete the main admin account."
                     redirect_to root_path
                  end
               else
                  redirect_to root_path
               end
            end
         else
            redirect_to crazybat_path
         end
      end

      def editCommons(type)
         userFound = User.find_by_vname(params[:id])
         if(userFound)
            logged_in = current_user
            if(logged_in && ((logged_in.id == userFound.id) || logged_in.pouch.privilege == "Admin"))
               @user = userFound
               if(type == "update")
                  if(@user.update(user_params))
                     flash[:success] = "#{@user.vname} was successfully updated."
                     redirect_to user_path(@user)
                  else
                     render "edit"
                  end
               end
            else
               redirect_to root_path
            end
         else
            render "crazybat"
         end
      end

      def mode(type)
         logoutExpiredUsers
         if(timeExpired)
            logout_user
            redirect_to root_path
         else
            if(type == "index")
               logged_in = current_user
               if(logged_in && logged_in.pouch.privilege == "Admin")
                  allUsers = User.order("joined_on desc").page(params[:page]).per(10)
                  @users = allUsers
               else
                  redirect_to root_path
               end
            elsif(type == "edit" || type == "update")
               #if(current_user && current_user.admin)
               #   editCommons(type)
               #else
                  allMode = Maintenancemode.find_by_id(1)
                  userMode = Maintenancemode.find_by_id(5)
                  if(allMode.maintenance_on || userMode.maintenance_on)
                     if(allMode.maintenance_on)
                        #the render section
                        render "/start/maintenance"
                     else
                        render "/users/maintenance"
                     end
                  else
                     editCommons(type)
                  end
               #end
            elsif(type == "show" || type == "destroy")
               if(current_user && current_user.pouch.privilege == "Admin")
                  showCommons(type)
               else
                  allMode = Maintenancemode.find_by_id(1)
                  userMode = Maintenancemode.find_by_id(5)
                  if(allMode.maintenance_on || userMode.maintenance_on)
                     if(allMode.maintenance_on)
                        #the render section
                        render "/start/maintenance"
                     else
                        render "/users/maintenance"
                     end
                  else
                     showCommons(type)
                  end
               end
            elsif(type == "music")
               if(current_user && current_user.pouch.privilege == "Admin")
                  musicCommons(type)
               else
                  allMode = Maintenancemode.find_by_id(1)
                  userMode = Maintenancemode.find_by_id(5)
                  if(allMode.maintenance_on || userMode.maintenance_on)
                     if(allMode.maintenance_on)
                        #the render section
                        render "/start/maintenance"
                     else
                        render "/users/maintenance"
                     end
                  else
                     musicCommons(type)
                  end
               end
            end
         end
      end
end

Раздел входа

<% provide(:h1, "Login") %>
<div class="pageformat">
   <p><%= image_tag(@artpage.art_url(:thumb)) %></p>
   <p><%= @artpage.message %></p>
</div>
<br>
<div class="pageformat">
<%= form_with(scope: :session, url: loginpost_path) do |f| %>
   <p><%= f.label :login_id, "Login Name" %></p>
   <p><%= f.password_field :login_id %></p>
   <p><%= f.label :password %></p>
   <p><%= f.password_field :password %></p>
   <p><%= f.submit "Login" %></p>
<% end %>
</div>
<br>
<div class="pageformat">
   <p class="formlinks">New User? <%= link_to "Register now!", register_path %></p>
   <p class="formlinks">New Account? <%= link_to "Activate now!", activate_path %></p>
   <p class="formlinks">Forgot Password? <%= link_to "Forgot Password", recover_path %></p>
   <br>
   <p class="formlinks"><%= link_to 'Back', root_path %></p>
</div>

Домашняя страница:

<% provide(:h1, "Welcome to Duelingpets #{homepageAlerts}") %>
<p class="centerpagecontent"><%= playMainMusic %></p>
<div class="pageformat">
   <% if checkMusicFlag == "On" %>
      <p><%= button_to 'Unmute music', muteAudio_path, method: :post, class: "button submitbutton" %></p>
   <% else %>
      <p><%= button_to 'Mute music', muteAudio_path, method: :post, class: "button submitbutton" %></p>
   <% end %>
</div>
<br>
<p class="centerpagecontent"><%= image_tag(displayType("Mascot")) %></p>
<div class="pageformat">
   <p><%= gateStatus %></p>
   <% if criticalErrors > 0 %>
      <br>
      <p>Structural Integrity of Server down to 20%. Complete system failure imminent!</p>
      <p>Emergency cooling systems are being applied!</p>
      <p>Data Integrity down to 30%.</p>
      <p>Fire detected on databanks 2, 3, and 4!</p>
      <p>Cylinderical skipping on hard drive detected!</p>
      <p>Liquid coolent leaking detected on databanks 7, 9, and 10!</p>
      <p>Shutting off power to banks 7, 9 and 10!</p>
      <p>Free hard drive space down to 5%.</p>
      <p>Ram space is being over run!</p>
      <p>Shutting down background processes to relieve ram issues!</p>
      <p>CPU Processor 1 has completely failed!</p>
      <p>Relocating processes to Emergency CPUs 5, 6, and 7.</p>
      <p>CPU Processor 3 is nearing failure!</p>
      <p>Initiating shutdown of Processor 3!</p>
   <% end %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...