wikivideo.rb 14.7 KB
# Author - Igor Portela - igorportela.com | Copyright(c) 2013. All rights reserved.
# == Schema Information
#
# Table name: wikivideos
#
#  id                                          :integer(4)      not null, primary key
#  signal_name                                 :string(255)
#  movement_type                               :string(255)
#  amount_of_hands                             :string(255)
#  facial_expression                           :string(255)
#  repeat_flag_primary                         :string(255)
#  primary_configuration_fingers               :string(255)
#  primary_orientation_of_hands                :string(255)
#  localization_of_articulation_primary        :string(255)
#  primary_configuration_fingers_left          :string(255)
#  primary_orientation_of_hands_left           :string(255)
#  localization_of_articulation_primary_left   :string(255)
#  time_spent                                  :string(255)
#  path_signal                                 :string(255)
#  radius                                      :string(255)
#  clockwise                                   :string(255)
#  orientation                                 :string(255)
#  direction                                   :string(255)
#  radius_secondary                            :string(255)
#  clockwise_secondary                         :string(255)
#  orientation_secondary                       :string(255)
#  direction_secondary                         :string(255)
#  secondary_configuration_fingers             :string(255)
#  secondary_orientation_of_hands              :string(255)
#  localization_of_articulation_secondary      :string(255)
#  secondary_configuration_fingers_left        :string(255)
#  secondary_orientation_of_hands_left         :string(255)
#  localization_of_articulation_secondary_left :string(255)
#  repeat_flag_secondary                       :string(255)
#  user_id                                     :integer(4)
#  created_at                                  :datetime        not null
#  updated_at                                  :datetime        not null
#
class Wikivideo < ActiveRecord::Base
  # Relationships
  belongs_to :user

  # Protection
