mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-07 15:45:59 +00:00
Merge pull request #651 from eikek/language-source
Add language to a source
This commit is contained in:
commit
9156e56d65
@ -175,7 +175,8 @@ object OUpload {
|
|||||||
fileFilter =
|
fileFilter =
|
||||||
if (data.meta.fileFilter == Glob.all) src.source.fileFilterOrAll
|
if (data.meta.fileFilter == Glob.all) src.source.fileFilterOrAll
|
||||||
else data.meta.fileFilter,
|
else data.meta.fileFilter,
|
||||||
tags = (data.meta.tags ++ src.tags.map(_.tagId.id)).distinct
|
tags = (data.meta.tags ++ src.tags.map(_.tagId.id)).distinct,
|
||||||
|
language = data.meta.language.orElse(src.source.language)
|
||||||
),
|
),
|
||||||
priority = src.source.priority
|
priority = src.source.priority
|
||||||
)
|
)
|
||||||
|
@ -4924,6 +4924,9 @@ components:
|
|||||||
fileFilter:
|
fileFilter:
|
||||||
type: string
|
type: string
|
||||||
format: glob
|
format: glob
|
||||||
|
language:
|
||||||
|
type: string
|
||||||
|
format: language
|
||||||
created:
|
created:
|
||||||
description: DateTime
|
description: DateTime
|
||||||
type: integer
|
type: integer
|
||||||
|
@ -583,6 +583,7 @@ trait Conversions {
|
|||||||
s.source.priority,
|
s.source.priority,
|
||||||
s.source.folderId,
|
s.source.folderId,
|
||||||
s.source.fileFilter,
|
s.source.fileFilter,
|
||||||
|
s.source.language,
|
||||||
s.source.created
|
s.source.created
|
||||||
),
|
),
|
||||||
TagList(s.tags.length, s.tags.map(mkTag).toList)
|
TagList(s.tags.length, s.tags.map(mkTag).toList)
|
||||||
@ -600,7 +601,8 @@ trait Conversions {
|
|||||||
s.priority,
|
s.priority,
|
||||||
now,
|
now,
|
||||||
s.folder,
|
s.folder,
|
||||||
s.fileFilter
|
s.fileFilter,
|
||||||
|
s.language
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -615,7 +617,8 @@ trait Conversions {
|
|||||||
s.priority,
|
s.priority,
|
||||||
s.created,
|
s.created,
|
||||||
s.folder,
|
s.folder,
|
||||||
s.fileFilter
|
s.fileFilter,
|
||||||
|
s.language
|
||||||
)
|
)
|
||||||
|
|
||||||
// equipment
|
// equipment
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE "source"
|
||||||
|
ADD COLUMN "doc_lang" varchar(254);
|
@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE `source`
|
||||||
|
ADD COLUMN `doc_lang` varchar(254);
|
@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE "source"
|
||||||
|
ADD COLUMN "doc_lang" varchar(254);
|
@ -19,7 +19,8 @@ case class RSource(
|
|||||||
priority: Priority,
|
priority: Priority,
|
||||||
created: Timestamp,
|
created: Timestamp,
|
||||||
folderId: Option[Ident],
|
folderId: Option[Ident],
|
||||||
fileFilter: Option[Glob]
|
fileFilter: Option[Glob],
|
||||||
|
language: Option[Language]
|
||||||
) {
|
) {
|
||||||
|
|
||||||
def fileFilterOrAll: Glob =
|
def fileFilterOrAll: Glob =
|
||||||
@ -41,6 +42,7 @@ object RSource {
|
|||||||
val created = Column[Timestamp]("created", this)
|
val created = Column[Timestamp]("created", this)
|
||||||
val folder = Column[Ident]("folder_id", this)
|
val folder = Column[Ident]("folder_id", this)
|
||||||
val fileFilter = Column[Glob]("file_filter", this)
|
val fileFilter = Column[Glob]("file_filter", this)
|
||||||
|
val language = Column[Language]("doc_lang", this)
|
||||||
|
|
||||||
val all =
|
val all =
|
||||||
NonEmptyList.of[Column[_]](
|
NonEmptyList.of[Column[_]](
|
||||||
@ -53,7 +55,8 @@ object RSource {
|
|||||||
priority,
|
priority,
|
||||||
created,
|
created,
|
||||||
folder,
|
folder,
|
||||||
fileFilter
|
fileFilter,
|
||||||
|
language
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +69,7 @@ object RSource {
|
|||||||
DML.insert(
|
DML.insert(
|
||||||
table,
|
table,
|
||||||
table.all,
|
table.all,
|
||||||
fr"${v.sid},${v.cid},${v.abbrev},${v.description},${v.counter},${v.enabled},${v.priority},${v.created},${v.folderId},${v.fileFilter}"
|
fr"${v.sid},${v.cid},${v.abbrev},${v.description},${v.counter},${v.enabled},${v.priority},${v.created},${v.folderId},${v.fileFilter},${v.language}"
|
||||||
)
|
)
|
||||||
|
|
||||||
def updateNoCounter(v: RSource): ConnectionIO[Int] =
|
def updateNoCounter(v: RSource): ConnectionIO[Int] =
|
||||||
@ -80,7 +83,8 @@ object RSource {
|
|||||||
table.enabled.setTo(v.enabled),
|
table.enabled.setTo(v.enabled),
|
||||||
table.priority.setTo(v.priority),
|
table.priority.setTo(v.priority),
|
||||||
table.folder.setTo(v.folderId),
|
table.folder.setTo(v.folderId),
|
||||||
table.fileFilter.setTo(v.fileFilter)
|
table.fileFilter.setTo(v.fileFilter),
|
||||||
|
table.language.setTo(v.language)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ import Comp.Dropdown exposing (isDropdownChangeMsg)
|
|||||||
import Comp.FixedDropdown
|
import Comp.FixedDropdown
|
||||||
import Data.DropdownStyle as DS
|
import Data.DropdownStyle as DS
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.Language exposing (Language)
|
||||||
import Data.Priority exposing (Priority)
|
import Data.Priority exposing (Priority)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
@ -47,6 +48,8 @@ type alias Model =
|
|||||||
, folderId : Maybe String
|
, folderId : Maybe String
|
||||||
, tagModel : Comp.Dropdown.Model Tag
|
, tagModel : Comp.Dropdown.Model Tag
|
||||||
, fileFilter : Maybe String
|
, fileFilter : Maybe String
|
||||||
|
, languageModel : Comp.Dropdown.Model Language
|
||||||
|
, language : Maybe String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -70,6 +73,19 @@ emptyModel =
|
|||||||
, folderId = Nothing
|
, folderId = Nothing
|
||||||
, tagModel = Util.Tag.makeDropdownModel2
|
, tagModel = Util.Tag.makeDropdownModel2
|
||||||
, fileFilter = Nothing
|
, fileFilter = Nothing
|
||||||
|
, languageModel =
|
||||||
|
Comp.Dropdown.makeSingleList
|
||||||
|
{ makeOption =
|
||||||
|
\a ->
|
||||||
|
{ value = Data.Language.toName a
|
||||||
|
, text = Data.Language.toName a
|
||||||
|
, additional = ""
|
||||||
|
}
|
||||||
|
, placeholder = "Select…"
|
||||||
|
, options = Data.Language.all
|
||||||
|
, selected = Nothing
|
||||||
|
}
|
||||||
|
, language = Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -108,6 +124,7 @@ getSource model =
|
|||||||
, priority = Data.Priority.toName model.priority
|
, priority = Data.Priority.toName model.priority
|
||||||
, folder = model.folderId
|
, folder = model.folderId
|
||||||
, fileFilter = model.fileFilter
|
, fileFilter = model.fileFilter
|
||||||
|
, language = model.language
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
{ st | source = n, tags = TagList (List.length tags) tags }
|
{ st | source = n, tags = TagList (List.length tags) tags }
|
||||||
@ -124,6 +141,7 @@ type Msg
|
|||||||
| GetTagResp (Result Http.Error TagList)
|
| GetTagResp (Result Http.Error TagList)
|
||||||
| TagDropdownMsg (Comp.Dropdown.Msg Tag)
|
| TagDropdownMsg (Comp.Dropdown.Msg Tag)
|
||||||
| SetFileFilter String
|
| SetFileFilter String
|
||||||
|
| LanguageMsg (Comp.Dropdown.Msg Language)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -285,6 +303,28 @@ update flags msg model =
|
|||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
|
LanguageMsg lm ->
|
||||||
|
let
|
||||||
|
( dm, dc ) =
|
||||||
|
Comp.Dropdown.update lm model.languageModel
|
||||||
|
|
||||||
|
newModel =
|
||||||
|
{ model | languageModel = dm }
|
||||||
|
|
||||||
|
lang =
|
||||||
|
Comp.Dropdown.getSelected dm |> List.head
|
||||||
|
|
||||||
|
model_ =
|
||||||
|
if isDropdownChangeMsg lm then
|
||||||
|
{ newModel | language = Maybe.map Data.Language.toIso3 lang }
|
||||||
|
|
||||||
|
else
|
||||||
|
newModel
|
||||||
|
in
|
||||||
|
( model_
|
||||||
|
, Cmd.map LanguageMsg dc
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- View
|
--- View
|
||||||
@ -426,7 +466,7 @@ isFolderMember model =
|
|||||||
|
|
||||||
|
|
||||||
view2 : Flags -> UiSettings -> Model -> Html Msg
|
view2 : Flags -> UiSettings -> Model -> Html Msg
|
||||||
view2 flags settings model =
|
view2 _ settings model =
|
||||||
let
|
let
|
||||||
priorityItem =
|
priorityItem =
|
||||||
Comp.FixedDropdown.Item
|
Comp.FixedDropdown.Item
|
||||||
@ -581,6 +621,21 @@ disappear then.
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
, div [ class "mb-4" ]
|
||||||
|
[ label [ class S.inputLabel ]
|
||||||
|
[ text "Language:"
|
||||||
|
]
|
||||||
|
, Html.map LanguageMsg
|
||||||
|
(Comp.Dropdown.view2
|
||||||
|
DS.mainStyle
|
||||||
|
settings
|
||||||
|
model.languageModel
|
||||||
|
)
|
||||||
|
, div [ class "text-gray-400 text-xs" ]
|
||||||
|
[ text "Used for text extraction and analysis. The collective's "
|
||||||
|
, text "default language is used if not specified here."
|
||||||
|
]
|
||||||
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -474,6 +474,18 @@ viewLinks2 flags _ source =
|
|||||||
[ text source.source.id
|
[ text source.source.id
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
, MB.view
|
||||||
|
{ start =
|
||||||
|
[ MB.SecondaryButton
|
||||||
|
{ label = "Back"
|
||||||
|
, icon = Just "fa fa-arrow-left"
|
||||||
|
, tagger = SetTableView
|
||||||
|
, title = "Back to list"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
, end = []
|
||||||
|
, rootClasses = "mb-4"
|
||||||
|
}
|
||||||
, p [ class "text-lg pt-2 opacity-75" ]
|
, p [ class "text-lg pt-2 opacity-75" ]
|
||||||
[ text "This source defines URLs that can be used by anyone to send files to "
|
[ text "This source defines URLs that can be used by anyone to send files to "
|
||||||
, text "you. There is a web page that you can share or the API url can be used "
|
, text "you. There is a web page that you can share or the API url can be used "
|
||||||
@ -565,13 +577,6 @@ viewLinks2 flags _ source =
|
|||||||
[ qrCodeView apiUrl
|
[ qrCodeView apiUrl
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, button
|
|
||||||
[ class S.secondaryButton
|
|
||||||
, class "mt-4 mb-2"
|
|
||||||
, onClick SetTableView
|
|
||||||
]
|
|
||||||
[ text "Back"
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user