Add new message menu item

This commit is contained in:
Ximi1970
2024-08-17 14:40:45 +02:00
parent 6ceffc769a
commit 5870398ab1
35 changed files with 516 additions and 79 deletions

View File

@@ -528,27 +528,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation>&amp;Anzeigen/Verbergen</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;Neue Nachricht...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;Standardkonto</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>&amp;Einstellungen</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>&amp;Über</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>&amp;Beenden</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation>Schließen</translation>
</message>

View File

@@ -528,27 +528,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation>&amp;Εμφάνιση/Απόκρυψη</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;Νέο μήνυμα...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;Προεπιλεγμένος λογαριασμός</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>&amp;Προτιμήσεις</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>&amp;Σχετικά</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>&amp;Έξοδος</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation>Κλείσιμο</translation>
</message>

View File

@@ -15,7 +15,7 @@
<message>
<location filename="../aboutdialog.ui" line="26"/>
<source>&lt;a href=&quot;https://github.com/Ximi1970/systray-x&quot;&gt;SysTray-X&lt;/a&gt; Companion App by Ximi1970</source>
<translation type="unfinished"></translation>
<translation>&lt;a href=&quot;https://github.com/Ximi1970/systray-x&quot;&gt;SysTray-X&lt;/a&gt; Companion App by Ximi1970</translation>
</message>
<message>
<location filename="../aboutdialog.ui" line="43"/>
@@ -326,27 +326,27 @@
<message>
<location filename="../preferences.ui" line="137"/>
<source>Position</source>
<translation type="unfinished"></translation>
<translation>Position</translation>
</message>
<message>
<location filename="../preferences.ui" line="145"/>
<source>Correct window positions</source>
<translation type="unfinished"></translation>
<translation>Correct window positions</translation>
</message>
<message>
<location filename="../preferences.ui" line="154"/>
<source>No titlebar correction</source>
<translation type="unfinished"></translation>
<translation>No titlebar correction</translation>
</message>
<message>
<location filename="../preferences.ui" line="167"/>
<source>Add titlebar size</source>
<translation type="unfinished"></translation>
<translation>Add titlebar size</translation>
</message>
<message>
<location filename="../preferences.ui" line="177"/>
<source>Subtract titlebar size</source>
<translation type="unfinished"></translation>
<translation>Subtract titlebar size</translation>
</message>
<message>
<location filename="../preferences.ui" line="282"/>
@@ -545,27 +545,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation>&amp;Show/Hide</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;New message...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;Default account</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>&amp;Preferences</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>&amp;About</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>&amp;Quit</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation>Close</translation>
</message>

View File

@@ -529,27 +529,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation>&amp;Mostra/Nascondi</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;Nuovo messaggio...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;Conto predefinito</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>&amp;Preferenze</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>&amp;Informazioni</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>&amp;Esci</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation>Chiudi</translation>
</message>

View File

@@ -532,27 +532,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation>&amp;Tonen/Verbergen</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;Nieuw bericht...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;Standaardaccount</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>&amp;Opties</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>O&amp;ver</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>&amp;Afsluiten</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation>Sluiten</translation>
</message>

View File

@@ -528,27 +528,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation>&amp;Exibir/Ocultar</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;Nova mensagem...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;Conta padrão</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>&amp;Preferências</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>&amp;Sobre</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>&amp;Sair</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation>Fechar</translation>
</message>

View File

@@ -529,27 +529,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation>&amp;Показать/Скрыть</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;Новое сообщение...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;Стандартный аккаунт</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>&amp;Настройки</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>&amp;О приложении</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>&amp;Выход</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation>Закрыть</translation>
</message>

View File

@@ -512,27 +512,38 @@
<context>
<name>SysTrayX</name>
<message>
<location filename="../systrayx.cpp" line="242"/>
<location filename="../systrayx.cpp" line="256"/>
<source>&amp;Show/Hide</source>
<translation> / (&amp;S)</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="246"/>
<location filename="../systrayx.cpp" line="269"/>
<location filename="../systrayx.cpp" line="279"/>
<source>&amp;New message...</source>
<translation>&amp;...</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="282"/>
<source>&amp;Default account</source>
<translation>&amp;</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="308"/>
<source>&amp;Preferences</source>
<translation>(&amp;P)</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="250"/>
<location filename="../systrayx.cpp" line="317"/>
<source>&amp;About</source>
<translation>(&amp;A)</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="254"/>
<location filename="../systrayx.cpp" line="327"/>
<source>&amp;Quit</source>
<translation>退(&amp;Q)</translation>
</message>
<message>
<location filename="../systrayx.cpp" line="683"/>
<location filename="../systrayx.cpp" line="746"/>
<source>Close</source>
<translation></translation>
</message>

