1
0
mirror of https://github.com/algora-io/tv.git synced 2025-03-17 20:17:45 +02:00

43 lines
1.1 KiB
Elixir
Raw Normal View History

2024-05-01 23:34:05 +03:00
defmodule Algora.Library.Segment do
alias Algora.Library
alias Algora.Library.{Segment, Subtitle}
use Ecto.Schema
import Ecto.Changeset
schema "segments" do
field :start, :float
field :end, :float
field :body, :string
field :embedding, {:array, :float}
belongs_to :video, Library.Video
belongs_to :starting_subtitle, Library.Subtitle
belongs_to :ending_subtitle, Library.Subtitle
timestamps()
end
@doc false
def changeset(segment, attrs) do
segment
|> cast(attrs, [:body, :start, :end])
|> validate_required([:body, :start, :end])
end
def init([]), do: nil
def init(subtitles) do
body = subtitles |> Enum.map_join("", fn %Subtitle{body: body} -> body end)
starting_subtitle = subtitles |> Enum.at(0)
ending_subtitle = subtitles |> Enum.at(-1)
%Segment{
body: body,
start: starting_subtitle.start,
end: ending_subtitle.end,
video_id: starting_subtitle.video_id,
starting_subtitle_id: starting_subtitle.id,
ending_subtitle_id: ending_subtitle.id
}
end
end