mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Apply folder restriction to fulltext only search
And update index when folder changes.
This commit is contained in:
@ -58,7 +58,7 @@ trait FtsClient[F[_]] {
|
||||
collective: Ident,
|
||||
name: String
|
||||
): F[Unit] =
|
||||
updateIndex(logger, TextData.item(itemId, collective, Some(name), None))
|
||||
updateIndex(logger, TextData.item(itemId, collective, None, Some(name), None))
|
||||
|
||||
def updateItemNotes(
|
||||
logger: Logger[F],
|
||||
@ -68,7 +68,7 @@ trait FtsClient[F[_]] {
|
||||
): F[Unit] =
|
||||
updateIndex(
|
||||
logger,
|
||||
TextData.item(itemId, collective, None, Some(notes.getOrElse("")))
|
||||
TextData.item(itemId, collective, None, None, Some(notes.getOrElse("")))
|
||||
)
|
||||
|
||||
def updateAttachmentName(
|
||||
@ -84,12 +84,20 @@ trait FtsClient[F[_]] {
|
||||
itemId,
|
||||
attachId,
|
||||
collective,
|
||||
None,
|
||||
Language.English,
|
||||
Some(name.getOrElse("")),
|
||||
None
|
||||
)
|
||||
)
|
||||
|
||||
def updateFolder(
|
||||
logger: Logger[F],
|
||||
itemId: Ident,
|
||||
collective: Ident,
|
||||
folder: Option[Ident]
|
||||
): F[Unit]
|
||||
|
||||
def removeItem(logger: Logger[F], itemId: Ident): F[Unit]
|
||||
|
||||
def removeAttachment(logger: Logger[F], attachId: Ident): F[Unit]
|
||||
@ -117,6 +125,14 @@ object FtsClient {
|
||||
def updateIndex(logger: Logger[F], data: Stream[F, TextData]): F[Unit] =
|
||||
logger.warn("Full-text search is disabled!")
|
||||
|
||||
def updateFolder(
|
||||
logger: Logger[F],
|
||||
itemId: Ident,
|
||||
collective: Ident,
|
||||
folder: Option[Ident]
|
||||
): F[Unit] =
|
||||
logger.warn("Full-text search is disabled!")
|
||||
|
||||
def indexData(logger: Logger[F], data: Stream[F, TextData]): F[Unit] =
|
||||
logger.warn("Full-text search is disabled!")
|
||||
|
||||
|
@ -10,11 +10,16 @@ import docspell.common._
|
||||
* Searches must only look for given collective and in the given list
|
||||
* of item ids, if it is non-empty. If the item set is empty, then
|
||||
* don't restrict the result in this way.
|
||||
*
|
||||
* The set of folders must be used to restrict the results only to
|
||||
* items that have one of the folders set or no folder set. If the
|
||||
* set is empty, the restriction does not apply.
|
||||
*/
|
||||
final case class FtsQuery(
|
||||
q: String,
|
||||
collective: Ident,
|
||||
items: Set[Ident],
|
||||
folders: Set[Ident],
|
||||
limit: Int,
|
||||
offset: Int,
|
||||
highlight: FtsQuery.HighlightSetting
|
||||
@ -22,6 +27,9 @@ final case class FtsQuery(
|
||||
|
||||
def nextPage: FtsQuery =
|
||||
copy(offset = limit + offset)
|
||||
|
||||
def withFolders(fs: Set[Ident]): FtsQuery =
|
||||
copy(folders = fs)
|
||||
}
|
||||
|
||||
object FtsQuery {
|
||||
|
@ -10,6 +10,8 @@ sealed trait TextData {
|
||||
|
||||
def collective: Ident
|
||||
|
||||
def folder: Option[Ident]
|
||||
|
||||
final def fold[A](f: TextData.Attachment => A, g: TextData.Item => A): A =
|
||||
this match {
|
||||
case a: TextData.Attachment => f(a)
|
||||
@ -23,6 +25,7 @@ object TextData {
|
||||
item: Ident,
|
||||
attachId: Ident,
|
||||
collective: Ident,
|
||||
folder: Option[Ident],
|
||||
lang: Language,
|
||||
name: Option[String],
|
||||
text: Option[String]
|
||||
@ -36,15 +39,17 @@ object TextData {
|
||||
item: Ident,
|
||||
attachId: Ident,
|
||||
collective: Ident,
|
||||
folder: Option[Ident],
|
||||
lang: Language,
|
||||
name: Option[String],
|
||||
text: Option[String]
|
||||
): TextData =
|
||||
Attachment(item, attachId, collective, lang, name, text)
|
||||
Attachment(item, attachId, collective, folder, lang, name, text)
|
||||
|
||||
final case class Item(
|
||||
item: Ident,
|
||||
collective: Ident,
|
||||
folder: Option[Ident],
|
||||
name: Option[String],
|
||||
notes: Option[String]
|
||||
) extends TextData {
|
||||
@ -56,8 +61,9 @@ object TextData {
|
||||
def item(
|
||||
item: Ident,
|
||||
collective: Ident,
|
||||
folder: Option[Ident],
|
||||
name: Option[String],
|
||||
notes: Option[String]
|
||||
): TextData =
|
||||
Item(item, collective, name, notes)
|
||||
Item(item, collective, folder, name, notes)
|
||||
}
|
||||
|
Reference in New Issue
Block a user