View File

@@ -1141,6 +1141,32 @@ void Preferences::setShowHideShortcut( QKeySequence key_seq )
}
/*
* Get the new message from list.
*/
const QStringList& Preferences::getNewMessageFroms() const
{
return m_new_message_froms;
}
/*
* Set the new message from list.
*/
void Preferences::setNewMessageFroms( const QStringList& list )
{
if( m_new_message_froms != list )
{
m_new_message_froms = list;
/*
* Tell the world the new preference
*/
emit signalNewMessageFromsChange();
}
}
/*
* Get the KDE integration option.
*/

View File

@@ -627,6 +627,16 @@ class Preferences : public QObject
*/
void setShowHideShortcut( QKeySequence key_seq );
/**
* @brief getNewMessageFroms. Get the new message from list.
*/
const QStringList& getNewMessageFroms() const;
/**
* @brief setNewMessageFroms. Set the new message from list.
*/
void setNewMessageFroms( const QStringList& list );
/**
* @brief getKdeIntegrationOption. Get the KDE integration option.
*
@@ -856,6 +866,11 @@ class Preferences : public QObject
*/
void signalShowHideShortcutChange();
/**
* @brief signalNewMessageFromsChange. Signal the new message froms change.
*/
void signalNewMessageFromsChange();
private:
/**
@@ -1077,6 +1092,11 @@ class Preferences : public QObject
*/
QKeySequence m_show_hide_shortcut;
/**
* @brief m_new_message_froms. The new message froms list.
*/
QStringList m_new_message_froms;
/**
* @brief m_kde_integration_option. KDE integration option.
*/

View File

