mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-02-15 20:33:26 +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 =
|
||||
if (data.meta.fileFilter == Glob.all) src.source.fileFilterOrAll
|
||||
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
|
||||
)
|
||||
|
@ -4924,6 +4924,9 @@ components:
|
||||
fileFilter:
|
||||
type: string
|
||||
format: glob
|
||||
language:
|
||||
type: string
|
||||
format: language
|
||||
created:
|
||||
description: DateTime
|
||||
type: integer
|
||||
|
@ -583,6 +583,7 @@ trait Conversions {
|
||||
s.source.priority,
|
||||
s.source.folderId,
|
||||
s.source.fileFilter,
|
||||
s.source.language,
|
||||
s.source.created
|
||||
),
|
||||
TagList(s.tags.length, s.tags.map(mkTag).toList)
|
||||
@ -600,7 +601,8 @@ trait Conversions {
|
||||
s.priority,
|
||||
now,
|
||||
s.folder,
|
||||
s.fileFilter
|
||||
s.fileFilter,
|
||||
s.language
|
||||
)
|
||||
})
|
||||
|
||||
@ -615,7 +617,8 @@ trait Conversions {
|
||||
s.priority,
|
||||
s.created,
|
||||
s.folder,
|
||||
s.fileFilter
|
||||
s.fileFilter,
|
||||
s.language
|
||||
)
|
||||
|
||||
// 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,
|
||||
created: Timestamp,
|
||||
folderId: Option[Ident],
|
||||
fileFilter: Option[Glob]
|
||||
fileFilter: Option[Glob],
|
||||
language: Option[Language]
|
||||
) {
|
||||
|
||||
def fileFilterOrAll: Glob =
|
||||
@ -41,6 +42,7 @@ object RSource {
|
||||
val created = Column[Timestamp]("created", this)
|
||||
val folder = Column[Ident]("folder_id", this)
|
||||
val fileFilter = Column[Glob]("file_filter", this)
|
||||
val language = Column[Language]("doc_lang", this)
|
||||
|
||||
val all =
|
||||
NonEmptyList.of[Column[_]](
|
||||
@ -53,7 +55,8 @@ object RSource {
|
||||
priority,
|
||||
created,
|
||||
folder,
|
||||
fileFilter
|
||||
fileFilter,
|
||||
language
|
||||
)
|
||||
}
|
||||
|
||||
@ -66,7 +69,7 @@ object RSource {
|
||||
DML.insert(
|
||||
table,
|
||||
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] =
|
||||
@ -80,7 +83,8 @@ object RSource {
|
||||
table.enabled.setTo(v.enabled),
|
||||
table.priority.setTo(v.priority),
|
||||
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 Data.DropdownStyle as DS
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.Language exposing (Language)
|
||||
import Data.Priority exposing (Priority)
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
import Html exposing (..)
|
||||
@ -47,6 +48,8 @@ type alias Model =
|
||||
, folderId : Maybe String
|
||||
, tagModel : Comp.Dropdown.Model Tag
|
||||
, fileFilter : Maybe String
|
||||
, languageModel : Comp.Dropdown.Model Language
|
||||
, language : Maybe String
|
||||
}
|
||||
|
||||
|
||||
@ -70,6 +73,19 @@ emptyModel =
|
||||
, folderId = Nothing
|
||||
, tagModel = Util.Tag.makeDropdownModel2
|
||||
, 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
|
||||
, folder = model.folderId
|
||||
, fileFilter = model.fileFilter
|
||||
, language = model.language
|
||||
}
|
||||
in
|
||||
{ st | source = n, tags = TagList (List.length tags) tags }
|
||||
@ -124,6 +141,7 @@ type Msg
|
||||
| GetTagResp (Result Http.Error TagList)
|
||||
| TagDropdownMsg (Comp.Dropdown.Msg Tag)
|
||||
| SetFileFilter String
|
||||
| LanguageMsg (Comp.Dropdown.Msg Language)
|
||||
|
||||
|
||||
|
||||
@ -285,6 +303,28 @@ update flags msg model =
|
||||
, 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
|
||||
@ -426,7 +466,7 @@ isFolderMember model =
|
||||
|
||||
|
||||
view2 : Flags -> UiSettings -> Model -> Html Msg
|
||||
view2 flags settings model =
|
||||
view2 _ settings model =
|
||||
let
|
||||
priorityItem =
|
||||
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
|
||||
]
|
||||
]
|
||||
, 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" ]
|
||||
[ 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 "
|
||||
@ -565,13 +577,6 @@ viewLinks2 flags _ source =
|
||||
[ qrCodeView apiUrl
|
||||
]
|
||||
]
|
||||
, button
|
||||
[ class S.secondaryButton
|
||||
, class "mt-4 mb-2"
|
||||
, onClick SetTableView
|
||||
]
|
||||
[ text "Back"
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user