139
139
case wait_db_updated(Timeout, TimeoutFun) of
141
{ok, Db2} = couch_db:open(DbName, [{user_ctx, UserCtx}]),
142
keep_sending_changes(Req, Resp, Db2, EndSeq, Prepend2, Timeout,
143
TimeoutFun, ResponseType, Filter, End);
141
case couch_db:open(DbName, [{user_ctx, UserCtx}]) of
143
keep_sending_changes(Req, Resp, Db2, EndSeq, Prepend2, Timeout,
144
TimeoutFun, ResponseType, Filter, End);
146
end_sending_changes(Resp, EndSeq, ResponseType)
145
149
end_sending_changes(Resp, EndSeq, ResponseType)
149
153
changes_enumerator(DocInfos, {_, _, FilterFun, Resp, "continuous"}) ->
150
[#doc_info{id=Id, high_seq=Seq}|_] = DocInfos,
154
[#doc_info{id=Id, high_seq=Seq, revs=[#rev_info{deleted=Del}|_]}|_] = DocInfos,
151
155
Results0 = [FilterFun(DocInfo) || DocInfo <- DocInfos],
152
156
Results = [Result || Result <- Results0, Result /= null],
155
159
{ok, {Seq, nil, FilterFun, Resp, "continuous"}};
157
send_chunk(Resp, [?JSON_ENCODE({[{seq,Seq},{id,Id},{changes,Results}]})
161
send_chunk(Resp, [?JSON_ENCODE(changes_row(Seq, Id, Del, Results)) |"\n"]),
159
162
{ok, {Seq, nil, FilterFun, Resp, "continuous"}}
161
164
changes_enumerator(DocInfos, {_, Prepend, FilterFun, Resp, _}) ->
162
[#doc_info{id=Id, high_seq=Seq}|_] = DocInfos,
165
[#doc_info{id=Id, high_seq=Seq, revs=[#rev_info{deleted=Del}|_]}|_] = DocInfos,
163
166
Results0 = [FilterFun(DocInfo) || DocInfo <- DocInfos],
164
167
Results = [Result || Result <- Results0, Result /= null],
167
170
{ok, {Seq, Prepend, FilterFun, Resp, nil}};
169
send_chunk(Resp, [Prepend, ?JSON_ENCODE({[{seq,Seq},{id,Id},
170
{changes,Results}]})]),
172
send_chunk(Resp, [Prepend, ?JSON_ENCODE(changes_row(Seq, Id, Del, Results))]),
171
173
{ok, {Seq, <<",\n">>, FilterFun, Resp, nil}}
176
changes_row(Seq, Id, Del, Results) ->
177
{[{seq,Seq},{id,Id},{changes,Results}] ++ deleted_item(Del)}.
179
deleted_item(true) -> [{deleted,true}];
180
deleted_item(_) -> [].
174
182
send_changes(Req, Resp, Db, StartSeq, Prepend, ResponseType, FilterFun, End) ->
175
183
Style = list_to_existing_atom(
176
184
couch_httpd:qs_value(Req, "style", "main_only")),