Patch title: Release 85 bulk changes
Abstract:
File: /pliant/appli/forum/sync.remote
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/remote/client.pli"
module "database.pli"


function create_debate forum_id debate_id title abstract
  arg Str forum_id debate_id title abstract 
  if (forum_database:data:forum:forum_id:debate create debate_id)=success
    var Data:ForumDebate d :> forum_database:data:forum:forum_id:debate debate_id
    d :> forum_database:data:forum:forum_id:debate debate_id
    var DateTime now := datetime
    d subpath := (string now:year)+(right (string now:month) 2 "0")+"/"+(right (string now:day) 2 "0")+"/"
    d title := title
    d abstract := abstract
 

function patch_upload forum_id local_id server -> status
  arg Str forum_id local_id server ; arg ExtendedStatus status
  var Data:ForumDebate d0 :> forum_database:data:forum:forum_id:debate:local_id
  var Str title := d0 title
  var Str abstract := d0 abstract
  var Str client remote_id
  var Str err := "success"
  remote server
    control c { client := c ; true }
    remote_id := local_id
    if (remote_id search "." -1)=(-1)
      remote_id += "."+client
    if (remote_id parse any:(var Str short_id) "." pattern:computer_fullname)
      remote_id := short_id
    control c forum_database:data:forum:forum_id:reference_path<>""
    var Str servers := forum_database:data:forum:forum_id:patch_servers
    control c (servers="*" and (local_id search "." -1)=(-1)) or (c is_one_of servers)
  local_streaming s
    var Data:Forum f :> forum_database:data:forum:forum_id
    var Data:ForumDebate d :> f:debate local_id
    s file_tree_send (forum_path f d "/patch/")
  remote_streaming s
    create_debate forum_id remote_id title abstract
    var Data:Forum f :> forum_database:data:forum:forum_id
    var Data:ForumDebate d :> f:debate remote_id
    s file_tree_receive (forum_path f d "/patch/")
    d update (forum_path f d "/patch/")
  failure msg
    err := msg
  status := shunt err="success" success failure:err


function patch_download forum_id remote_id server -> status
  arg Str forum_id remote_id server ; arg ExtendedStatus status
  var Str title abstract
  var Str err := "success"
  remote server
    control c forum_database:data:forum:forum_id:reference_path<>""
    var Str servers := forum_database:data:forum:forum_id:patch_servers
    control c servers="*" or (c is_one_of servers)
    modify title abstract
    var Data:ForumDebate d :> forum_database:data:forum:forum_id:debate remote_id
    control c exists:d
    title := d title
    abstract := d abstract
  local_streaming s
    var Bool create
    var Str local_id := remote_id
    if (local_id search "." -1)=(-1)
      local_id += "."+server  
    if (local_id parse any:(var Str short_id) "." pattern:computer_fullname)
      local_id := short_id
    create_debate forum_id local_id title abstract
    var Data:Forum f :> forum_database:data:forum:forum_id
    var Data:ForumDebate d :> f:debate local_id
    s file_tree_receive (forum_path f d "/patch/")
    d update (forum_path f d "/patch/")
  remote_streaming s
    var Data:Forum f :> forum_database:data:forum:forum_id
    var Data:ForumDebate d :> f:debate remote_id
    s file_tree_send (forum_path f d "/patch/")
  failure msg
    err := msg
  status := shunt err="success" success failure:err


export patch_upload patch_download