Commit 76661d80 authored by David Byers's avatar David Byers
Browse files

Fixed bugs 761, 1058 and 1036.

Detailed changes:
> 2003-07-27  David Byers  <byers@lysator.liu.se>
>
> 	Fix bug 761:
> 	* startup.el (kom-start-anew): Set lyskom-is-administrator to nil
> 	after logging on.
>
> 	Fix bug 1058:
> 	* edit-text.el (lyskom-edit-insert-miscs): Make the separator
> 	read-only.
>
> 2003-07-26  David Byers  <byers@lysator.liu.se>
>
> 	Minor fixes:
> 	* commands1.el (kom-sub-self): Restrict this command to
> 	membership.
>
> 	Improvements to completing read:
> 	* completing-read.el (lyskom-read-conf-internal): Added membership
> 	predicate to lyskom-read-conf-internal.
> 	(lyskom-read-conf): Support integer argument in initial. Default
> 	to placing point at the start of input.
>
>
> 	Fix bug 1036:
> 	* commands2.el (kom-change-message-flag): Nwe command.
>
> 	* commands2.el (kom-is-person-member-of-conference): Show if a
> 	person receives group messages to the conference.
>
> 	* utilities.el (lyskom-return-membership-type): Show message-flag
> 	if it is not the default.
>
> 2003-07-25  David Byers  <byers@lysator.liu.se>
>
> 	UI support for bug 1036:
> 	* mship-edit.el (lp--compute-format-string): Support message-flag.
> 	(lp--format-entry): Ditto.
> 	(lp--flag-menu-get): Ditto.
> 	(lp--flag-menu-set): Ditto.
> 	(lp--format-insert-entry): Ditto.
>
> 	Protocol support for bug 1036:
> 	* komtypes.el (membership-type): Added message-flag.
>
> 	* parse.el (lyskom-parse-membership-type): Set message-flag from
> 	message-invert.
>
> 	* lyskom-rest.el (lyskom-prot-a-format-membership-type): Transmit
> 	message-invert instead of message-flag.
>
> 2003-07-22  David Byers  <byers@lysator.liu.se>
>
> 	* commands2.el (lyskom-update-membership-buffer): Fixed typo.
parent 4239f1b3
2003-07-27 David Byers <byers@lysator.liu.se>
Fix bug 761:
* startup.el (kom-start-anew): Set lyskom-is-administrator to nil
after logging on.
Fix bug 1058:
* edit-text.el (lyskom-edit-insert-miscs): Make the separator
read-only.
2003-07-26 David Byers <byers@lysator.liu.se>
Minor fixes:
* commands1.el (kom-sub-self): Restrict this command to
membership.
Improvements to completing read:
* completing-read.el (lyskom-read-conf-internal): Added membership
predicate to lyskom-read-conf-internal.
(lyskom-read-conf): Support integer argument in initial. Default
to placing point at the start of input.
Fix bug 1036:
* commands2.el (kom-change-message-flag): Nwe command.
* commands2.el (kom-is-person-member-of-conference): Show if a
person receives group messages to the conference.
* utilities.el (lyskom-return-membership-type): Show message-flag
if it is not the default.
2003-07-25 David Byers <byers@lysator.liu.se>
UI support for bug 1036:
* mship-edit.el (lp--compute-format-string): Support message-flag.
(lp--format-entry): Ditto.
(lp--flag-menu-get): Ditto.
(lp--flag-menu-set): Ditto.
(lp--format-insert-entry): Ditto.
Protocol support for bug 1036:
* komtypes.el (membership-type): Added message-flag.
* parse.el (lyskom-parse-membership-type): Set message-flag from
message-invert.
* lyskom-rest.el (lyskom-prot-a-format-membership-type): Transmit
message-invert instead of message-flag.
2003-07-22 David Byers <byers@lysator.liu.se>
* commands2.el (lyskom-update-membership-buffer): Fixed typo.
2003-07-23 Per Cederqvist <ceder@ingate.com>
* swedish-strings.el (lyskom-message): Fixed spelling error in
......@@ -5,6 +59,8 @@
2003-07-21 David Byers <byers@lysator.liu.se>
* NEWS-0.48: Updated to here.
Fix bug 708:
* flags.el (lyskom-flag-global-variable-from-common): New function.
(lyskom-flag-global-variable-from-elisp): New function.
......@@ -639,7 +695,6 @@
2003-03-08 Per Cederqvist <ceder@ceder.dyndns.org>
kom-review-backward always raised an error.
* review.el (kom-review-backward): Extract the list of texts to
see with text-list->texts, not cdr. Using cdr no longer works.
......@@ -660,7 +715,6 @@
2003-03-03 Per Cederqvist <ceder@ceder.dyndns.org>
Print the conference type when entering a conference.
* swedish-strings.el (status-record): Removed a space.
* english-strings.el (status-record): Removed a space.
......@@ -675,7 +729,6 @@
2003-02-13 Per Cederqvist <ceder@ingate.com>
Fix kom-postpone, which has been broken a while.
* komtypes.el (text-list->trim-head): New function.
* commands2.el (kom-postpone): Use text-list->trim-head instead of
......@@ -813,7 +866,7 @@
* NEWS-0.48: Synched up to here.
Handle async-new-user-area message:
Handle async-new-user-area message (bug 837):
* startup.el (lyskom-accept-async): Accept async 19.
* async.el (lyskom-parse-async): Parse async type 19. Update
......
......@@ -889,7 +889,7 @@ See `kom-unsubscribe-makes-passive'."
(blocking-do 'get-conf-stat lyskom-pers-no)
(if conf (blocking-do 'get-conf-stat conf)
(lyskom-read-conf-stat (lyskom-get-string 'leave-what-conf)
'(all) nil
'(membership) nil
(let ((ccn
(if (or (null lyskom-current-conf)
(zerop lyskom-current-conf))
......
......@@ -80,7 +80,7 @@ See `kom-list-membership-in-window'."
(save-excursion (set-buffer buf)
(erase-buffer))
(lyskom-traverse x lyskom-membership
(initiate-get-conf-stat 'memberhsip 'lyskom-memb-received-1
(initiate-get-conf-stat 'membership 'lyskom-memb-received-1
(membership->conf-no x)
x buf))))))
......@@ -2643,34 +2643,42 @@ See `kom-keep-alive' for more information."
(lyskom-read-conf-stat (lyskom-get-string 'conf-to-check-mship-of)
'(all) nil nil t)))
(mship (lyskom-is-member (conf-stat->conf-no conf-stat) pers-no)))
(if mship
(if (membership-type->passive (membership->type mship))
(lyskom-format-insert 'pers-is-passive-member-of-conf
pers-no conf-stat)
(lyskom-format-insert 'pers-is-member-of-conf pers-no conf-stat)
(when kom-deferred-printing
(lyskom-format-insert
'pers-is-member-of-conf-2
(lyskom-format-time
'date-and-time
(membership->last-time-read mship))
(lyskom-create-defer-info
'query-read-texts
(list pers-no (conf-stat->conf-no conf-stat) t 0)
(lambda (membership defer-info)
(if (null membership)
(lyskom-replace-deferred
defer-info (lyskom-get-string 'Unknown-number))
(let ((conf-stat (defer-info->data defer-info)))
(lyskom-replace-deferred defer-info
(number-to-string
(- (+ (conf-stat->first-local-no conf-stat)
(conf-stat->no-of-texts conf-stat))
(membership->last-text-read membership)
(length (membership->read-texts membership))
1))))))
nil nil "%#1s" conf-stat))))
(lyskom-format-insert 'pers-is-not-member-of-conf pers-no (conf-stat->conf-no conf-stat)))))
(if (null mship)
(lyskom-format-insert 'pers-is-not-member-of-conf pers-no (conf-stat->conf-no conf-stat))
(if (membership-type->passive (membership->type mship))
(progn
(lyskom-format-insert 'pers-is-passive-member-of-conf
pers-no conf-stat)
(lyskom-format-insert 'pers-will-receive-async
(membership-type->message-flag
(membership->type mship))))
(lyskom-format-insert 'pers-is-member-of-conf pers-no conf-stat)
(lyskom-format-insert 'pers-will-receive-async
(membership-type->message-flag
(membership->type mship)))
(when kom-deferred-printing
(lyskom-format-insert
'pers-is-member-of-conf-2
(lyskom-format-time
'date-and-time
(membership->last-time-read mship))
(lyskom-create-defer-info
'query-read-texts
(list pers-no (conf-stat->conf-no conf-stat) t 0)
(lambda (membership defer-info)
(if (null membership)
(lyskom-replace-deferred
defer-info (lyskom-get-string 'Unknown-number))
(let ((conf-stat (defer-info->data defer-info)))
(lyskom-replace-deferred defer-info
(number-to-string
(- (+ (conf-stat->first-local-no conf-stat)
(conf-stat->no-of-texts conf-stat))
(membership->last-text-read membership)
(length (membership->read-texts membership))
1))))))
nil nil "%#1s" conf-stat))))
)))
(def-kom-command kom-will-person-read-text (pers-no text-no)
"Check if a particular person is a member of any recipient of a text..
......@@ -3346,6 +3354,31 @@ are advisory; clients may ignore them."
(cache-del-conf-stat (conf-stat->conf-no conf-stat)))))))
(def-kom-command kom-change-message-flag (uconf-stat)
"Specify whether to receive group messages to a particular conference."
(interactive (list (lyskom-read-uconf-stat 'set-message-flag-for-conf
'(membership) nil
lyskom-current-conf t)))
(when uconf-stat
(let* ((mship (lyskom-get-membership (uconf-stat->conf-no uconf-stat) t)))
(if (null mship)
(lyskom-format-insert 'not-member-of-conf uconf-stat)
(set-membership-type->message-flag
(membership->type mship)
(lyskom-j-or-n-p (lyskom-format 'set-message-flag-to-what
uconf-stat)))
(lyskom-format-insert 'setting-message-flag
(membership-type->message-flag
(membership->type mship))
uconf-stat)
(lyskom-report-command-answer
(blocking-do 'set-membership-type
lyskom-pers-no
(uconf-stat->conf-no uconf-stat)
(membership->type mship)))))))
;;; ================================================================
;;; Temporary function for when we moved kom-extended-command from a
......
......@@ -190,13 +190,16 @@ more of the following:
conf Return conferences (not letterboxes),
pers Return persons (letterboxes),
login Return persons who are also logged-in, and
membership Return only conferences and letterboxes lyskom-pers-no
is a member of.
none Return names that do not match anything in the database.
(restrict c1 c2 ...) Restrict matching to conference numbers c1,
c2 etc. The implementation is inefficient for long lists.
Optional arguments
EMPTY allow nothing to be entered.
INITIAL initial contents of the minibuffer
INITIAL initial contents of the minibuffer. If an integer, use the
name of that conference.
MUSTMATCH if non-nil, the user must enter a valid name.
The return value may be one of
......@@ -205,6 +208,8 @@ nil: Nothing was entered, or
A string: A name that matched nothing in the database."
(lyskom-completing-clear-cache)
(when (integerp initial)
(setq initial (conf-stat->name (blocking-do 'get-uconf-stat initial))))
(let* ((completion-ignore-case t)
(minibuffer-local-completion-map
lyskom-minibuffer-local-completion-map)
......@@ -222,7 +227,9 @@ A string: A name that matched nothing in the database."
'lyskom-read-conf-internal
type
mustmatch
initial
(if (listp initial)
initial
(cons initial 0))
'lyskom-name-hist)))
(setq result
(cond ((null read-string) nil)
......@@ -329,9 +336,11 @@ function work as a name-to-conf-stat translator."
(lyskom-read-conf-get-logins)))
(x-list (lyskom-completing-lookup-z-name string
(if (or (memq 'all predicate)
(memq 'membership predicate)
(memq 'conf predicate)
(memq 'none predicate)) 1 0)
(if (or (memq 'all predicate)
(memq 'membership predicate)
(memq 'pers predicate)
(memq 'none predicate)
(memq 'login predicate)) 1 0)))
......@@ -578,8 +587,11 @@ function work as a name-to-conf-stat translator."
conf-type
(conf-type->letterbox conf-type))
(and (memq 'login predicate)
conf-type
conf-no
(memq conf-no logins))
(and (memq 'membership predicate)
conf-no
(lyskom-get-membership conf-no t))
(and (memq 'none predicate)
(and (null conf-no)
(null x-list)))))
......
......@@ -250,7 +250,8 @@ nil -> Ingenting."
(substitute-command-keys
(lyskom-get-string 'header-separator))
body
(lyskom-get-string 'header-subject))
(lyskom-get-string 'header-subject)
`(read-only t))
where-put-misc)
(set-buffer edit-buffer)
(goto-char where-put-misc)
......
......@@ -603,6 +603,7 @@ Read all about it at http://www.lysator.liu.se/history/")
(pers-is-passive-member-of-conf . "Well, %#1P is only a passive member of the conference %#2M.\n")
(pers-is-not-member-of-conf . "No, %#1P is not a member of the conference %#2M.\n")
(pers-is-member-of-conf-2 . "Number of unread: %#2D (last access %#1s)\n")
(pers-will-receive-async . "Reception of group messages %#1?b%[enabled%]%[disabled%]\n")
(Unknown-number . "Unknown number")
(text-to-check-will-read-for . "...for membership in recipients of text: ")
(pers-to-check-will-read-for . "Person to check: ")
......@@ -919,7 +920,7 @@ Text %#1n has more than one root but only one of the trees will be shown.\n")
Post: \\[kom-edit-send], \
Kill: \\[kom-edit-quit], \
Help: \\[describe-mode] ---")
(text-mass . "%#4s%#1s\n%#2s\n%#3s")
(text-mass . "%#4s%#1s\n%[%#5@%#2s%]\n%#3s")
(comment-to-by . "%#1s to text %#2n%#3s.\n")
(already-sent . "You have already posted this text. Post it anyway? ")
(subject . "Subject: ")
......@@ -1618,10 +1619,13 @@ You must become an active member of the conference to enter it.\n")
(invitation-mt-type . "invited")
(passive-mt-type . "passive")
(secret-mt-type . "secret")
(message-flag-off-mt-type . "no group messages")
(message-flag-on-mt-type . "group messages")
(Invitation-mt-type . "Invited")
(Passive-mt-type . "Passive")
(Secret-mt-type . "Secret")
(Message-flag-mt-type . "Group messages")
(not-author-try-anyway-p . "You are not the author of the text. Try anyway? ")
(what-no-comments-no . "Which text do you want to prevent comments to: ")
......@@ -1920,6 +1924,10 @@ environment to one that uses \"%#2s\" to encode text.
(limit-import-of-what . "Limit import of what? ")
(limit-import-not-super . "You do not seem to be the supervisor of the conference. Try anyway? ")
(limiting-import . "Limiting import of %#1s to %#2M...")
(set-message-flag-for-conf . "Sett message flag for which conference? ")
(set-message-flag-to-what . "Receive grupp messages to %#1M? ")
(setting-message-flag . "%#1?b%[Enabling%]%[Disabling%] reception of group messages to %#2M...")
))
......@@ -2150,6 +2158,7 @@ environment to one that uses \"%#2s\" to encode text.
(kom-join-all-conferences . "Join all conferences")
(kom-leave-all-conferences . "Leave (almost) all conferences")
(kom-limit-import . "Limit imported texts")
(kom-change-message-flag . "Change reception (of) group messages")
))
(lyskom-language-var global lyskom-language-codes en
......
......@@ -480,11 +480,18 @@ Automatically created with def-komtype" type)
(membership-type :read-only t))
:nil-safe)
;;;
;;; Note that message-flag here is *not* the same as in the
;;; protocol. The value of message-flag is computed from
;;; message-invert in the protocol when received and when
;;; sent.
;;;
(def-komtype membership-type
(invitation
passive
secret
(rsv1 :read-only t)
message-flag
(rsv2 :read-only t)
(rsv3 :read-only t)
(rsv4 :read-only t)
......
......@@ -3920,7 +3920,8 @@ Other objects are converted correctly."
(lyskom-prot-a-format-bool (membership-type->invitation membership-type))
(lyskom-prot-a-format-bool (membership-type->passive membership-type))
(lyskom-prot-a-format-bool (membership-type->secret membership-type))
(lyskom-prot-a-format-bool (membership-type->rsv1 membership-type))
(lyskom-prot-a-format-bool (eq (membership-type->message-flag membership-type)
(membership-type->passive membership-type)))
(lyskom-prot-a-format-bool (membership-type->rsv2 membership-type))
(lyskom-prot-a-format-bool (membership-type->rsv3 membership-type))
(lyskom-prot-a-format-bool (membership-type->rsv4 membership-type))
......
......@@ -270,11 +270,11 @@ only recomputed if the window width changes."
(if (and lp--last-format-string
(eq (window-width) lp--last-window-width))
lp--last-format-string
(let ((total (- (window-width) 1 3 3 2 12 2 5 2 3 1)))
(let ((total (- (window-width) 1 3 3 2 12 2 5 2 4 1)))
(setq lp--last-window-width (window-width))
(setq lp--last-format-string
(concat "%#1c %=3#2s %#9c %=-" (number-to-string total)
"#3M %=-12#4s %[%#13@%=5#5s%] %[%#10@%#6c%]%[%#11@%#7c%]%[%#12@%#8c%]")))))
(concat "%#1c %=3#2s %#10c %=-" (number-to-string total)
"#3M %=-12#4s %[%#15@%=5#5s%] %[%#11@%#6c%]%[%#12@%#7c%]%[%#13@%#8c%]%[%#14@%#9c%]")))))
(defun lp--format-insert-entry (entry)
"Format ENTRY and insert it into the current buffer at point."
......@@ -335,10 +335,11 @@ only recomputed if the window width changes."
'date
(membership->last-time-read (lp--entry->membership entry)))
(if un (int-to-string un) "")
(if (membership-type->invitation (membership->type (lp--entry->membership entry))) ?I ?.)
(if (membership-type->secret (membership->type (lp--entry->membership entry))) ?H ?.)
(if (membership-type->passive (membership->type (lp--entry->membership entry))) ?P ?.)
(if (membership-type->message-flag (membership->type (lp--entry->membership entry))) ?M ?.)
(if (and conf-stat (eq lyskom-pers-no (conf-stat->supervisor conf-stat))) ?O ?\ )
(lyskom-default-button 'prioritize-flag-menu
(list entry 'invitation)
......@@ -358,6 +359,12 @@ only recomputed if the window width changes."
(lyskom-get-string 'Passive-mt-type)
(membership->conf-no
(lp--entry->membership entry))))
(lyskom-default-button 'prioritize-flag-menu
(list entry 'message-flag)
(list "%#1s (%=#2M)"
(lyskom-get-string 'Message-flag-mt-type)
(membership->conf-no
(lp--entry->membership entry))))
'(lp--unread t)
)))
(if defer-info
......@@ -721,7 +728,8 @@ FLAG must be one of 'invitation, 'secret or 'passive."
(funcall
(cond ((eq flag 'invitation) 'membership-type->invitation)
((eq flag 'secret) 'membership-type->secret)
((eq flag 'passive) 'membership-type->passive))
((eq flag 'passive) 'membership-type->passive)
((eq flag 'message-flag) 'membership-type->message-flag))
(membership->type (lp--entry->membership entry))))
(defun lp--flag-menu-set (entry flag value)
......@@ -730,7 +738,8 @@ FLAG must be one of 'invitation, 'secret or 'passive."
(funcall
(cond ((eq flag 'invitation) 'set-membership-type->invitation)
((eq flag 'secret) 'set-membership-type->secret)
((eq flag 'passive) 'set-membership-type->passive))
((eq flag 'passive) 'set-membership-type->passive)
((eq flag 'message-flag) 'set-membership-type->message-flag))
(membership->type (lp--entry->membership entry))
value))
......@@ -1546,9 +1555,9 @@ Medlemskap f
Flytta upp: M-p Flytta ned: M-n Ändra flaggor: I,H,P
Avsluta: C-c C-c Mer hjälp: C-h m
")
buf
))
(lyskom-wait-queue 'deferred)
buf
))
......
......@@ -597,8 +597,14 @@ than 0. Args: ITEMS-TO-PARSE PRE-FETCHED. Returns -1 if ITEMS-TO-PARSE is
(defun lyskom-parse-membership-type ()
"Parse a membership type"
(apply 'lyskom-create-membership-type
(lyskom-parse-bitstring '(nil nil nil nil nil nil nil nil))))
(let ((type
(apply 'lyskom-create-membership-type
(lyskom-parse-bitstring '(nil nil nil nil nil nil nil nil)))))
(set-membership-type->message-flag
type
(eq (membership-type->passive type)
(membership-type->message-flag type)))
type))
(defun lyskom-parse-member-old ()
"Parse an old-style member record."
......
......@@ -613,6 +613,7 @@ shown to other users."
;; Now we are logged in.
(setq lyskom-pers-no new-me)
(setq lyskom-is-administrator nil)
(lyskom-insert-string 'are-logged-in)
(unless lyskom-is-running-compiled
......
......@@ -827,6 +827,7 @@ M
(pers-is-passive-member-of-conf . "Nja, %#1P r bara passiv medlem i mtet %#2M.\n")
(pers-is-not-member-of-conf . "Nej, %#1P r inte medlem i mtet %#2M.\n")
(pers-is-member-of-conf-2 . "Antal olsta: %#2D (senast inne %#1s)\n")
(pers-will-receive-async . "Tar %#1?b%[%]%[inte %]emot gruppmeddelanden till mtet\n")
(Unknown-number . "Oknt antal")
(text-to-check-will-read-for . "...fr medlemskap i mottagare till inlgg: ")
(pers-to-check-will-read-for . "Vilken person vill du kontrollera: ")
......@@ -951,7 +952,7 @@ M
Skicka in=\\[kom-edit-send], \
Avbryt=\\[kom-edit-quit], \
Annat se \\[describe-mode] ---")
(text-mass . "%#4s%#1s\n%#2s\n%#3s")
(text-mass . "%#4s%#1s\n%[%#5@%#2s%]\n%#3s")
(comment-to-by . "%#1s till text %#2n%#3s.\n")
(already-sent . "Du har redan skickat denna text en gng. Snd nd? ")
(subject . "rende: ")
......@@ -1654,10 +1655,13 @@ Du m
(invitation-mt-type . "inbjuden")
(passive-mt-type . "passiv")
(secret-mt-type . "hemlig")
(message-flag-off-mt-type . "ej gruppmeddelanden")
(message-flag-on-mt-type . "gruppmeddelanden")
(Invitation-mt-type . "Inbjuden")
(Passive-mt-type . "Passiv")
(Secret-mt-type . "Hemlig")
(Message-flag-mt-type . "Gruppmeddelanden")
(not-author-try-anyway-p . "Du r inte frfattare till inlgget. Vill du frska nd? ")
(what-no-comments-no . "Vilken text vill du inte ha kommentarer till: ")
......@@ -1954,6 +1958,10 @@ teckenkodning.
(limit-import-of-what . "Begrnsa import av vad? ")
(limit-import-not-super . "Du verkar inte vara organisatr fr mtet. Frsk nd? ")
(limiting-import . "Begrnsar import av %#1s i %#2M...")
(set-message-flag-for-conf . "ndra meddelandeflagga fr vilket mte? ")
(set-message-flag-to-what . "Vill du ta emot gruppmeddelanden till %#1M? ")
(setting-message-flag . "%#1?b%[Slr p%]%[Stnger av%] mottagning av gruppmeddelanden till %#2M...")
))
(lyskom-language-var local lyskom-month-names sv
......@@ -2183,6 +2191,7 @@ teckenkodning.
(kom-join-all-conferences . "Bli medlem i alla mten")
(kom-leave-all-conferences . "Uttrd ur (nstan) alla mten")
(kom-limit-import . "Begrnsa import av texter")
(kom-change-message-flag . "ndra mottagning (av) gruppmeddelanden")
))
(lyskom-language-var local lyskom-language-codes sv
......
......@@ -1211,7 +1211,12 @@ TIME defaults to the current client time."
(delete nil
(list (if (membership-type->invitation mt) (lyskom-get-string 'invitation-mt-type) nil)
(if (membership-type->passive mt) (lyskom-get-string 'passive-mt-type) nil)
(if (membership-type->secret mt) (lyskom-get-string 'secret-mt-type) nil)))
(if (membership-type->secret mt) (lyskom-get-string 'secret-mt-type) nil)
(if (eq (membership-type->message-flag mt)
(membership-type->passive mt))
(lyskom-get-string (if (membership-type->message-flag mt)
'message-flag-on-mt-type
'message-flag-off-mt-type)))))
", ")))
(if (string= tmp "")
tmp
......
......@@ -2978,6 +2978,7 @@ Users are encouraged to use their best sense of humor."
kom-leave-all-conferences
kom-will-person-read-text
kom-limit-import
kom-change-message-flag
))
;;; ================================================================
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment