diff --git a/apps/roster/priv/migrations/20180131171206_settings_in_job.erl b/apps/roster/priv/migrations/20180131171206_settings_in_job.erl deleted file mode 100644 index 30c641d48b77943bc436b9d7a90d75c37b0ec070..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180131171206_settings_in_job.erl +++ /dev/null @@ -1,36 +0,0 @@ --module('20180131171206_settings_in_job'). --behavior(db_migration). --export([up/0, down/0]). - --include_lib("kvs/include/kvs.hrl"). - --record(action, {name= <<"publish">> :: [] | binary(), data=[]:: binary() | integer() | list(term())}). --record('Job', { id = [] :: [] | integer(), - container=chain :: atom() | chain, - feed_id = [], - next = [] :: [] | integer(), - prev = [] :: [] | integer(), - context= [] :: [] | integer() | binary(), - proc = [], - time=[] :: [] | integer(), - data=[], - events=[], - settings = [], - status=[] :: [] | init | update | delete | pending | stop | complete}). - -upd_job([]) -> []; -upd_job(Job) -> roster:upd_record(Job, #'Job'.events, []). - -transform() -> - mnesia:transform_table('Job', fun upd_job/1, record_info(fields, 'Job')), - [begin [CJ2, FJ2] = [case J of #'Job'{}->J;_ -> upd_job(J) end||J<-[CJ, FJ]], - kvs:put(W#writer{cache = CJ2, first = FJ2}) - end || #writer{id=#action{}, cache = CJ, first = FJ}=W<-kvs:all(writer)], - [[case J of []->ok;_ -> #'Job'{} = J end||J<-[CJ, FJ]]|| #writer{id=#action{}, cache = CJ, first = FJ}<-kvs:all(writer)], - ok. - - -up() -> roster:up_table('Job', 12, 13, fun transform/0). - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180202171308_job_patch.erl b/apps/roster/priv/migrations/20180202171308_job_patch.erl deleted file mode 100644 index 661243ef4a717c051a88e9784ce293e49db05de5..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180202171308_job_patch.erl +++ /dev/null @@ -1,41 +0,0 @@ --module('20180202171308_job_patch'). --behavior(db_migration). --export([up/0, down/0]). - --include_lib("bpe/include/bpe.hrl"). --include_lib("kvs/include/kvs.hrl"). - --record(action, {name= <<"publish">> :: [] | binary(), data=[]:: binary() | integer() | list(term())}). --record('Job', { id = [] :: [] | integer(), - container=chain :: atom() | chain, - feed_id = [], - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - context= [] :: [] | integer() | binary(), - proc = [], - time=[] :: [] | integer(), - data=[], - events=[], - settings = [], - status=[] :: [] | init | update | delete | pending | stop | complete}). - - --record(feed, {?CONTAINER, aclver=[]}). - -up() -> - S=case kvs:get(feed, process) of - {ok,#feed{top=Top}=Feed} -> - ProcIDs=kvs:fold(fun(#process{name=Name}=A,Acc) -> [element(2,A)|Acc] end,[], - process, Feed#feed.top,undefined, #iterator.prev,#kvs{mod=store_mnesia}), - [ case bpe:find_pid(P) of undefined -> bpe:cleanup(P), P; _ -> [] end|| P<-ProcIDs]; - _ -> [] end, - roster:recompile(roster), - [kvs:delete(writer, Act)|| #writer{id=#action{}=Act}<-kvs:all(writer)], - [kvs:delete(reader, Id)|| #'Job'{context=Id}<-kvs:all('Job'), Id/=[]], - mnesia:delete_table('Shedule'), - mnesia:delete_table('Job'), - kvs:init(mnesia,roster), - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180206140107_schedule_patch.erl b/apps/roster/priv/migrations/20180206140107_schedule_patch.erl deleted file mode 100644 index 9a8eb144016492b848558eb4968522150f2aa06b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180206140107_schedule_patch.erl +++ /dev/null @@ -1,47 +0,0 @@ --module('20180206140107_schedule_patch'). --behavior(db_migration). --export([up/0, down/0]). - --include_lib("bpe/include/bpe.hrl"). --include_lib("kvs/include/kvs.hrl"). - --record('Schedule', { id =[] ::[] | integer(), - proc=[]::[] | integer(), - data=[]::[] | list(term()), - state=[] :: [] | term()}). - --record(action, {name= <<"publish">> :: [] | binary(), data=[]:: binary() | integer() | list(term())}). --record('Job', { id = [] :: [] | integer(), - container=chain :: atom() | chain, - feed_id = [], - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - context= [] :: [] | integer() | binary(), - proc = [], - time=[] :: [] | integer(), - data=[], - events=[], - settings = [], - status=[] :: [] | init | update | delete | pending | stop | complete}). - --record(feed, {?CONTAINER, aclver=[]}). - -up() -> - roster:recompile(roster), - S=case kvs:get(feed, process) of - {ok,#feed{top=Top}=Feed} -> - ProcIDs=kvs:fold(fun(#process{name=Name}=A,Acc) -> [element(2,A)|Acc] end,[], - process, Feed#feed.top,undefined, #iterator.prev,#kvs{mod=store_mnesia}), - [ case bpe:find_pid(P) of undefined -> bpe:cleanup(P), P; PID -> PID ! {'DOWN', <<>>, <<>>, <<>>, <<>>}, - timer:sleep(4000), - bpe:cleanup(P),P end|| P<-ProcIDs]; - _ -> [] end, - [kvs:put(J#'Job'{status=delete})|| J<-kvs:all('Job')], - kvs:delete(config, 'Shedule'), - kvs:delete(id_seq, "Shedule.tables"), - mnesia:delete_table('Shedule'), - kvs:init(mnesia,roster), - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180206174350_add_server_id_to_star_model.erl b/apps/roster/priv/migrations/20180206174350_add_server_id_to_star_model.erl deleted file mode 100644 index 852609c2c2598558b10be652fde3d55f2a822bc3..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180206174350_add_server_id_to_star_model.erl +++ /dev/null @@ -1,142 +0,0 @@ --module('20180206174350_add_server_id_to_star_model'). --behavior(db_migration). --export([up/0, down/0]). - -%% actual DB structure - --record(p2p, {from = [] :: [] | binary(), - to = [] :: [] | binary() }). - --record(muc, {name = [] :: [] | binary() }). - --record('Desc', {id = [] :: [] | binary(), - mime = <<"text">> :: [] | binary(), - payload = [] :: [] | binary(), - size = 0 :: integer(), - filename = [] :: [] | binary(), - info = [] :: [] | binary()}). - --record('Message', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [] :: #muc{} | #p2p{}, - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - msg_id = [] :: [] | binary(), - from = [] :: [] | binary(), - to = [] :: [] | binary(), - created = [] :: [] | integer() | binary(), - files = [] :: [] | list(#'Desc'{}), - type = [] :: [] | atom() | reply | forward | sched | read - | online | offline | join | leave | add | clear, - link = [] :: [] | integer(), - seenby = [] :: [] | list(binary() | integer()), - repliedby = [] :: [] | list(integer()), - status = [] :: [] | client | async | delete - | sent | internal | update | edit | muc }). - --record('Tag', {roster_id = [] :: [] | integer(), - name = [] :: binary(), - color = [] :: binary(), - status = [] :: [] | create | remove | edit }). - --record('Star', {id = [] :: [] | integer(), - client_id = [] :: [] | binary(), - roster_id = [] :: [] | integer(), - message = [] :: #'Message'{}, - tags = [] :: list(#'Tag'{}), - status = [] :: [] | add | remove }). - --record('Feature', {id = [] :: [] | binary(), - key = [] :: [] | binary(), - value = [] :: [] | binary(), - group = [] :: [] | binary() }). - --record('Member', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [] :: #muc{} | #p2p{}, - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - feeds = [] :: list(), - phone_id = [] :: [] | binary(), - avatar = [] :: [] | binary(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - alias = [] :: [] | binary(), - email = [] :: [] | binary(), - vox_id = [] :: [] | binary(), - reader = 0 :: [] | integer(), - update = 0 :: [] | integer(), - settings = [] :: [] | list(#'Feature'{}), - presence = [] :: [] | online | offline, - status = [] :: [] | admin | member | removed | patch }). - --record('Room', {id = [] :: [] | binary(), - name = [] :: [] | binary(), - description = [] :: [] | binary(), - settings = [] :: list(), - members = [] :: list(#'Member'{}), - admins = [] :: list(#'Member'{}), - data = [] :: [] | list(#'Desc'{}), - type = [] :: [] | atom() | group | channel, - tos = [] :: [] | binary(), - tos_update = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - readers = [] :: list(integer()), - last_msg = [] :: [] | #'Message'{}, - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - status = [] :: [] | create | join | leave - | ban | unban | add | remove | mute | unmute - | patch | get | delete | settings - | voice | video }). - --record('Contact', {phone_id = [] :: [] | binary(), - avatar = [] :: [] | binary(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - nick = [] :: [] | binary(), - email = [] :: [] | binary(), - vox_id = [] :: [] | binary(), - reader = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - last_msg = [] :: [] | #'Message'{}, - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - settings = [] :: [] | list(#'Feature'{}), - presence = [] :: [] | atom(), - status = [] :: [] | request | authorization | internal - | friend | last_msg | ban | banned | deleted }). - --record('Roster', {id = [] :: [] | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [] :: list(#'Contact'{}), - roomlist = [] :: list(#'Room'{}), - favorite = [] :: list(#'Star'{}), - tags = [] :: list(#'Tag'{}), - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). - -up() -> -%% stop server nodes - roster:stop_vnodes(), - roster:recompile(roster), - timer:sleep(1000), -%% add Star.id and fill it with next Star.id value - [begin - UpdFavMsgs = lists:flatten([begin - roster:upd_record(FavMsg, 1, kvs:next_id('Star', 1)) - end || FavMsg <- FavMsgs]), - kvs:put(R#'Roster'{favorite = UpdFavMsgs}) - end || #'Roster'{favorite = FavMsgs} = R <- kvs:all('Roster')], -%% start server nodes - roster:start_vnodes(), - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180219153939_action_to_act.erl b/apps/roster/priv/migrations/20180219153939_action_to_act.erl deleted file mode 100644 index 2ebe8f4371f66d4f376487b7f759be04753d7595..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180219153939_action_to_act.erl +++ /dev/null @@ -1,91 +0,0 @@ --module('20180219153939_action_to_act'). --behavior(db_migration). --export([up/0, down/0]). - --record(writer, {id = [] :: term(), % {p2p,_,_} | {muc,_} - count = 0 :: integer(), - cache = [] :: [] | tuple(), - args = [] :: term(), - first = [] :: [] | tuple()}). - --record(reader, {id = [] :: term(), % phone_id | {p2p,_,_} | {muc,_,_} - pos = 0 :: [] | integer(), - cache = [] :: [] | integer(), - args = [] :: term(), - feed = [] :: term(), % {p2p,_,_} | {muc,_} -- link to writer - dir = 0 :: 0 | 1}). - --record(kvs, {mod,cx}). - --define(CONTAINER, id=[] :: [] | integer(), - top=[] :: [] | integer(), - rear=[] :: [] | integer(), - count=0 :: integer()). - --define(ITERATOR(Container), id=[] :: [] | integer(), - container=Container :: atom(), - feed_id=[] :: term(), - prev=[] :: [] | integer(), - next=[] :: [] | integer(), - feeds=[] :: list()). - --record(iterator, {?ITERATOR([])}). - --record(feed, {?CONTAINER, aclver=[]}). --record(action, {name= <<"publish">> :: [] | binary(), data=[]:: binary() | integer() | list(term())}). --record(act, {name= <<"publish">> :: [] | binary(), data=[]:: binary() | integer() | list(term())}). -%% --record('Job', {id = [] :: [] | integer(), - container=chain :: atom() | chain, - feed_id = [] :: #act{}, - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - context= [] :: [] | integer() | binary(), - proc = [] :: [] | integer(), - time=[] :: [] | integer(), - data=[] :: [] | list( ), - events=[] :: list(), - settings = [] :: [] | list(), - status=[] :: [] | init | update | delete | pending | stop | complete}). - --record(process, { ?ITERATOR(feed), name=[] :: [] | binary(), - roles=[] :: list(), - tasks=[] :: list(), - events=[] :: list(), - hist=[] :: [], - flows=[] :: list(), - rules=[] :: [], - docs=[] :: list(tuple()), - options=[] :: term(), - task=[] :: [] | atom(), - timer=[] :: [] | binary(), - notifications=[] :: [] | term(), - result=[] :: [] | binary(), - started=[] :: [] | binary(), - beginEvent=[] :: [] | atom(), - endEvent=[] :: [] | atom()}). - -up() -> - S=case kvs:get(feed, process) of - {ok,#feed{top=Top}=Feed} -> - ProcIDs=kvs:fold(fun(#process{name=Name}=A,Acc) -> [element(2,A)|Acc] end,[], - process, Feed#feed.top,undefined, #iterator.prev,#kvs{mod=store_mnesia}), - [ case bpe:find_pid(P) of undefined -> bpe:cleanup(P), P; _ -> [] end|| P<-ProcIDs]; - _ -> [] end, - roster:recompile(roster), - [kvs:put(W#writer{id=#act{name=N, data=D}, cache=J1#'Job'{feed_id=#act{name=N, data=D}}, - first=J0#'Job'{feed_id=#act{name=N, data=D}}})|| - #writer{id=#action{name=N, data=D}, cache=#'Job'{}=J1, first=#'Job'{}=J0}=W<-kvs:all(writer)], - [kvs:delete(writer,#action{name=N, data=D})|| - #writer{id=#action{name=N, data=D}}=W<-kvs:all(writer)], - [begin A=#act{name=N, data=D}, kvs:put(J#'Job'{feed_id =A}), - case C of [] -> ok; C-> case kvs:get(reader, C) of - {ok,#reader{ }=R} -> kvs:put(R#reader{feed =A}); - __ -> ok - end end end || #'Job'{feed_id =#action{name=N, data=D}, id=Id, context=C}=J<-kvs:all('Job')], - [kvs:delete(reader,Id)|| - #reader{id=Id, feed = #action{}}<-kvs:all(reader)], - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180221165929_auth_settings.erl b/apps/roster/priv/migrations/20180221165929_auth_settings.erl deleted file mode 100644 index dec52afa827271f8e1a634dc95e4002ae14f13fc..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180221165929_auth_settings.erl +++ /dev/null @@ -1,31 +0,0 @@ --module('20180221165929_auth_settings'). --behavior(db_migration). --export([up/0, down/0]). - --record('Auth', {client_id = [] :: [] | binary(), - dev_key = [] :: [] | binary(), - user_id = [] :: [] | binary(), - phone = [] :: [] | binary(), - token = [] :: [] | binary(), - type = [] :: [] | atom(), - sms_code = [] :: [] | binary(), - attempts = [] :: [] | integer(), - services = [] :: list(atom()), - settings = [] :: list(), - push = [] :: [] | binary(), - os = [] :: [] | atom() | ios | android | web, - created = [] :: [] | integer() | binary(), - last_online = [] :: [] | integer() }). - -upd_auth(Auth) -> roster:upd_record(Auth, #'Auth'.services, []). - -transform() -> - mnesia:transform_table('Auth', fun upd_auth/1, record_info(fields, 'Auth')), - [] = [A|| #'Auth'{push = Os, settings = Push}=A <-kvs:all('Auth'), is_binary(Push) andalso is_atom(Os)], - ok. - -up() -> - roster:up_table('Auth', 14, 15, fun transform/0). - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180405170524_sys_message.erl b/apps/roster/priv/migrations/20180405170524_sys_message.erl deleted file mode 100644 index 4e95cf2b40714f7f6f27e548aed75a4d8f3748aa..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180405170524_sys_message.erl +++ /dev/null @@ -1,28 +0,0 @@ --module('20180405170524_sys_message'). --behavior(db_migration). --export([up/0, down/0]). - --record('Message', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [], - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - msg_id = [] :: [] | binary(), - from = [] :: [] | binary(), - to = [] :: [] | binary(), - created = [] :: [] | integer() | binary(), - files = [] :: [] | list(), - type = [] :: [] | atom() | reply | forward | sched | read | edited - | online | offline | join | leave | add | clear | patch, - link = [] :: [] | integer(), - seenby = [] :: [] | list(binary() | integer()), - repliedby = [] :: [] | list(integer()), - status = [] :: [] | client | async | delete - | sent | internal | update | edit | muc }). - -up() -> - [kvs:put(M#'Message'{type = [sys]})|| #'Message'{status = internal} = M<-kvs:all('Message')], - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180405173126_unsub_auth.erl b/apps/roster/priv/migrations/20180405173126_unsub_auth.erl deleted file mode 100644 index cc98a71434ba618b965c8df94968bb839433799d..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180405173126_unsub_auth.erl +++ /dev/null @@ -1,16 +0,0 @@ --module('20180405173126_unsub_auth'). --behavior(db_migration). --export([up/0, down/0]). - --record(mqtt_topic, -{ topic :: binary(), - flags = [] :: [retained | static] -}). - -up() -> - [n2o_vnode:unsubscribe(ClientId, Topic) - ||#mqtt_topic{topic = <<"auth/", ClientId/binary>> = Topic} <-kvs:all(mqtt_topic)], - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180411165621_erase_muc_status.erl b/apps/roster/priv/migrations/20180411165621_erase_muc_status.erl deleted file mode 100644 index a18dfe6a8a99b3cd89397b70c571f8a06d1dde96..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180411165621_erase_muc_status.erl +++ /dev/null @@ -1,50 +0,0 @@ --module('20180411165621_erase_muc_status'). --behavior(db_migration). --export([up/0, down/0]). - --record('Message', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [], - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - msg_id = [] :: [] | binary(), - from = [] :: [] | binary(), - to = [] :: [] | binary(), - created = [] :: [] | integer() | binary(), - files = [] :: [] | list(), - type = [] :: [] | atom() | reply | forward | sched | read | edited - | online | offline | join | leave | add | clear | patch, - link = [] :: [] | integer(), - seenby = [] :: [] | list(binary() | integer()), - repliedby = [] :: [] | list(integer()), - status = [] :: [] | client | async | delete - | sent | internal | update | edit | muc }). - --record(writer, {id = [] :: term(), % {p2p,_,_} | {muc,_} - count = 0 :: integer(), - cache = [] :: [] | tuple(), - args = [] :: term(), - first = [] :: [] | tuple()}). - - -up() -> - [begin - Mc2 = case Mc of #'Message'{status = muc} -> Mc#'Message'{status = [], type = [sys]}; - #'Message'{status = internal} -> Mc#'Message'{type = [sys]}; - #'Message'{status = client, type=T1}-> Mc#'Message'{type= lists:flatten([T1]),status = []};_-> Mc end, - Mf2 = case Mf of #'Message'{status = muc} -> Mf#'Message'{status = [], type = [sys]}; - #'Message'{status = internal} -> Mf#'Message'{type = [sys]}; - #'Message'{status = client, type=T2} -> Mf#'Message'{type=lists:flatten([T2]), status = []};_ -> Mf end, - kvs:put(W#writer{cache = Mc2, first = Mf2}) - end||#writer{cache = Mc, first = Mf}=W<-kvs:all(writer)], - [kvs:put(M#'Message'{type = [sys], status=[]})|| #'Message'{status = internal} = M<-kvs:all('Message')], - [kvs:put(M#'Message'{type = [sys], status=[]})|| #'Message'{status = sys} = M<-kvs:all('Message')], - [kvs:put(M#'Message'{type = [Atom]})|| #'Message'{type = Atom} = M<-kvs:all('Message'), is_atom(Atom)], - [kvs:put(M#'Message'{status = [], type = [sys]})||#'Message'{status = muc}=M<-kvs:all('Message')], - [kvs:put(M#'Message'{status = []})||#'Message'{status = client}=M<-kvs:all('Message')], - [kvs:put(M#'Message'{type = []})|| #'Message'{status = ''} = M<-kvs:all('Message')], - [kvs:delete('Message', Id) || #'Message'{id = Id, to = []} <- kvs:all('Message')], - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180507171751_roster_status.erl b/apps/roster/priv/migrations/20180507171751_roster_status.erl deleted file mode 100644 index 190fd0a931acae4cec3bcbd151a036366874cdc6..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180507171751_roster_status.erl +++ /dev/null @@ -1,60 +0,0 @@ --module('20180507171751_roster_status'). --behavior(db_migration). --export([up/0, down/0]). - --record('Message', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [], - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - msg_id = [] :: [] | binary(), - from = [] :: [] | binary(), - to = [] :: [] | binary(), - created = [] :: [] | integer() | binary(), - files = [] :: [] | list(), - type = [] :: [] | [atom() | sys | reply | forward | read | edited], - link = [] :: [] | integer(), - seenby = [] :: [] | list(binary() | integer()), - repliedby = [] :: [] | list(integer()), - mentioned = [] :: [] | list(integer()), - status = [] :: [] | async | delete | clear| update | edit }). - --record('Roster', {id = [] :: [] | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [] :: list(), - roomlist = [] :: list(), - favorite = [] :: list(), - tags = [] :: list(), - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). - --record('Desc', {id = [] :: [] | binary(), - mime = <<"text">> :: [] | binary(), - payload = [] :: [] | binary(), - size = 0 :: integer(), - filename = [] :: [] | binary(), - info = [] :: [] | binary()}). - -fix_msg_type() -> - [kvs:put(M#'Message'{type = []})||#'Message'{type = ['']}=M<-kvs:all('Message')]. -fix_translate() -> - [kvs:put(M#'Message'{files = [D#'Desc'{info = - case Info of - _ when Info /=[], Mime == <<"translate">> -> - roster:binary_join(sets:to_list(sets:from_list(binary:split(Info, <<",">>, [global]))), <<",">>); - _-> Info end} || #'Desc'{info = Info, mime = Mime}=D<-Descs]}) - || #'Message'{files = Descs}=M<-kvs:all('Message')]. - - -up() -> - [kvs:put(R#'Roster'{status = []})|| #'Roster'{status = S}=R<-kvs:all('Roster'), - lists:member(S, [update, nick, patch])], ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180507171752_mention.erl b/apps/roster/priv/migrations/20180507171752_mention.erl deleted file mode 100644 index 7916e538883a3403cc93f93d6236f8824433a556..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180507171752_mention.erl +++ /dev/null @@ -1,102 +0,0 @@ --module('20180507171752_mention'). --behavior(db_migration). --export([up/0, down/0]). - --record('Roster', {id = [] :: [] | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [] :: list(), - roomlist = [] :: list(), - favorite = [] :: list(), - tags = [] :: list(), - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). - - --record('Message', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [] , - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - msg_id = [] :: [] | binary(), - from = [] :: [] | binary(), - to = [] :: [] | binary(), - created = [] :: [] | integer() | binary(), - files = [] :: [] | list(), - type = [] :: [] | [atom() | sys | reply | forward | sched | read | edited], - link = [] :: [] | integer(), - seenby = [] :: [] | list(binary() | integer()), - repliedby = [] :: [] | list(integer()), - mentioned = [] :: [] | list(integer()), - status = [] :: [] | client | async | delete | clear - | sent | update | edit }). - --record('Room', {id = [] :: [] | binary(), - name = [] :: [] | binary(), - description = [] :: [] | binary(), - settings = [] :: list(), - members = [], - admins = [], - data = [] :: [] | list(), - type = [] :: [] | atom() | group | channel, - tos = [] :: [] | binary(), - tos_update = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - mentions = [] :: [] | list(integer()), - readers = [] :: list(integer()), - last_msg = [] :: [] | #'Message'{}, - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - status = [] :: [] | create | join | leave - | ban | unban | add | remove | mute | unmute - | patch | get | delete | settings - | voice | video }). - --record(writer, {id = [] :: term(), % {p2p,_,_} | {muc,_} - count = 0 :: integer(), - cache = [] :: [] | tuple(), - args = [] :: term(), - first = [] :: [] | tuple()}). - --record(act, {name= <<"publish">> :: [] | binary(), data=[]:: binary() | integer() | list(term())}). --record('Job', {id = [] :: [] | integer(), - container=chain :: atom() | chain, - feed_id = [] :: #act{}, - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - context= [] :: [] | integer() | binary(), - proc = [] :: [] | integer(), - time=[] :: [] | integer(), - data=[] :: [] | list( #'Message'{}), - events=[] :: list(), - settings = [] :: [] | list(), - status=[] :: [] | init | update | delete | pending | stop | complete}). - -upd_rec([]) -> []; -upd_rec(M) when element(1, M) == 'Message', not is_record(M, 'Message') -> - roster:upd_record(M, #'Message'.repliedby, []); -upd_rec(#'Job'{data = Msgs}=Job) -> Job#'Job'{data = lists:map(fun upd_rec/1, Msgs)}; -upd_rec(R) when element(1, R) == 'Room', not is_record(R, 'Room')-> - roster:upd_record(R, #'Room'.unread, []); -upd_rec(M) -> M. - -transform() -> - mnesia:transform_table('Message', fun upd_rec/1, record_info(fields, 'Message')), - mnesia:transform_table('Room', fun upd_rec/1, record_info(fields, 'Room')), - [kvs:put(W#writer{cache = upd_rec(C), first = upd_rec(F)}) - ||#writer{cache = C, first = F}=W<-kvs:all(writer)], - [kvs:put(upd_rec(J)) ||#'Job'{}=J<-kvs:all('Job')], - [kvs:put(R#'Roster'{roomlist = [upd_rec(Room)||Room<-Rooms]}) - || #'Roster'{roomlist = Rooms}=R<-kvs:all('Roster')], ok. - -up() -> - MsgSize = record_info(size, 'Message')-1, - roster:up_table('Message', MsgSize, MsgSize+1, fun transform/0). - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180508161952_new_desc_sticker.erl b/apps/roster/priv/migrations/20180508161952_new_desc_sticker.erl deleted file mode 100644 index 65ff24fe95f3bce1d4a56d44080e932ec310c78f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180508161952_new_desc_sticker.erl +++ /dev/null @@ -1,222 +0,0 @@ --module('20180508161952_new_desc_sticker'). --behavior(db_migration). --export([up/0, down/0]). - - --define(GROUP, <<"FILE_DATA">>). - --define(SIZE_KEY, <<"SIZE">>). --define(INFO_KEY, <<"INFO">>). --define(FILENAME_KEY, <<"FILENAME">>). --define(RESOLUTION_KEY, <<"RESOLUTION">>). --define(DURATION_KEY, <<"DURATION">>). --define(SMILE_KEY, <<"SMILE">>). --define(NAME_KEY, <<"NAME">>). --define(SURNAME_KEY, <<"SURNAME">>). --define(ALIAS_KEY, <<"ALIAS">>). --define(AVATAR_KEY, <<"AVATAR">>). --define(ADRESS_KEY, <<"ADRESS">>). --define(PLACE_KEY, <<"PLACEID">>). --define(LANG_KEY, <<"LANGUAGE">>). --define(TRANSLATION_KEY,<<"TRANSLATION">>). --define(USERS_KEY, <<"USERS">>). - --record('Star', {id = [] :: [] | integer(), - client_id = [] :: [] | binary(), - roster_id = [] :: [] | integer(), - message = [], - tags = [] :: list(), - status = [] :: [] | add | remove }). - --record('Feature', {id = [] :: [] | binary(), - key = [] :: [] | binary(), - value = [] :: [] | binary(), - group = ?GROUP }). - -%%-record('Desc', {id = [] :: [] | binary(), -%% mime = <<"text">> :: [] | binary(), -%% payload = [] :: [] | binary(), -%% size = 0 :: integer(), -%% filename = [] :: [] | binary(), -%% info = [] :: [] | binary()}). - --record('Desc', {id = [] :: binary(), - mime = <<"text">> :: binary(), - payload = [] :: binary(), - parentid = [] :: binary(), - data = [] :: list(#'Feature'{})}). - --record('Message', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [], - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - msg_id = [] :: [] | binary(), - from = [] :: [] | binary(), - to = [] :: [] | binary(), - created = [] :: [] | integer() | binary(), - files = [] :: [] | list(#'Desc'{}), - type = [] :: [] | [atom() | sys | reply | forward | read | edited], - link = [] :: [] | integer(), - seenby = [] :: [] | list(binary() | integer()), - repliedby = [] :: [] | list(integer()), - mentioned = [] :: [] | list(integer()), - status = [] :: [] | async | delete | clear| update | edit }). - --record(act, {name= <<"publish">> :: [] | binary(), data=[]:: binary() | integer() | list(term())}). - --record('Job', {id = [] :: [] | integer(), - container=chain :: atom() | chain, - feed_id = [] :: #act{}, - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - context= [] :: [] | integer() | binary(), - proc = [] :: [] | integer(), - time=[] :: [] | integer(), - data=[] :: [] | list( #'Message'{}), - events=[] :: list(), - settings = [] :: [] | list(#'Feature'{}), - status=[] :: [] | init | update | delete | pending | stop | complete}). - --record('StickerPack', {id = [] :: [] | integer(), - name = [] :: [] | binary(), - keywords = [] :: list(binary()), - description = [] :: [] | binary(), - author = [] :: [] | binary(), - stickers = [] :: list(#'Desc'{}), - created = [] :: integer(), - updated = [] :: integer(), - downloaded = 0 :: integer()}). - --record('Room', {id = [] :: [] | binary(), - name = [] :: [] | binary(), - description = [] :: [] | binary(), - settings = [] :: list(), - members = [] :: list(), - admins = [] :: list(), - data = [] :: [] | list(#'Desc'{}), - type = [] :: [] | atom() | group | channel, - tos = [] :: [] | binary(), - tos_update = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - mentions = [] :: [] | list(integer()), - readers = [] :: list(integer()), - last_msg = [] :: [] | #'Message'{}, - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - status = [] :: [] | create | leave| add | remove - | patch | get | delete | last_msg}). - --record('Roster', {id = [] :: [] | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [] :: list(), - roomlist = [] :: list(), - favorite = [] :: list(), - tags = [] :: list(), - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). - --record(writer, {id = [] :: term(), % {p2p,_,_} | {muc,_} - count = 0 :: integer(), - cache = [] :: [] | tuple(), - args = [] :: term(), - first = [] :: [] | tuple()}). - -id({'Desc',Id,_Mime,_Payload,_Size,_Filename,_Info}, Key) -><>. - -data({'Desc',_Id,<<"text">>,_Payload,_Size,_Filename,_Info}) -> []; -data({'Desc',_Id,_Mime,_Payload,Size,_Filename,_Info}=D) -> - [#'Feature'{id = id(D, ?SIZE_KEY), key = ?SIZE_KEY, - value = case Size of _ when is_integer(Size) -> integer_to_binary(Size);[]->[] end}]. - -nth(I, L) -> case length(L) <<>>; _->lists:nth(I, L) end. -split([], <<":">>) -> [<<>>, <<>>]; -split(S, P) -> binary:split(S, P). - -int_to_binary([]) -> []; -int_to_binary(I) -> integer_to_binary(I). - -upd([]) -> []; -upd(#'Desc'{} = D) -> D; -upd({'Desc',Id,<<"audio">> =Mime,Payload,Size,_Filename,Info} = D) -> - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = [#'Feature'{id = id(D, ?INFO_KEY), key = ?INFO_KEY, value = Info}, - #'Feature'{id = id(D, ?DURATION_KEY), key = ?DURATION_KEY, value = int_to_binary(Size)}]}; -upd({'Desc',Id,<<"image">> =Mime,Payload,_Size,Filename,Info} = D) -> - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = data(D)++[#'Feature'{id = id(D, ?INFO_KEY), key = ?FILENAME_KEY, value = Filename}, - #'Feature'{id = id(D, ?RESOLUTION_KEY), key = ?RESOLUTION_KEY, value = Info}]}; -upd({'Desc',Id,<<"file">> =Mime,Payload,_Size,Filename,Info} = D) -> - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = data(D)++[#'Feature'{id = id(D, ?INFO_KEY), key = ?FILENAME_KEY, value = Filename}]}; -upd({'Desc',Id,<<"video">> =Mime,Payload,_Size,Filename,Info} = D) -> - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = data(D)++[#'Feature'{id = id(D, ?INFO_KEY), key = ?FILENAME_KEY, value = Filename}, - #'Feature'{id = id(D, ?DURATION_KEY), key = ?DURATION_KEY, value = Info}]}; -upd({'Desc',Id,<<"sticker">> =Mime,Payload,_Size,Filename,Info} = D) -> - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = data(D)++[#'Feature'{id = id(D, ?SMILE_KEY), key = ?SMILE_KEY, value = Info}]}; -upd({'Desc',Id,<<"thumb">> =Mime,Payload,Size,Filename,Info}) -> - D = upd({'Desc',Id,<<"image">>,Payload,Size,Filename,Info}), - D#'Desc'{mime = Mime}; -upd({'Desc',Id,<<"contact">> =Mime,Payload,_Size,Filename,Info} = D) -> - [NS, AA] = [split(F, <<":">>)||F<-[Filename, Info]], - [Name, Surname]=[http_uri:decode(nth(I, NS))||I<-[1,2]], - [Alias, Avatar]=[http_uri:decode(nth(I, AA))||I<-[1,2]], - Fs = lists:zip([?NAME_KEY, ?SURNAME_KEY, ?ALIAS_KEY, ?AVATAR_KEY], - [Name, Surname, Alias, Avatar]), - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = [#'Feature'{id = id(D, K), key = K, value = V}||{K, V}<-Fs]}; -upd({'Desc',Id,<<"place">> =Mime,Payload,_Size,Filename,Info} = D) -> - NA = split(Filename, <<":">>), - [Name, Address]=[http_uri:decode(nth(I, NA))||I<-[1,2]], - Fs = lists:zip([?NAME_KEY, ?ADRESS_KEY, ?PLACE_KEY], [Name, Address, Info]), - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = [#'Feature'{id = id(D, K), key = K, value = V}||{K, V}<-Fs]}; -upd({'Desc',Id,Mime,Payload,_Size,Lang,Users} = D) when Mime == <<"translate">>; Mime == <<"posttranslate">> -> - LT = split(Payload, <<":">>), - [P, Trans]=[http_uri:decode(nth(I, LT))||I<-[1,2]], - Fs = lists:zip([?LANG_KEY, ?TRANSLATION_KEY, ?USERS_KEY], [Lang, Trans, Users]), - #'Desc'{id = Id, mime = Mime, payload = P, - data = [#'Feature'{id = id(D, K), key = K, value = V}||{K, V}<-Fs]}; -upd({'Desc',Id,<<"transcribe">> =Mime,Payload,_Size,Lang,Users} = D) -> - Fs = lists:zip([?LANG_KEY, ?USERS_KEY], [Lang, Users]), - #'Desc'{id = Id, mime = Mime, payload = Payload, - data = [#'Feature'{id = id(D, K), key = K, value = V}||{K, V}<-Fs]}; -upd({'Desc',Id,Mime,Payload,_Size,_Filename,_Info}) -> - #'Desc'{id = Id, mime = Mime, payload = Payload}; -upd(#'Message'{files = Descs}=M) -> - M#'Message'{files = [upd(D)||D<-Descs]}; -upd(#'Job'{data = Data}=J) -> J#'Job'{data = [upd(D)||D<-Data]}; -upd(#'Star'{message = #'Message'{} = Msg}=S) -> S#'Star'{message = upd(Msg)}; -upd(#'Star'{}) -> []; -upd(#'Roster'{favorite = Stars, roomlist = Rooms}=Roster) -> - Roster#'Roster'{favorite = lists:flatten([upd(S)||S<-Stars]), roomlist = [upd(R)||R<-Rooms]}; -upd(#writer{cache = MC, first = FC} = W) -> - W#writer{cache = upd(MC), first = upd(FC)}; -upd(#'Room'{data = Descs} = Room) -> - Room#'Room'{data = [upd(D)||D<-Descs]}. - -up() -> - kvs:init(mnesia, roster), %% create StikerPack table - mnesia:wait_for_tables(['StickerPack'], 1000), - case kvs:all('StickerPack') of - [] -> stickers_api:upload_pack(); - _ -> ok end, - [kvs:put(upd(Record))|| Table<-['Room', 'Message', 'Job', 'Roster', writer], Record<-kvs:all(Table)], - - [kvs:put(M#'Message'{status = []})||#'Message'{status = internal}=M<-kvs:all('Message')], - [case Desc of - #'Desc'{} -> ok; - _ -> false = M - end || #'Message'{files = Descs} = M<-kvs:all('Message'), Desc <- Descs], - ok. - -down() -> - ok. \ No newline at end of file diff --git a/apps/roster/priv/migrations/20180604155328_wallet.erl b/apps/roster/priv/migrations/20180604155328_wallet.erl deleted file mode 100644 index 4d2fb966e07fda4b0f0c85ac71d23d5a5861cfdf..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180604155328_wallet.erl +++ /dev/null @@ -1,76 +0,0 @@ --module('20180604155328_wallet'). --behavior(db_migration). --export([up/0, down/0]). - --record('Contact', {phone_id = [] :: [] | binary(), - avatar = [] :: [] | binary(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - nick = [] :: [] | binary(), -%% email = [] :: [] | binary(), -%% vox_id = [] :: [] | binary(), - reader = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - last_msg = [], - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - settings = [], - services = [], - presence = [] :: [] | atom(), - status = [] :: [] | request | authorization | ignore | internal - | friend | last_msg | ban | banned | deleted }). - --record('Member', {id = [] :: [] | integer(), - container = chain :: atom() | chain | cur, - feed_id = [], - prev = [] :: [] | integer(), - next = [] :: [] | integer(), - feeds = [] :: list(), - phone_id = [] :: [] | binary(), - avatar = [] :: [] | binary(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - alias = [] :: [] | binary(), -%% email = [] :: [] | binary(), -%% vox_id = [] :: [] | binary(), - reader = 0 :: [] | integer(), - update = 0 :: [] | integer(), - settings = [] :: [] | list(), - services = [] :: [] | list(), - presence = [] :: [] | online | offline, - status = [] :: [] | admin | member | removed | patch | owner }). - --record('Roster', {id = [] :: [] | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [] :: list(#'Contact'{}), - roomlist = [], - favorite = [], - tags = [], - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). - - -upd(M) when element(1, M) == 'Member', not is_record(M, 'Member') -> - {M1, [_,_|M2]} = lists:split(#'Member'.alias, tuple_to_list(M)), - roster:upd_record(list_to_tuple(M1++M2), #'Member'.settings, []); -upd(C) when element(1, C) == 'Contact', not is_record(C, 'Contact') -> - {C1, [_,_|C2]} = lists:split(#'Contact'.nick, tuple_to_list(C)), - roster:upd_record(list_to_tuple(C1++C2), #'Contact'.settings, []). - -transform() -> - mnesia:transform_table('Member', fun upd/1, record_info(fields, 'Member')), - [kvs:put(R#'Roster'{userlist = lists:map(fun upd/1, Contacts)})||#'Roster'{userlist = Contacts}=R<-kvs:all('Roster')]. - -up() -> - MembSize = record_info(size, 'Member')+1, - roster:up_table('Member', MembSize, MembSize-1, fun transform/0), - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20180605155329_add_links_field_to_room_model.erl b/apps/roster/priv/migrations/20180605155329_add_links_field_to_room_model.erl deleted file mode 100644 index 3dd9e8ebd35dba69c17b5e5015a47e0d622937c6..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180605155329_add_links_field_to_room_model.erl +++ /dev/null @@ -1,92 +0,0 @@ --module('20180605155329_add_links_field_to_room_model'). --behavior(db_migration). --export([up/0, down/0]). - - --record('Room', {id = [] :: [] | binary(), - name = [] :: [] | binary(), - links = [] :: [] | list(), - description = [] :: [] | binary(), - settings = [] :: list(), - members = [] :: list(), - admins = [] :: list(), - data = [] :: [] | list(), - type = [] :: [] | atom() | group | channel, - tos = [] :: [] | binary(), - tos_update = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - mentions = [] :: [] | list(integer()), - readers = [] :: list(integer()), - last_msg = [] :: [], - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - status = [] :: [] | create | join | leave - | ban | unban | add | remove | mute | unmute - | patch | get | delete | settings - | voice | video }). - - --record('RoomOld', {id = [] :: [] | binary(), - name = [] :: [] | binary(), - description = [] :: [] | binary(), - settings = [] :: list(), - members = [] :: list(), - admins = [] :: list(), - data = [] :: [] | list(), - type = [] :: [] | atom() | group | channel, - tos = [] :: [] | binary(), - tos_update = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - mentions = [] :: [] | list(integer()), - readers = [] :: list(integer()), - last_msg = [] :: [], - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - status = [] :: [] | create | join | leave - | ban | unban | add | remove | mute | unmute - | patch | get | delete | settings - | voice | video }). - --record('Roster', {id = [] :: [] | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [] :: list(), - roomlist = [] :: list(), - favorite = [] :: list(), - tags = [] :: list(), - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). - -%% add Room.link field and leave it empty -update_room(Room) -> - roster:upd_record(Room, #'Room'.name, []). - -update_roster_room(Room) -> - OldSize = record_info(size, 'RoomOld'), - case tuple_size(Room) of - OldSize -> update_room(Room); - _ -> Room - end. - -%% add Room.link field and leave it empty -update_roster(#'Roster'{roomlist = Rooms} = Roster) -> - UpdRooms = [ update_roster_room(R) || R <- Rooms], - kvs:put(Roster#'Roster'{roomlist = UpdRooms}). - -transform() -> - mnesia:transform_table('Room', fun update_room/1, record_info(fields, 'Room')), - ok. - -up() -> - roster:up_table('Room', record_info(size, 'RoomOld'), record_info(size, 'Room'), fun transform/0), -%% update roster.roomlist - [update_roster(Roster) || Roster <- kvs:all('Roster')], - ok. - -down() -> - ok. \ No newline at end of file diff --git a/apps/roster/priv/migrations/20180710150211_update_channel_settings_feature_key_1738.erl b/apps/roster/priv/migrations/20180710150211_update_channel_settings_feature_key_1738.erl deleted file mode 100644 index 839a38df565276835243bd966431bcac20279e2d..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20180710150211_update_channel_settings_feature_key_1738.erl +++ /dev/null @@ -1,88 +0,0 @@ --module('20180710150211_update_channel_settings_feature_key_1738'). --behavior(db_migration). --include_lib("roster/static/room_channel_var.hrl"). --export([up/0, down/0]). - -%% Models to use - --record(muc, {name = [] :: [] | binary() }). - --record('Feature', {id = [] :: [] | binary(), - key = [] :: [] | binary(), - value = [] :: [] | binary(), - group = [] :: [] | binary() }). - --record('Room', {id = [] :: [] | binary(), - name = [] :: [] | binary(), - links = [] :: [] | list(), - description = [] :: [] | binary(), - settings = [] :: list(#'Feature'{}), - members = [] :: list(), - admins = [] :: list(), - data = [] :: [] | list(), - type = [] :: [] | atom() | group | channel, - tos = [] :: [] | binary(), - tos_update = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - mentions = [] :: [] | list(integer()), - readers = [] :: list(integer()), - last_msg = [] :: [], - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - status = [] :: [] | atom()}). - --record('Roster', {id = [] :: [] | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [] :: list(), - roomlist = [] :: list(#'Room'{}), - favorite = [] :: list(), - tags = [] :: list(), - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | atom()}). - -%% Old Feature.key Names - --define(OLD_FKC_SUBSCRIBERS_COUNT, <<"SubscribersCount">>). --define(OLD_FKC_ADMINS_COUNT, <<"AdminsCount">>). - -update_feature_key(Features) -> - lists:foldl(fun(#'Feature'{key = ExistingKey} = ExistingFeature, Acc) -> - case ExistingKey of - ?OLD_FKC_SUBSCRIBERS_COUNT -> Acc ++ [ExistingFeature#'Feature'{key = ?FKC_SUBSCRIBERS_COUNT}]; - ?OLD_FKC_ADMINS_COUNT -> Acc ++ [ExistingFeature#'Feature'{key = ?FKC_ADMINS_COUNT}]; - _ -> Acc ++ [ExistingFeature] - end - end, [], Features). - -update_room_object(#'Room'{id = RoomId, settings = RoomFeatures} = Room) -> - case roster_channel_helper:is_channel(#muc{name = RoomId}) of - false -> Room; - true -> Room#'Room'{settings = update_feature_key(RoomFeatures)} - end. - -update_roster_rooms(#'Roster'{roomlist = UserRooms}) -> - lists:flatten([update_room_object(UserRoom) || UserRoom <- UserRooms]). - -proceed_with_progress(Fun, ListToProceed) -> - TotalLength = length(ListToProceed), - [begin - io:format("Element ~p of ~p~n", [ElNumber, TotalLength]), - Fun(El) - end || {El, ElNumber} <- lists:zip(ListToProceed, lists:seq(1, TotalLength))]. - -up() -> -%% get all channels and update features there - io:format("Room objects updating ~n"), - proceed_with_progress(fun(El) -> kvs:put(update_room_object(El)) end, kvs:all('Room')), -%% get all channels in Rosters and update features there - io:format("Roster.roomlist objects updating ~n"), - proceed_with_progress(fun(El) -> kvs:put(El#'Roster'{roomlist = update_roster_rooms(El)}) end, kvs:all('Roster')), - ok. - -down() -> - ok. \ No newline at end of file diff --git a/apps/roster/priv/migrations/20181008144317_contact_lang_default.erl b/apps/roster/priv/migrations/20181008144317_contact_lang_default.erl deleted file mode 100644 index 785f98476a382a7d37ea8de60098a6a30b3c887b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20181008144317_contact_lang_default.erl +++ /dev/null @@ -1,71 +0,0 @@ --module('20181008144317_contact_lang_default'). --behavior(db_migration). --export([up/0, down/0]). - --include_lib("../../include/roster.hrl"). - -id(PhoneId, Key) -> <>. - -default(#'Contact'{phone_id = PhoneId}, FriendId) -> - {ok, #'Profile'{settings = Settings} = Profile} = kvs:get('Profile', roster:phone(PhoneId)), - LangSetting = #'Feature'{value = DefaultLang} = - case lists:keyfind(K = <<"DEFAULT_LANGUAGE">>, #'Feature'.key, Settings) of - false -> - F = #'Feature'{id = id(FriendId, K), key = K, value = <<"English:en">>, group = <<"LANGUAGE_SETTING">>}, - kvs:put(Profile#'Profile'{settings = [F | Settings]}), F; - F -> F end, - - Fs = [{<<"AUTO_TRANSLATE">> , <<"false">>}, - {<<"AUTO_OUTGOING_TRANSLATE">> , <<"Off">>}, - {<<"AUTO_TRANSLATE_TRANSCRIBE">> , <<"false">>}, - {<<"AUTO_TRANSCRIBE">> , <<"true">>}, - {<<"TRANSCRIBE_LANGUAGE">> , DefaultLang}], - lists:ukeysort(#'Feature'.key, lists:flatten([LangSetting| - [#'Feature'{id = id(FriendId, Key), key = Key, value = Default, group = <<"LANGUAGE_SETTING">>} - || {Key, Default}<-Fs]])). - -feature(Key, #'Feature'{} = F, PhoneId) -> - F#'Feature'{id = id(PhoneId, Key), key = Key, group = <<"LANGUAGE_SETTING">>}. - -upd(F = #'Feature'{key = <<"AUTO_TRANSLATE">>}, _FriendId) -> - F#'Feature'{value = <<"false">>}; -upd(F = #'Feature'{key = <<"AUTO_TRANSLATE_TRANSCRIBE">>}, _FriendId) -> - F#'Feature'{value = <<"false">>}; -upd(F = #'Feature'{key = <<"AUTO_TRANSCRIBE">>}, _FriendId) -> - F#'Feature'{value = <<"true">>}; -upd(F = #'Feature'{key = <<"CHAT_LANGUAGE">>}, _FriendId) -> F; -upd(F = #'Feature'{key = <<"AUTO_LANGUAGE_IN_CHAT">>}, FriendId) -> feature(<<"AUTO_TRANSLATE">>, F, FriendId); -upd(F = #'Feature'{key = <<"AUTO_TRANSLATE_LANGUAGE">>}, FriendId) -> - feature(<<"AUTO_OUTGOING_TRANSLATE">>, F#'Feature'{value = <<"Off">>}, FriendId); -upd(F = #'Feature'{key = <<"TRANSLATE_LANGUAGE">>, value = <<"None:none">>}, FriendId) -> - upd(F#'Feature'{value = <<"English:en">>}, FriendId); -upd(F = #'Feature'{key = <<"TRANSLATE_LANGUAGE">>}, FriendId) -> - feature(<<"OUTGOING_TRANSLATE_LANGUAGE">>, F, FriendId); -upd(#'Feature'{} = F, _Id) -> F; - -upd(#'Contact'{settings = Settings} = C, FriendId) -> - NewSettings = lists:ukeymerge(#'Feature'.key, - lists:ukeysort(#'Feature'.key, lists:flatten([upd(F, FriendId)||F<-Settings])), - default(C, FriendId)), - C#'Contact'{settings = NewSettings}. -upd(#'Roster'{id = RosterId, phone = Phone, userlist = Contacts, roomlist = Rooms} = Roster) -> - Roster#'Roster'{userlist = [upd(C, roster:phone_id(Phone, RosterId)) || #'Contact'{} = C <-Contacts], - roomlist = [Room || #'Room'{} = Room<-Rooms]}; -upd(#'Member'{phone_id = PhoneId, settings = []} = Member) -> - case kvs:get('Profile', roster:phone(PhoneId)) of - {ok, #'Profile'{settings = Settings}} -> Member#'Member'{settings = Settings}; - _ -> Member end; -upd(#'Member'{} = Member) -> Member. - -up() -> - [kvs:put(upd(R))||#'Roster'{} = R <- kvs:all('Roster')], -%% [] = [R||#'Roster'{userlist = Contacts} = R <- kvs:all('Roster'), -%% #'Contact'{settings = Settings}<-Contacts, -%% #'Feature'{key = <<"CHAT_LANGUAGE">>}<-Settings], - - [] = [[]||#'Profile'{settings = []}<-kvs:all('Profile')], - [kvs:put(upd(Member))||Member<-kvs:all('Member')], - ok. - -down() -> - ok. \ No newline at end of file diff --git a/apps/roster/priv/migrations/20181012141608_link_desc_re.erl b/apps/roster/priv/migrations/20181012141608_link_desc_re.erl deleted file mode 100644 index d12b1164f61c65e66ca0eacc82328eb4a8ff7cbc..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20181012141608_link_desc_re.erl +++ /dev/null @@ -1,18 +0,0 @@ --module('20181012141608_link_desc_re'). --behavior(db_migration). --export([up/0, down/0]). - --include_lib("../../include/roster.hrl"). - -upd(#'Message'{files = Descs} = Msg) -> - Msg#'Message'{files = lists:flatten([roster:parse_desc(Desc)|| #'Desc'{} = Desc<-Descs])}. - -up() -> - [case upd(M) of - #'Message'{files = Descs2} when length(Descs) == length(Descs2) -> []; - Msg -> kvs:put(Msg) - end || M = #'Message'{files = Descs, type = Type} <- kvs:all('Message'), Type /= [sys]], - ok. - -down() -> - ok. diff --git a/apps/roster/priv/migrations/20190513165642_link.erl b/apps/roster/priv/migrations/20190513165642_link.erl deleted file mode 100644 index 228c2de43b69e1086ed5bdfd557cf48cd192704e..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/20190513165642_link.erl +++ /dev/null @@ -1,76 +0,0 @@ --module('20190513165642_link'). --behavior(db_migration). --export([up/0, down/0]). - --record('Link', {id = [] :: [] | binary(), %% link value - name = [] :: [] | binary(), %% unused atm - room_id = [] :: [] | binary(), %% parent Room id - created = [] :: [] | integer(), - type = [] :: [] | group | channel, - status = [] :: [] | gen | check | add %% old unused fields - | get | join | update | delete}). %% new fields - --record('OldLink', {id = [] :: [] | binary(), %% actually the link - name = [] :: [] | binary(), %% Room id etc - type = [] :: [] | group | channel, - status = [] :: [] | get | join | update | delete }). - --record('Room', {id = [] :: [] | binary(), - name = [] :: [] | binary(), - links = [] :: [] | list(#'Link'{}), - description = [] :: [] | binary(), - settings = [], - members = [], - admins = [], - data = [], - type = [] :: [] | group | channel | call, - tos = [] :: [] | binary(), - tos_update = 0 :: [] | integer(), - unread = 0 :: [] | integer(), - mentions = [] :: list(integer()), - readers = [] :: list(integer()), - last_msg = [], - update = 0 :: [] | integer(), - created = 0 :: [] | integer(), - status = [] :: [] | create | leave| add | remove | removed | join | info - | patch | get | delete | last_msg | mute | unmute}). - --record('Roster', {id = [] :: [] | binary() | integer(), - names = [] :: [] | binary(), - surnames = [] :: [] | binary(), - email = [] :: [] | binary(), - nick = [] :: [] | binary(), - userlist = [], - roomlist = [], - favorite = [], - tags = [], - phone = [] :: [] | binary(), - avatar = [] :: [] | binary(), - update = 0 :: [] | integer(), - status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). - -upd({'Link', _, _, _, _} = Link) -> - roster:upd_record(roster:upd_record(setelement(5,Link,[]), #'Link'.name, roster:now_msec()), #'Link'.id, []); - -upd(#'Room'{links = Links} = R) -> - R#'Room'{links = []}; -upd(#'Roster'{roomlist = Rooms} = R) -> - R#'Roster'{roomlist = [upd(Room)|| Room=#'Room'{} <- Rooms]}; - -upd(Link) -> Link. - -transform() -> - mnesia:transform_table('Link', fun upd/1, record_info(fields, 'Link')), - ok. - -up() -> - roster:up_table('Link', record_info(size, 'OldLink'), record_info(size, 'Link'), fun transform/0), - [case L of - [] -> Link=roster_link:gen_link(RID,T), kvs:put(Link); - _ -> kvs:put(Room#'Room'{links = []}) - end || #'Room'{id =RID, links= L, type=T}=Room<-kvs:all('Room')], - [kvs:put(upd(Roster))|| Roster <-kvs:all('Roster')], - ok. -down() -> - ok. diff --git a/apps/roster/priv/migrations/test/30171023145947_test.erl b/apps/roster/priv/migrations/test/30171023145947_test.erl deleted file mode 100644 index f8b532dee5b1cbcd4f73f58c14fdafbd739a0ac9..0000000000000000000000000000000000000000 --- a/apps/roster/priv/migrations/test/30171023145947_test.erl +++ /dev/null @@ -1,17 +0,0 @@ --module('30171023145947_test'). --behavior(db_migration). --export([up/0, down/0]). - --record('MigresiaTest', {id, field1, field2, field3}). - -up() -> - roster:stop_vnodes(), - roster:recompile_roster([roster_test]), - mnesia:transform_table('MigresiaTest', - fun({'MigresiaTest', Id, F1, F2}) -> - #'MigresiaTest'{id = Id, field1 = F1, field2 = F2, field3 = F2+1} - end, record_info(fields, 'MigresiaTest')), - kvs:put({'MigresiaTest', 101, 101, 101, 102}), - roster:start_vnodes(), ok. - -down() -> ok. diff --git a/apps/roster/src/roster.app.src b/apps/roster/src/roster.app.src index af0153df101d3d0cf1e21ef78801e8978ecf87e5..05a7bdae98dd0f58a38dde424cc2c55d7fabaf81 100644 --- a/apps/roster/src/roster.app.src +++ b/apps/roster/src/roster.app.src @@ -6,7 +6,7 @@ ibrowse, cowboy, mochiweb, gen_smtp, kvs, nitro, n2o, emqttc, emqttd, bpe, jose, jsx, uuid, erlydtl, jwt, - migresia, mini_s3, qdate, rest, enenra, + mini_s3, qdate, rest, enenra, locus, prometheus, libphonenumber_erlang]}, {mod, {roster, []}}, {env, []} ]}. diff --git a/apps/roster/src/roster.erl b/apps/roster/src/roster.erl index c4dafab74be18c515abf664bbc8d7aec0c5276e3..f0874a32fb3a35cef9ba4798d2949e797186fe22 100644 --- a/apps/roster/src/roster.erl +++ b/apps/roster/src/roster.erl @@ -2232,11 +2232,6 @@ up_table(RecName, OldArity, NewArity, TransformFun) -> NewArity -> io:format("~p:migration:already updated", [?MODULE]); OtherArity -> io:format("~p:migration:unexpected:ariry:~p", [?MODULE, OtherArity]) end, ok. -migrate() -> backup(), migresia:migrate(roster). -cancel_last_migration() -> - LastKey = lists:foldl(fun({schema_migrations, Key, _}, Acc) when Key > Acc -> Key; - (_, Acc) -> Acc end, 0, kvs:all(schema_migrations)), - kvs:put({schema_migrations, LastKey, false}). %% other utils sign(P) when P =< 0 -> 1; sign(_) -> 0. diff --git a/apps/roster/test/roster_test.erl b/apps/roster/test/roster_test.erl index fd20c90f817b5ec91e4be5ae07623e00406a8c19..8b234912ae1657f3ef1399587c6bd723128da16e 100644 --- a/apps/roster/test/roster_test.erl +++ b/apps/roster/test/roster_test.erl @@ -1670,34 +1670,6 @@ forbid('Message') -> 20. purge_fake_users() -> length([roster:purge_user(Phone) || #'Auth'{phone = Phone} <- kvs:all('Auth'), byte_size(Phone) < 12]). --record('MigresiaTestOld', {id, field1, field2}). --record('MigresiaTest', {id, field1, field2, field3}). - -metainfo() -> #schema{name = kvs, tables = tables()}. -tables() -> [#table{name = 'MigresiaTest', fields = record_info(fields, 'MigresiaTestOld')}]. - -test_migrate() -> - mnesia:delete_table('MigresiaTest'), - kvs:init(mnesia, ?MODULE), - catch kvs:delete('schema_migrations', 30171023145947), - {ok, Cwd} = file:get_cwd(), PriveDir = binary_to_list(migresia_migrations:get_priv_dir(roster)), - TestFile = "30171023145947_test.erl", - file:copy(filename:join([Cwd, PriveDir, "test", TestFile]), - TestFile2 = filename:join([Cwd, PriveDir, TestFile])), - try case lists:reverse(migresia:check(roster)) of - ['30171023145947_test' | _] -> - [kvs:put(setelement(1, #'MigresiaTestOld'{id = I, field1 = I, field2 = I}, 'MigresiaTest')) - || I <- lists:seq(1, 100)], - migresia:migrate(roster), - Arity = record_info(size, 'MigresiaTest'), - Arity = tuple_size(element(2, kvs:get('MigresiaTest', 1))), ok; - Res -> ?LOG_INFO("~p = migresia:check(roster)", [Res]), - {error, test_migration} end - catch Err:Rea -> - ?LOG_ERROR("Catch:~p~n", [n2o:stack_trace(Err, Rea)]), - throw({error, migrate}) - after catch kvs:delete('schema_migrations', 30171023145947), file:delete(TestFile2) end. - bpe() -> PhoneA = <<"773">>, Phones = [<<"5333">>, <<"377">>], diff --git a/rebar.config b/rebar.config index f95b39c13489e18e4cedf2ac7dce4a4f7073d8aa..fc95cb5ce36acfd89fece3410db51983ccdec99c 100644 --- a/rebar.config +++ b/rebar.config @@ -24,7 +24,6 @@ {jwt, {git, "https://github.com/artemeff/jwt.git", {tag, "0.1.8"}}}, {jsx, {git, "https://github.com/talentdeficit/jsx.git",{tag, "v2.9.0"}}}, {base64url, {git, "https://github.com/dvv/base64url.git", {tag, "v1.0"}}}, - {migresia, {git, "https://github.com/yoonka/migresia.git", {branch,"master"}}}, {counters, {git, "https://github.com/deadtrickster/counters.erl.git", {tag, "v0.2.2"}}}, {ctx, {git, "https://github.com/tsloughter/ctx.git"}}, {wts, {git, "https://github.com/tsloughter/wts.git"}}, @@ -86,8 +85,8 @@ libphonenumber_erlang,syn,cowlib,jiffy,idna,parse_trans, goldrush, public_key,bpe,lager,ssl,ranch, ssl_verify_fun,locus,emqttd,hackney,roster,service,active, - cowboy,emq_dashboard,emqttc,enenra,envy,uuid,erlydtl,forms, - gen_smtp, jwt, migresia, mini_s3, nitro, opencensus, + cowboy,emq_dashboard,emqttc,enenra,envy,uuid,erlydtl, + gen_smtp, jwt, mini_s3, nitro, opencensus, qdate,rest,rfc3339,sh,stacktrace_compat, redbug]}, {sys_config, "./sys.config"}, {vm_args, "./vm.args"}, diff --git a/rebar.lock b/rebar.lock index e9a99f0c735e803e9143890e79aa6f8695743483..228ec3b8e79678e643d42726a0bd715354cd29fe 100644 --- a/rebar.lock +++ b/rebar.lock @@ -62,10 +62,6 @@ {git,"https://github.com/voxoz/esockd", {ref,"817a4f059698a349aac9037fc0600b3928036e3d"}}, 0}, - {<<"forms">>, - {git,"git://github.com/synrc/forms", - {ref,"845feb45a46dfc2e0e9a156da9c01c218d8fd6cc"}}, - 1}, {<<"fs">>, {git,"git://github.com/synrc/fs", {ref,"45ca2003b208f461ef4acd56c5fdecd2e98e1f33"}}, @@ -132,10 +128,6 @@ {ref,"0cd4d9e709d0ca70ec6d01b9d434692eff51222d"}}, 1}, {<<"metrics">>,{pkg,<<"metrics">>,<<"1.0.1">>},2}, - {<<"migresia">>, - {git,"https://github.com/yoonka/migresia.git", - {ref,"40e11825e01502d045e87bf8b5d7dc5a9d6e3f73"}}, - 0}, {<<"mimerl">>,{pkg,<<"mimerl">>,<<"1.0.2">>},2}, {<<"mini_s3">>, {git,"https://github.com/chef/mini_s3.git",