@@ -161,6 +161,8 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
#endif
connect( m_preferences, &Preferences::signalNewMessageFromsChange, this, &SysTrayX::slotNewMessageFromsChange );
/*
* Connect link signals
*/
@@ -194,12 +196,16 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
*/
getPreferences();
m_preferences->displayDebug();
/*
// m_preferences->displayDebug();
m_preferences->setBrowserVersion( "115.1.0" );
// m_preferences->setBrowserVersion( "102.2.3" );
QStringList list;
list.append( "ximi1" );
list.append( "ximi2" );
m_preferences->setNewMessageFroms( list );
if( m_preferences->getShortcutsOption() )
{
m_preferences->setShowHideShortcut( QKeySequence( Qt::CTRL | Qt::Key_P ) );
@@ -239,38 +245,89 @@ void SysTrayX::getPreferences()
*/
void SysTrayX::createMenu()
{
m_showhide_action = new QAction(tr("&Show/Hide"), this);
m_showhide_action->setIcon( QIcon( ":/files/icons/window-restore.png" ) );
connect( m_showhide_action, &QAction::triggered, m_win_ctrl, &WindowCtrl::slotShowHide );
m_new_action = new QAction(tr("&New message..."), this);
m_new_action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
connect( m_new_action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
m_pref_action = new QAction(tr("&Preferences"), this);
m_pref_action->setIcon( QIcon( ":/files/icons/gtk-preferences.png" ) );
connect( m_pref_action, &QAction::triggered, m_pref_dialog, &PreferencesDialog::slotShowDialog );
m_about_action = new QAction(tr("&About"), this);
m_about_action->setIcon( QIcon( ":/files/icons/help-about.png" ) );
connect( m_about_action, &QAction::triggered, this, &SysTrayX::slotAbout );
m_quit_action = new QAction( tr("&Quit"), this );
m_quit_action->setIcon( QIcon( ":/files/icons/window-close.png" ) );
connect( m_quit_action, &QAction::triggered, this, &SysTrayX::slotShutdown );
/*
* Setup menu
*/
m_tray_icon_menu = new QMenu();
/*
* Show / hide
*/
m_showhide_action = new QAction(tr("&Show/Hide"), this);
m_showhide_action->setIcon( QIcon( ":/files/icons/window-restore.png" ) );
connect( m_showhide_action, &QAction::triggered, m_win_ctrl, &WindowCtrl::slotShowHide );
m_tray_icon_menu->addAction( m_showhide_action );
m_tray_icon_menu->addSeparator();
m_tray_icon_menu->addAction( m_new_action );
m_tray_icon_menu->addSeparator();
/*
* New message
*/
QStringList froms = m_preferences->getNewMessageFroms();
if( froms.size() < 2 )
{
m_new_action = new QAction(tr("&New message..."), this);
m_new_action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
m_new_action->setData(0);
connect( m_new_action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
m_tray_icon_menu->addAction( m_new_action );
m_tray_icon_menu->addSeparator();
}
else
{
m_new_menu = new QMenu(tr("&New message..."), m_tray_icon_menu);
m_new_menu->setIcon( QIcon( ":/files/icons/document-new.png" ) );
m_new_action = new QAction(tr("&Default account"), this);
m_new_action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
connect( m_new_action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
m_new_menu->addAction( m_new_action );
m_new_menu->addSeparator();
for( int i = 0; i < froms.size(); ++i )
{
QAction* action = new QAction(froms.at( i ), this);
action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
action->setData( i + 1 );
connect( action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
m_new_actions.append(action);
m_new_menu->addAction( action );
}
m_tray_icon_menu->addMenu( m_new_menu );
m_tray_icon_menu->addSeparator();
}
/*
* Preferences
*/
m_pref_action = new QAction(tr("&Preferences"), this);
m_pref_action->setIcon( QIcon( ":/files/icons/gtk-preferences.png" ) );
connect( m_pref_action, &QAction::triggered, m_pref_dialog, &PreferencesDialog::slotShowDialog );
m_tray_icon_menu->addAction( m_pref_action );
/*
* About
*/
m_about_action = new QAction(tr("&About"), this);
m_about_action->setIcon( QIcon( ":/files/icons/help-about.png" ) );
connect( m_about_action, &QAction::triggered, this, &SysTrayX::slotAbout );
m_tray_icon_menu->addAction( m_about_action );
m_tray_icon_menu->addSeparator();
/*
* Quit
*/
m_quit_action = new QAction( tr("&Quit"), this );
m_quit_action->setIcon( QIcon( ":/files/icons/window-close.png" ) );
connect( m_quit_action, &QAction::triggered, this, &SysTrayX::slotShutdown );
m_tray_icon_menu->addAction( m_quit_action );
}
@@ -814,5 +871,46 @@ void SysTrayX::slotShowHideShortcutChange()
*/
void SysTrayX::slotNewMessage()
{
m_link->sendNewMessage();
QStringList fromList = m_preferences->getNewMessageFroms();
int fromListIndex = ((QAction*)sender())->data().toInt() - 1;
if( fromListIndex < 0 )
{
if( fromList.size() == 1 )
{
m_link->sendNewMessage( fromList.at( 0 ) );
}
else
{
m_link->sendNewMessage( "" );
}
}
else
{
m_link->sendNewMessage( fromList.at( fromListIndex ) );
}
}
void SysTrayX::slotNewMessageFromsChange()
{
// Update the menu item
emit signalConsole("New message froms");
/*
* Setup new menu
*/
destroyMenu();
createMenu();
if( m_tray_icon != nullptr )
{
m_tray_icon->setContextMenu( m_tray_icon_menu );
}
if( m_kde_tray_icon != nullptr )
{
m_kde_tray_icon->setContextMenu( m_tray_icon_menu );
}
}

View File

@@ -198,6 +198,11 @@ class SysTrayX : public QObject
*/
void slotNewMessage();
/**
* @brief slotNewMessageFromsChange. Handle a new message froms change.
*/
void slotNewMessageFromsChange();
private:
/**
@@ -243,12 +248,15 @@ class SysTrayX : public QObject
/**
* @brief m_xxxx_action. Pointer to the menu actions.
*/
QMenu* m_new_menu;
QAction* m_showhide_action;
QAction* m_new_action;
QAction* m_pref_action;
QAction* m_about_action;
QAction* m_quit_action;
QList< QAction* > m_new_actions;
/**
* @brief m_unread_mail. Number of unread mails
*/

View File

@@ -304,10 +304,10 @@ void SysTrayXLink::sendPositions( QList< QPoint > positions )
/*
* Send a new message request.
*/
void SysTrayXLink::sendNewMessage()
void SysTrayXLink::sendNewMessage( const QString& from )
{
QJsonObject newMessageObject;
newMessageObject.insert("newMessage", QJsonValue::fromVariant( "true" ) );
newMessageObject.insert("newMessage", QJsonValue::fromVariant( from ) );
/*
* Store the new document
@@ -670,6 +670,8 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref )
{
bool debug = pref[ "debug" ].toString() == "true";
emit signalConsole( QString("Debug %1").arg( debug ) );
/*
* Store the new debug state
*/
@@ -988,6 +990,24 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref )
*/
m_pref->setShowHideShortcut( QKeySequence::fromString( shortcut ) );
}
if( pref.contains( "newMessageFroms" ) && pref[ "newMessageFroms" ].isArray() )
{
QJsonArray froms = pref[ "newMessageFroms" ].toArray();
QStringList fromsList;
for( int i = 0 ; i < froms.size() ; ++i )
{
fromsList.append( froms.at( i ).toString());
emit signalConsole( QString("From %1").arg( froms.at( i ).toString() ) );
}
/*
* Store the new message from list
*/
m_pref->setNewMessageFroms( fromsList );
}
}

View File

@@ -130,7 +130,7 @@ class SysTrayXLink : public QObject
/**
* @brief sendNewMessage. Send a new message request.
*/
void sendNewMessage();
void sendNewMessage( const QString& from );
private:

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "Konten und Ordner",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "Neue Nachricht",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "Tastatürkürzel",
"description": "Title for Shortcuts options"

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "Λογαριασμοί και φάκελοι",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "Νέο μήνυμα",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "Συντομεύσεις",
"description": "Title for Shortcuts options"

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "Accounts and folders",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "New message",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "Shortcuts",
"description": "Title for Shortcuts options"

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "Account e cartelle",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "Nuovo messaggio",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "Scorciatoie",
"description": "Title for Shortcuts options"

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "Accounts en mappen",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "Nieuw bericht",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "Snelkoppelingen",
"description": "Title for Shortcuts options"

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "Contas e pastas",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "Nova mensagem",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "Atalhos",
"description": "Title for Shortcuts options"

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "Аккаунты и папки",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "Новое сообщение",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "Сочетания",
"description": "Title for Shortcuts options"

View File

@@ -424,6 +424,16 @@
"description": "Title for Accounts options"
},
"accounts_folders": {
"message": "帐户和文件夹",
"description": "Header for the accounts and folders list"
},
"accounts_new": {
"message": "新消息",
"description": "Header for the new message 'from' list"
},
"shortcuts": {
"message": "快捷键",
"description": "Title for Shortcuts options"

View File

@@ -455,6 +455,7 @@ SysTrayX.Messaging = {
"closeApp",
"closeAppArgs",
"showHideShortcut",
"newMessageFroms",
])
.then(
SysTrayX.Messaging.sendPreferencesStorage,
@@ -500,6 +501,7 @@ SysTrayX.Messaging = {
const closeApp = result.closeApp || "";
const closeAppArgs = result.closeAppArgs || "";
const showHideShortcut = result.showHideShortcut || "";
const newMessageFroms = result.newMessageFroms || [];
// Send it to the app
SysTrayX.Link.postSysTrayXMessage({
@@ -536,6 +538,7 @@ SysTrayX.Messaging = {
closeApp,
closeAppArgs,
showHideShortcut,
newMessageFroms,
},
});
},
@@ -573,6 +576,7 @@ SysTrayX.Link = {
},
receiveSysTrayXMessage: async function (response) {
if (response["shutdown"]) {
browser.windowEvent.onNewWindow.removeListener(
SysTrayX.Messaging.onNewWindow
@@ -584,6 +588,19 @@ SysTrayX.Link = {
SysTrayX.Link.postSysTrayXMessage({ shutdown: "true" });
}
const newMessage = response["newMessage"];
if (newMessage !== undefined) {
if (newMessage === "")
{
var tab = await browser.compose.beginNew();
} else {
const details = {
from: newMessage
}
var tab = await browser.compose.beginNew(undefined,details);
}
}
const options = response["options"];
if (options !== undefined) {
SysTrayX.Info.options = options;

View File

@@ -94,6 +94,14 @@ body {
padding: 10px 10px 10px 10px;
}
#accountsTreeHeader {
display: flex;
justify-content: space-between;
width: 25em;
height: 2.2em;
margin-left: 10px
}
ul,
#accountsTree {
list-style-type: none;
@@ -108,6 +116,11 @@ ul,
padding: 10px;
}
#account {
float: right;
margin-right: 40px;
}
/* Style the caret/arrow filler */
.caretfiller::before {
user-select: none; /* Prevent text selection */

View File

@@ -125,6 +125,15 @@ SysTrayX.Accounts = {
);
typeLi.appendChild(typeText);
if (prop === "imap" || prop === "pop3") {
const typeInputAccount = document.createElement("input");
typeInputAccount.setAttribute("type", "checkbox");
typeInputAccount.setAttribute("id", "account");
typeInputAccount.setAttribute("name", accounts[prop][i].name);
typeLi.appendChild(typeInputAccount);
}
// Create a usable folder tree
let folders = [];
@@ -206,14 +215,14 @@ SysTrayX.Accounts = {
treeBase.appendChild(typeLi);
// Setup checkbox control
let checkboxes = treeBase.querySelectorAll('input[type="checkbox"]');
let checkboxes = treeBase.querySelectorAll('input[type="checkbox"]:not([id="account"])');
for (let x = 0; x < checkboxes.length; x++) {
checkboxes[x].addEventListener("change", function (e) {
let parentNode = this.parentNode;
const cbDescendants = parentNode.querySelectorAll(
'input[type="checkbox"]'
'input[type="checkbox"]:not([id="account"])'
);
for (let y = 0; y < cbDescendants.length; y++) {
cbDescendants[y].checked = this.checked;

View File

@@ -718,6 +718,11 @@
<form name="mailform">
<h3>__MSG_accounts__</h3>
<div id="accountsTreeHeader">
<p>__MSG_accounts_folders__</p>
<p>__MSG_accounts_new__</p>
</div>
<ul id="accountsTree"></ul>
<br />

View File

@@ -24,7 +24,7 @@ SysTrayX.SaveOptions = {
// Find all selected folders
const folders = Array.from(
account.parentNode.querySelectorAll(
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"])'
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"]):not([id="account"])'
)
).filter((folder) => folder.checked);
@@ -53,6 +53,25 @@ SysTrayX.SaveOptions = {
filters: filters,
});
//
// Save new message from list
//
const newMessageCheckBoxes = treeBase.querySelectorAll(
'input[type="checkbox"][id="account"]'
);
let froms = [];
newMessageCheckBoxes.forEach((checkbox) => {
if (checkbox.checked) {
froms.push(checkbox.name)
}
});
// Store new message from list
await storage().set({
newMessageFroms: froms,
});
//
// Save debug state
//
@@ -396,6 +415,16 @@ SysTrayX.RestoreOptions = {
SysTrayX.RestoreOptions.onFiltersError
);
//
// Restore new message froms
//
await storage()
.get("newMessageFroms")
.then(
SysTrayX.RestoreOptions.setNewMessageFroms,
SysTrayX.RestoreOptions.onNewMessageFromsError
);
//
// Restore minimize type
//
@@ -1265,7 +1294,7 @@ SysTrayX.RestoreOptions = {
const treeBase = document.getElementById("accountsTree");
const accountsBoxes = treeBase.querySelectorAll(
'input[type="checkbox"][name*="account"]'
'input[type="checkbox"][name*="account"]:not([id="account"])'
);
let accounts = [];
@@ -1299,7 +1328,7 @@ SysTrayX.RestoreOptions = {
);
const checkboxes = Array.from(
account.parentNode.querySelectorAll(
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"])'
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"]):not([id="account"])'
)
);
@@ -1331,6 +1360,30 @@ SysTrayX.RestoreOptions = {
onFiltersError: function (error) {
console.log(`Filters Error: ${error}`);
},
//
// Restore new message froms callbacks
//
setNewMessageFroms: function (result) {
let froms = result.newMessageFroms || [];
const checkboxes = document
.getElementById("accountsTree")
.querySelectorAll('input[type="checkbox"][id="account"]');
froms.forEach((from) => {
checkboxes.forEach((checkbox) => {
if (from === checkbox.name)
{
checkbox.checked = true;
}
})
});
},
onNewMessageFromsError: function (error) {
console.log(`NewMessageFroms Error: ${error}`);
},
};
SysTrayX.StorageReset = {