mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Refresh item after addon is done
This commit is contained in:
@ -314,13 +314,16 @@ updateWithSub msg model =
|
||||
|
||||
ReceiveWsMessage data ->
|
||||
case data of
|
||||
Ok (JobDone task) ->
|
||||
Ok (JobDone details) ->
|
||||
let
|
||||
isProcessItem =
|
||||
task == "process-item"
|
||||
details.task == "process-item"
|
||||
|
||||
isDownloadZip =
|
||||
task == "download-query-zip"
|
||||
details.task == "download-query-zip"
|
||||
|
||||
isAddonExistingItem =
|
||||
Data.ServerEvent.isAddonExistingItem model.itemDetailModel.detail.item.id details
|
||||
|
||||
newModel =
|
||||
{ model
|
||||
@ -337,6 +340,9 @@ updateWithSub msg model =
|
||||
else if Page.isDashboardPage model.page && isProcessItem then
|
||||
updateDashboard texts Page.Dashboard.Data.reloadDashboardData newModel
|
||||
|
||||
else if Page.isDetailPage model.page && isAddonExistingItem then
|
||||
updateItemDetail texts (Page.ItemDetail.Data.ReloadItem True) newModel
|
||||
|
||||
else
|
||||
( newModel, Cmd.none, Sub.none )
|
||||
|
||||
|
@ -76,7 +76,7 @@ view texts model =
|
||||
, a
|
||||
[ class S.successMessageLink
|
||||
, href "#"
|
||||
, onClick ReloadItem
|
||||
, onClick (ReloadItem False)
|
||||
]
|
||||
[ text texts.refreshNow
|
||||
]
|
||||
|
@ -281,7 +281,7 @@ initSelectViewModel =
|
||||
|
||||
type Msg
|
||||
= ToggleMenu
|
||||
| ReloadItem
|
||||
| ReloadItem Bool
|
||||
| Init
|
||||
| SetItem ItemDetail
|
||||
| SetActiveAttachment Int
|
||||
|
@ -387,12 +387,22 @@ update inav env msg model =
|
||||
resultModel
|
||||
{ model | menuOpen = not model.menuOpen }
|
||||
|
||||
ReloadItem ->
|
||||
ReloadItem withFile ->
|
||||
if model.item.id == "" then
|
||||
resultModel model
|
||||
|
||||
else
|
||||
resultModelCmd ( model, Api.itemDetail env.flags model.item.id GetItemResp )
|
||||
resultModelCmd
|
||||
( model
|
||||
, Cmd.batch
|
||||
[ Api.itemDetail env.flags model.item.id GetItemResp
|
||||
, if withFile then
|
||||
Ports.refreshFileView "ds-pdf-view-iframe"
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
]
|
||||
)
|
||||
|
||||
FolderDropdownMsg m ->
|
||||
let
|
||||
@ -1002,7 +1012,7 @@ update inav env msg model =
|
||||
|
||||
DeleteAttachResp (Ok res) ->
|
||||
if res.success then
|
||||
update inav env ReloadItem model
|
||||
update inav env (ReloadItem False) model
|
||||
|
||||
else
|
||||
resultModel model
|
||||
|
@ -5,7 +5,7 @@
|
||||
-}
|
||||
|
||||
|
||||
module Data.ServerEvent exposing (AddonInfo, ServerEvent(..), decode)
|
||||
module Data.ServerEvent exposing (AddonInfo, JobDoneDetails, ServerEvent(..), decode, isAddonExistingItem)
|
||||
|
||||
import Json.Decode as D
|
||||
import Json.Decode.Pipeline as P
|
||||
@ -13,7 +13,7 @@ import Json.Decode.Pipeline as P
|
||||
|
||||
type ServerEvent
|
||||
= JobSubmitted String
|
||||
| JobDone String
|
||||
| JobDone JobDoneDetails
|
||||
| JobsWaiting Int
|
||||
| AddonInstalled AddonInfo
|
||||
|
||||
@ -26,6 +26,32 @@ type alias AddonInfo =
|
||||
}
|
||||
|
||||
|
||||
type alias JobDoneDetails =
|
||||
{ task : String
|
||||
, args : Maybe D.Value
|
||||
, result : Maybe D.Value
|
||||
}
|
||||
|
||||
|
||||
{-| Return wether the job done details belong to running an addon of
|
||||
that item with the given id.
|
||||
-}
|
||||
isAddonExistingItem : String -> JobDoneDetails -> Bool
|
||||
isAddonExistingItem itemId details =
|
||||
let
|
||||
itemIdDecoder =
|
||||
D.field "itemId" D.string
|
||||
|
||||
-- This decodes the structure from scalas ItemAddonTaskArgs (only itemId)
|
||||
decodedId =
|
||||
Maybe.map (D.decodeValue itemIdDecoder) details.args
|
||||
|> Maybe.andThen Result.toMaybe
|
||||
in
|
||||
details.task
|
||||
== "addon-existing-item"
|
||||
&& (itemId /= "" && decodedId == Just itemId)
|
||||
|
||||
|
||||
addonInfoDecoder : D.Decoder AddonInfo
|
||||
addonInfoDecoder =
|
||||
D.succeed AddonInfo
|
||||
@ -51,8 +77,7 @@ decodeTag : String -> D.Decoder ServerEvent
|
||||
decodeTag tag =
|
||||
case tag of
|
||||
"job-done" ->
|
||||
D.field "content" D.string
|
||||
|> D.map JobDone
|
||||
D.field "content" (D.map JobDone decodeJobDoneDetails)
|
||||
|
||||
"job-submitted" ->
|
||||
D.field "content" D.string
|
||||
@ -68,3 +93,11 @@ decodeTag tag =
|
||||
|
||||
_ ->
|
||||
D.fail ("Unknown tag: " ++ tag)
|
||||
|
||||
|
||||
decodeJobDoneDetails : D.Decoder JobDoneDetails
|
||||
decodeJobDoneDetails =
|
||||
D.map3 JobDoneDetails
|
||||
(D.field "task" D.string)
|
||||
(D.field "args" (D.maybe D.value))
|
||||
(D.field "result" (D.maybe D.value))
|
||||
|
@ -14,6 +14,7 @@ module Page exposing
|
||||
, hasSidebar
|
||||
, href
|
||||
, isDashboardPage
|
||||
, isDetailPage
|
||||
, isOpen
|
||||
, isSearchPage
|
||||
, isSecured
|
||||
@ -175,6 +176,16 @@ isDashboardPage page =
|
||||
False
|
||||
|
||||
|
||||
isDetailPage : Page -> Bool
|
||||
isDetailPage page =
|
||||
case page of
|
||||
ItemDetailPage _ ->
|
||||
True
|
||||
|
||||
_ ->
|
||||
False
|
||||
|
||||
|
||||
pageName : Page -> String
|
||||
pageName page =
|
||||
case page of
|
||||
|
@ -38,6 +38,7 @@ type Msg
|
||||
| ItemResp (Result Http.Error ItemDetail)
|
||||
| ScrollResult (Result Dom.Error ())
|
||||
| UiSettingsUpdated
|
||||
| ReloadItem Bool
|
||||
|
||||
|
||||
type alias UpdateResult =
|
||||
|
@ -47,6 +47,13 @@ update inav env msg model =
|
||||
, selectedItems = env.selectedItems
|
||||
}
|
||||
|
||||
ReloadItem withFiles ->
|
||||
let
|
||||
m =
|
||||
ItemDetailMsg (Comp.ItemDetail.Model.ReloadItem withFiles)
|
||||
in
|
||||
update inav env m model
|
||||
|
||||
ItemDetailMsg lmsg ->
|
||||
let
|
||||
result =
|
||||
|
@ -11,6 +11,7 @@ port module Ports exposing
|
||||
, printElement
|
||||
, receiveCheckQueryResult
|
||||
, receiveServerEvent
|
||||
, refreshFileView
|
||||
, removeAccount
|
||||
, setAccount
|
||||
, setUiTheme
|
||||
@ -54,6 +55,11 @@ port printElement : String -> Cmd msg
|
||||
port receiveWsMessage : (D.Value -> msg) -> Sub msg
|
||||
|
||||
|
||||
{-| Given an ID of an element that is either EMBED or IFRAME the js will reload its src
|
||||
-}
|
||||
port refreshFileView : String -> Cmd msg
|
||||
|
||||
|
||||
|
||||
--- Higher level functions based on ports
|
||||
|
||||
|
@ -121,6 +121,16 @@ elmApp.ports.printElement.subscribe(function(id) {
|
||||
}
|
||||
});
|
||||
|
||||
elmApp.ports.refreshFileView.subscribe(function(id) {
|
||||
var el = document.getElementById(id);
|
||||
if (el) {
|
||||
var tag = el.tagName;
|
||||
if (tag === "EMBED" || tag === "IFRAME") {
|
||||
var url = el.src;
|
||||
el.src = url;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var dsWebSocket = null;
|
||||
function closeWS() {
|
||||
@ -146,6 +156,8 @@ function initWS() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Websockets are not used yet for communicating to the server
|
||||
// elmApp.ports.sendWsMessage.subscribe(function(msg) {
|
||||
// socket.send(msg);
|
||||
// });
|
||||
|
Reference in New Issue
Block a user