#attr_accessible :id, :signal_name, :movement_type , :amount_of_hands, :facial_expression, :repeat_flag_primary, :primary_configuration_fingers, :primary_orientation_of_hands, :subdivision_of_articulation_primary, :localization_of_articulation_primary, :time_spent, :user_id, :created_at, :updated_at 

  # Scope
  default_scope order('signal_name asc')
  scope :by_user, select("id, user_id").where("user_id IS NOT NULL").group("user_id").order('user_id')
  scope :only_user, lambda{ |user_id| select("id, user_id").where(user_id: user_id).group("user_id").order('user_id') }
  scope :time_avg, select("AVG(time_spent) as time")
  scope :by_month, select("id").where("month(created_at) = ? and year(created_at) = ?",Time.now.month, Time.now.year).order('id')
  scope :by_one_user, lambda{ |user_id| where(user_id: user_id)}


  # ===================  Timely motion  ===================
  def punctual_rules(params, current_user)
    insert_punctual(params, current_user)
  end

  def insert_punctual(params, current_user)
    wikivideo = Wikivideo.create(
        :signal_name => params[:nome_sinal], 
        :movement_type  => params[:tipo_movimento],
        :amount_of_hands => params[:qtde_maos], 
        :facial_expression => params[:expressao_facial], 
        :repeat_flag_primary => params[:flag_rep_primaria], 
        :primary_configuration_fingers => params[:config_dedos_primaria], 
        :primary_orientation_of_hands => params[:orit_mao_primaria], 
        :localization_of_articulation_primary => params[:loc_art_primaria],
        :secondary_configuration_fingers => params[:config_dedos_secundaria], 
        :secondary_orientation_of_hands => params[:orit_mao_secundaria], 
        :localization_of_articulation_secondary => params[:loc_art_secundaria],
        :time_spent => params[:temp_gasto], 
        :user_id => current_user
    )
    id = wikivideo.id.to_s
    wikivideo.update_attributes(:path_signal => "/uploads/files/"+id+"/"+params[:nome_sinal]+".flv")
    system_punctual(id, params, wikivideo)
  end

  def system_punctual(id, params, wikivideo)
    Dir.mkdir("public/uploads/files/"+id)
    outFile = File.new("public/uploads/files/"+id+"/"+id+"_PontualDir", "w+")
    outFile.puts(params[:config_dedos_primaria]+"\n"+params[:orit_mao_primaria]+"\n"+params[:loc_art_primaria]+"\n"+params[:qtde_maos]+"\n"+params[:nome_sinal]+"\n"+id)
    outFile.close

    if params[:qtde_maos] == "duas"
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_PontualEsq", "w+")
      outFile.puts(params[:config_dedos_secundaria]+"\n"+params[:orit_mao_secundaria]+"\n"+params[:loc_art_secundaria]+"\n"+params[:expressao_facial]+"")
      outFile.close
    else
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_PontualEsq", "w+")
      outFile.puts("Nenhum"+"\n"+params[:expressao_facial])
      outFile.close
    end

    system("cp public/uploads/files/"+id+"/"+id+"_PontualDir /usr/share/WikiLIBRAS/server/ScriptsPython/")
    system("cp public/uploads/files/"+id+"/"+id+"_PontualEsq /usr/share/WikiLIBRAS/server/ScriptsPython/")

    response_path = system("cd /usr/share/WikiLIBRAS/server/ScriptsPython/ ; blender -b avatarNovoCabelo_12__ik_.blend -P movPontual.py "+id+"_PontualDir "+id+"_PontualEsq")
    return wikivideo
  end

  # ===================  Circular motion  ===================
  def circular_rules(params, current_user)
    insert_circular(params, current_user)
  end

  def insert_circular(params, current_user)
    wikivideo = Wikivideo.create(
      :signal_name => params[:nome_sinal], 
      :movement_type  => params[:tipo_movimento], 
      :amount_of_hands => params[:qtde_maos],
      :repeat_flag_primary => params[:flag_rep_primaria],         
      :clockwise => params[:sentido],   
      :radius => params[:raio],
      :orientation => params[:orientacao],
      :primary_configuration_fingers => params[:config_dedos_primaria],   
      :facial_expression => params[:expressao_facial],
      :primary_orientation_of_hands => params[:orit_mao_primaria],
      :localization_of_articulation_primary => params[:loc_art_primaria],
      :clockwise_secondary => params[:sentido_mao_secundaria],
      :radius_secondary => params[:raio_mao_secundaria],
      :orientation_secondary => params[:orientacao_mao_secundaria],
      :secondary_orientation_of_hands => params[:orit_mao_secundaria],
      :secondary_configuration_fingers => params[:config_dedos_secundaria],
      :localization_of_articulation_secondary => params[:loc_art_secundaria],
      :repeat_flag_secondary => params[:flag_rep_primaria],  
      :time_spent => params[:temp_gasto],
      :user_id => current_user
    )
    
    id = wikivideo.id.to_s
    wikivideo.update_attributes(:path_signal => "/uploads/files/"+id+"/"+params[:nome_sinal]+".flv")
    system_circular(id, params, wikivideo)
  end

  def system_circular(id, params, wikivideo)
    Dir.mkdir("public/uploads/files/"+id)
    outFile = File.new("public/uploads/files/"+id+"/"+id+"_CircularDir", "w+")
    outFile.puts(params[:config_dedos_primaria]+"\n"+params[:orit_mao_primaria]+"\n"+params[:loc_art_primaria]+"\n"+params[:raio]+"\n"+params[:sentido]+"\n"+params[:orientacao]+"\n"+params[:flag_rep_primaria]+"\n"+params[:qtde_maos]+"\n"+params[:nome_sinal]+"\n"+id)
    outFile.close

    if params[:qtde_maos] == "duas"
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_CircularEsq", "w+")
      outFile.puts(params[:config_dedos_secundaria]+"\n"+params[:orit_mao_secundaria]+"\n"+params[:loc_art_secundaria]+"\n"+params[:raio_mao_secundaria]+"\n"+params[:sentido_mao_secundaria]+"\n"+params[:orit_mao_secundaria]+"\n"+params[:flag_rep_primaria]+"\n"+params[:expressao_facial])
      outFile.close
    else
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_CircularEsq", "w+")
      outFile.puts("Nenhum"+"\n"+params[:expressao_facial])
      outFile.close
    end

    system("cp public/uploads/files/"+id+"/"+id+"_CircularDir /usr/share/WikiLIBRAS/server/ScriptsPython/")
    system("cp public/uploads/files/"+id+"/"+id+"_CircularEsq /usr/share/WikiLIBRAS/server/ScriptsPython/")

    response_path = system("cd /usr/share/WikiLIBRAS/server/ScriptsPython/ ; blender -b avatarNovoCabelo_12__ik_.blend -P MovCircular.py "+id+"_CircularDir "+id+"_CircularEsq")

    return wikivideo
  end

  # ===================  Semicircular motion  ===================
  def semicircular_rules(params, current_user)
    insert_semicircular(params, current_user)
  end

  def insert_semicircular(params, current_user)
    wikivideo = Wikivideo.create(
      :signal_name => params[:nome_sinal], 
      :movement_type  => params[:tipo_movimento], 
      :amount_of_hands => params[:qtde_maos],
      :facial_expression => params[:expressao_facial], 
      :repeat_flag_primary => params[:flag_rep_primaria], 
      :primary_configuration_fingers => params[:config_dedos_primaria], 
      :primary_orientation_of_hands => params[:orit_mao_primaria], 
      :localization_of_articulation_primary => params[:loc_art_primaria],  
      :time_spent => params[:temp_gasto], 
      :radius => params[:raio],
      :clockwise => params[:sentido],
      :orientation => params[:orientacao],
      :direction => params[:direcao],
      :radius_secondary => params[:raio_secundario],
      :clockwise_secondary => params[:sentido_secundario],
      :orientation_secondary => params[:orientacao_secundario],
      :direction_secondary => params[:direcao_secundario],
      :secondary_configuration_fingers => params[:config_dedos_secundaria], 
      :secondary_orientation_of_hands => params[:orit_mao_secundaria],  
      :localization_of_articulation_secondary => params[:loc_art_secundaria],
      :repeat_flag_secondary => params[:flag_rep_primaria],
      :user_id => current_user
    )
    id = wikivideo.id.to_s
    wikivideo.update_attributes(:path_signal => "/uploads/files/"+id+"/"+params[:nome_sinal]+".flv")
    system_semicircular(id, params, wikivideo)
  end

  def system_semicircular(id, params, wikivideo)
    Dir.mkdir("public/uploads/files/"+id)
    outFile = File.new("public/uploads/files/"+id+"/"+id+"_SemiCircularDir", "w+")
    outFile.puts(params[:config_dedos_primaria]+"\n"+params[:orit_mao_primaria]+"\n"+params[:loc_art_primaria]+"\n"+params[:raio]+"\n"+params[:sentido]+"\n"+params[:orientacao]+"\n"+params[:direcao]+"\n"+params[:flag_rep_primaria]+"\n"+params[:qtde_maos]+"\n"+params[:nome_sinal]+"\n"+id)
    outFile.close

    if params[:qtde_maos] == "duas"
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_SemiCircularEsq", "w+")
      outFile.puts(params[:config_dedos_secundaria]+"\n"+params[:orit_mao_secundaria]+"\n"+params[:loc_art_secundaria]+"\n"+params[:raio_secundario]+"\n"+params[:sentido_secundario]+"\n"+params[:orientacao_secundario]+"\n"+params[:direcao_secundario]+"\n"+params[:flag_rep_primaria]+"\n"+params[:expressao_facial])
      outFile.close
    else
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_SemiCircularEsq", "w+")
      outFile.puts("Nenhum"+"\n"+params[:expressao_facial])
      outFile.close
    end

    system("cp public/uploads/files/"+id+"/"+id+"_SemiCircularDir /usr/share/WikiLIBRAS/server/ScriptsPython/")
    system("cp public/uploads/files/"+id+"/"+id+"_SemiCircularEsq /usr/share/WikiLIBRAS/server/ScriptsPython/")

    response_path = system("cd /usr/share/WikiLIBRAS/server/ScriptsPython/ ; blender -b avatarNovoCabelo_12__ik_.blend -P MovSemiCircular.py "+id+"_SemiCircularDir "+id+"_SemiCircularEsq")

    return wikivideo
  end

  # ===================  Rectilinear motion  ===================
  def rectilinear_rules(params, current_user)
    insert_rectilinear(params, current_user)
  end

  def insert_rectilinear(params, current_user)
    wikivideo = Wikivideo.create(
      :signal_name => params[:nome_sinal], 
      :movement_type  => params[:tipo_movimento], 
      :amount_of_hands => params[:qtde_maos],
      :facial_expression => params[:expressao_facial], 
      :repeat_flag_primary => params[:flag_rep_primaria], 
      :primary_configuration_fingers => params[:config_dedos_primaria], 
      :primary_orientation_of_hands => params[:orit_mao_primaria], 
      :localization_of_articulation_primary => params[:loc_art_primaria],
      :primary_configuration_fingers_left => params[:config_dedos_primaria_left], 
      :primary_orientation_of_hands_left => params[:orit_mao_primaria_left],
      :localization_of_articulation_primary_left => params[:loc_art_primaria_left],
      :time_spent => params[:temp_gasto], 
      :secondary_configuration_fingers => params[:config_dedos_secundaria],
      :secondary_orientation_of_hands => params[:orit_mao_secundaria],
      :localization_of_articulation_secondary => params[:loc_art_secundaria],
      :secondary_configuration_fingers_left => params[:config_dedos_secundaria_left],
      :secondary_orientation_of_hands_left => params[:orit_mao_secundaria_left],
      :localization_of_articulation_secondary_left => params[:loc_art_secundaria_left],
      :repeat_flag_secondary => params[:flag_rep_primaria], 
      :user_id => current_user
    )
    id = wikivideo.id.to_s
    wikivideo.update_attributes(:path_signal => "/uploads/files/"+id+"/"+params[:nome_sinal]+".flv")
    system_rectilinear(id, params, wikivideo)
  end

  def system_rectilinear(id, params, wikivideo)
    Dir.mkdir("public/uploads/files/"+id)
    outFile = File.new("public/uploads/files/"+id+"/"+id+"_RetiDir", "w+")
    outFile.puts(params[:config_dedos_primaria]+"\n"+params[:orit_mao_primaria]+"\n"+params[:loc_art_primaria]+"\n"+params[:config_dedos_secundaria]+"\n"+params[:orit_mao_secundaria]+"\n"+params[:loc_art_secundaria]+"\n"+params[:flag_rep_primaria]+"\n"+params[:qtde_maos]+"\n"+params[:nome_sinal]+"\n"+id)
    outFile.close

    if params[:qtde_maos] == "duas"
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_RetiEsq", "w+")
      outFile.puts(params[:config_dedos_primaria_left]+"\n"+params[:orit_mao_primaria_left]+"\n"+params[:loc_art_primaria_left]+"\n"+params[:config_dedos_secundaria_left]+"\n"+params[:orit_mao_secundaria_left]+"\n"+params[:loc_art_secundaria_left]+"\n"+params[:flag_rep_primaria]+"\n"+params[:expressao_facial])
      outFile.close
    else
      outFile = File.new("public/uploads/files/"+id+"/"+id+"_RetiEsq", "w+")
      outFile.puts("Nenhum"+"\n"+params[:expressao_facial])
      outFile.close
    end

    system("cp public/uploads/files/"+id+"/"+id+"_RetiDir /usr/share/WikiLIBRAS/server/ScriptsPython/")
    system("cp public/uploads/files/"+id+"/"+id+"_RetiEsq /usr/share/WikiLIBRAS/server/ScriptsPython/")

    response_path = system("cd /usr/share/WikiLIBRAS/server/ScriptsPython/ ; blender -b avatarNovoCabelo_12__ik_.blend -P MovRetilineo.py "+id+"_RetiDir "+id+"_RetiEsq")

    return wikivideo
  end
end