Geary.Folder, Geary.SpecialFolderType: Move folder name i18n to client

Remove `Geary.Folder::get_display_name` method, and
`display-name-changed` signal, and
`Geary.SpecialFolderType::get_display_name`. Add new equivalent methods
for client in `Util.I18n` and use those instead.
This commit is contained in:
Michael Gratton 2020-03-27 17:45:50 +11:00 committed by Michael James Gratton
parent d2eec63cfb
commit 19d29b9e9d
7 changed files with 84 additions and 102 deletions

View file

@ -597,7 +597,7 @@ internal class Application.Controller : Geary.BaseObject {
"Conversation moved to %s",
"Conversations moved to %s",
conversations.size
).printf(destination.get_display_name()),
).printf(Util.I18n.to_folder_display_name(destination)),
/// Translators: Label for in-app
/// notification. String substitution is the name
/// of the source folder.
@ -605,7 +605,7 @@ internal class Application.Controller : Geary.BaseObject {
"Conversation restored to %s",
"Conversations restored to %s",
conversations.size
).printf(source.get_display_name())
).printf(Util.I18n.to_folder_display_name(source))
),
context.cancellable
);
@ -627,7 +627,7 @@ internal class Application.Controller : Geary.BaseObject {
"Conversation restored to %s",
"Conversations restored to %s",
messages.size
).printf(source.get_display_name());
).printf(Util.I18n.to_folder_display_name(source));
if (destination == ARCHIVE) {
Geary.FolderSupport.Archive? archive_source = (
@ -681,7 +681,7 @@ internal class Application.Controller : Geary.BaseObject {
"Conversation moved to %s",
"Conversations moved to %s",
messages.size
).printf(destination.get_display_name()),
).printf(Util.I18n.to_folder_display_name(dest)),
undone_tooltip
);
}
@ -704,7 +704,7 @@ internal class Application.Controller : Geary.BaseObject {
"Message restored to %s",
"Messages restored to %s",
messages.size
).printf(source.get_display_name());
).printf(Util.I18n.to_folder_display_name(source));
if (destination == ARCHIVE) {
Geary.FolderSupport.Archive? archive_source = (
@ -760,7 +760,7 @@ internal class Application.Controller : Geary.BaseObject {
"Message moved to %s",
"Messages moved to %s",
messages.size
).printf(destination.get_display_name()),
).printf(Util.I18n.to_folder_display_name(dest)),
undone_tooltip
);
}
@ -788,7 +788,7 @@ internal class Application.Controller : Geary.BaseObject {
"Conversation labelled as %s",
"Conversations labelled as %s",
conversations.size
).printf(destination.get_display_name()),
).printf(Util.I18n.to_folder_display_name(destination)),
/// Translators: Label for in-app
/// notification. String substitution is the name
/// of the destination folder.
@ -796,7 +796,7 @@ internal class Application.Controller : Geary.BaseObject {
"Conversation un-labelled as %s",
"Conversations un-labelled as %s",
conversations.size
).printf(destination.get_display_name())
).printf(Util.I18n.to_folder_display_name(destination))
),
context.cancellable
);

View file

@ -150,7 +150,7 @@ internal class Application.FolderStoreFactory : Geary.BaseObject {
internal void folder_type_changed() {
notify_property("folder-type");
this._display_name = this.backing.get_display_name();
this._display_name = Util.I18n.to_folder_display_name(this.backing);
notify_property("display-name");
}

View file

@ -593,7 +593,7 @@ public class Application.MainWindow :
/// substitution being the currently selected folder name,
/// the second being the selected account name.
title = _("%s — %s").printf(
this.selected_folder.get_display_name(),
Util.I18n.to_folder_display_name(this.selected_folder),
this.selected_folder.account.information.display_name
);
}
@ -606,7 +606,7 @@ public class Application.MainWindow :
);
this.main_toolbar.folder = (
this.selected_folder != null
? this.selected_folder.get_display_name()
? Util.I18n.to_folder_display_name(this.selected_folder)
: ""
);
}
@ -1284,14 +1284,13 @@ public class Application.MainWindow :
}
internal bool prompt_empty_folder(Geary.SpecialFolderType type) {
var folder_name = Util.I18n.to_folder_type_display_name(type);
ConfirmationDialog dialog = new ConfirmationDialog(
this,
_("Empty all email from your %s folder?").printf(
type.get_display_name()
),
_("Empty all email from your %s folder?").printf(folder_name),
_("This removes the email from Geary and your email server.") +
" <b>" + _("This cannot be undone.") + "</b>",
_("Empty %s").printf(type.get_display_name()),
_("Empty %s").printf(folder_name),
"destructive-action"
);
dialog.use_secondary_markup(true);
@ -1693,10 +1692,12 @@ public class Application.MainWindow :
break;
}
if (count > 0)
this.main_toolbar.folder = _("%s (%d)").printf(this.selected_folder.get_display_name(), count);
else
this.main_toolbar.folder = this.selected_folder.get_display_name();
var folder_name = Util.I18n.to_folder_display_name(this.selected_folder);
this.main_toolbar.folder = (
count > 0
? _("%s (%d)").printf(folder_name, count)
: folder_name
);
}
private void update_conversation_actions(ConversationCount count) {

View file

@ -14,17 +14,15 @@ public class FolderList.FolderEntry : FolderList.AbstractFolderEntry, Sidebar.In
has_new = false;
folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_TOTAL].connect(on_counts_changed);
folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_UNREAD].connect(on_counts_changed);
folder.display_name_changed.connect(on_display_name_changed);
}
~FolderEntry() {
folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_TOTAL].disconnect(on_counts_changed);
folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_UNREAD].disconnect(on_counts_changed);
folder.display_name_changed.disconnect(on_display_name_changed);
}
public override string get_sidebar_name() {
return folder.get_display_name();
return Util.I18n.to_folder_display_name(this.folder);
}
public override string? get_sidebar_tooltip() {
@ -120,10 +118,6 @@ public class FolderList.FolderEntry : FolderList.AbstractFolderEntry, Sidebar.In
sidebar_tooltip_changed(get_sidebar_tooltip());
}
private void on_display_name_changed() {
sidebar_name_changed(folder.get_display_name());
}
public override int get_count() {
switch (folder.special_folder_type) {
// for Drafts and Outbox, interested in showing total count, not unread count

View file

@ -247,4 +247,63 @@ namespace Util.I18n {
return country_name;
}
/**
* Returns the localised display name name for specific folder.
*
* If the folder has a special type, the result of {@link
* to_folder_type_display_name} is returned, otherwise the last
* folder path step is returned.
*/
public string? to_folder_display_name(Geary.Folder folder) {
var name = to_folder_type_display_name(folder.special_folder_type);
if (Geary.String.is_empty_or_whitespace(name)) {
name = folder.path.name;
}
return name;
}
/**
* Returns the localised name for a specific folder type, if any.
*/
public unowned string? to_folder_type_display_name(Geary.SpecialFolderType type) {
switch (type) {
case INBOX:
return _("Inbox");
case DRAFTS:
return _("Drafts");
case SENT:
return _("Sent");
case FLAGGED:
return _("Starred");
case IMPORTANT:
return _("Important");
case ALL_MAIL:
return _("All Mail");
case SPAM:
return _("Spam");
case TRASH:
return _("Trash");
case OUTBOX:
return _("Outbox");
case SEARCH:
return _("Search");
case ARCHIVE:
return _("Archive");
case NONE:
default:
return null;
}
}
}

View file

@ -393,15 +393,6 @@ public abstract class Geary.Folder : BaseObject, Logging.Source {
public signal void special_folder_type_changed(Geary.SpecialFolderType old_type,
Geary.SpecialFolderType new_type);
/**
* Fired when the Folder's display name has changed.
*
* @see get_display_name
*/
public signal void display_name_changed();
protected Folder() {
}
protected virtual void notify_opened(Geary.Folder.OpenState state, int count) {
opened(state, count);
@ -448,32 +439,9 @@ public abstract class Geary.Folder : BaseObject, Logging.Source {
email_locally_complete(ids);
}
/**
* In its default implementation, this will also call {@link notify_display_name_changed} since
* that's often the case; if not, subclasses should override.
*/
protected virtual void notify_special_folder_type_changed(Geary.SpecialFolderType old_type,
Geary.SpecialFolderType new_type) {
protected virtual void notify_special_folder_type_changed(SpecialFolderType old_type,
SpecialFolderType new_type) {
special_folder_type_changed(old_type, new_type);
// in default implementation, this may also mean the display name changed; subclasses may
// override this behavior, but no way to detect this, so notify
notify_display_name_changed();
}
protected virtual void notify_display_name_changed() {
display_name_changed();
}
/**
* Returns a name suitable for displaying to the user.
*
* Default is to display the name of the Folder's path, unless it's a special folder,
* in which case {@link SpecialFolderType.get_display_name} is returned.
*/
public virtual string get_display_name() {
return (special_folder_type == Geary.SpecialFolderType.NONE)
? path.name : special_folder_type.get_display_name();
}
/** Determines if a folder has been opened, and if so in which way. */

View file

@ -5,6 +5,7 @@
*/
public enum Geary.SpecialFolderType {
NONE,
INBOX,
SEARCH,
@ -18,49 +19,8 @@ public enum Geary.SpecialFolderType {
OUTBOX,
ARCHIVE;
public unowned string get_display_name() {
switch (this) {
case INBOX:
return _("Inbox");
case DRAFTS:
return _("Drafts");
case SENT:
return _("Sent Mail");
case FLAGGED:
return _("Starred");
case IMPORTANT:
return _("Important");
case ALL_MAIL:
return _("All Mail");
case SPAM:
return _("Spam");
case TRASH:
return _("Trash");
case OUTBOX:
return _("Outbox");
case SEARCH:
return _("Search");
case ARCHIVE:
return _("Archive");
case NONE:
default:
return _("None");
}
}
public bool is_outgoing() {
return this == SENT || this == OUTBOX;
}
}
}