-
Notifications
You must be signed in to change notification settings - Fork 157
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ENH] add functionality to send later scheduled sending #1091
base: master
Are you sure you want to change the base?
[ENH] add functionality to send later scheduled sending #1091
Conversation
7aaffb2
to
0c58a6a
Compare
Will this work with JMAP as well? |
0c58a6a
to
0aef136
Compare
Yes, anything we add for IMAP, we should check JMAP support as well. Overall, it is built on top of IMAP, so it should work but please check if the new Scheduled folder is OK for JMAP. Overall, the code is good but I have one concern - it only sends out while you are actively using Cypht and it seems to warn of unsent/scheduled messages each time you leave a page (onbeforeunload). That would be annoying for the end user. I believe this comment #576 (comment) proposes using sendAt support from jmap servers or scheduled send - if it is supported, we use it, if not, we fallback to a more annoying option. At any rate, it should be configurable. This could be fully-supported in the Cypht-Tiki integration where there could be a Tiki command run periodically in the scheduler that checks and sends scheduled messages. |
@kroky I added a commit to fix issue concerning onbeforeunload event and also add the option to change schedule time or send the message immediately. Can you check please. |
36599a8
to
2da4ff4
Compare
@amaninyumu1 If you need help with JMAP, please reach out to @Shadow243 as he set up a JMAP server for testing. |
45374ae
to
bdf9d5d
Compare
cf0574d
to
af1c185
Compare
@amaninyumu1 "This branch has conflicts that must be resolved" |
141f8d9
to
16293f5
Compare
16293f5
to
41c9b95
Compare
41c9b95
to
3fb7802
Compare
@amaninyumu1 This branch has conflicts that must be resolved |
3fb7802
to
e725bcc
Compare
Hello @marclaporte , @kroky I resolved the conflicts. please review |
modules/smtp/modules.php
Outdated
} | ||
} catch (Exception $e) { | ||
Hm_Debug::add(sprintf('ERRCannot send message: %s', $msg_headers['subject'])); | ||
if (send_scheduled_message($this, $imap, $msg, $server_id)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you retry sending in some other way, combine the above sending with the one in this method, so we don't repeat so much code.
modules/smtp/modules.php
Outdated
}} | ||
|
||
if (!hm_exists('reschedule_message_sending')) { | ||
function reschedule_message_sending($handler, $imap, $msg_id, $folder, $new_date, $server_id) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use modules.php only for handle or output modules. Move the functions to its own functions.php file to keep the existing structure in other modules (e.g. imap and core).
e725bcc
to
e3825fe
Compare
modules/imap/site.js
Outdated
class_name = 'imap_' + detail.server_id + '_' + msg_uid + '_' + detail.folder; | ||
if (hm_list_parent() === 'combined_inbox') { | ||
Hm_Message_List.prev_next_links('formatted_combined_inbox', class_name); | ||
} | ||
else if (hm_list_parent() === 'unread') { | ||
Hm_Message_List.prev_next_links('formatted_unread_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'flagged') { | ||
Hm_Message_List.prev_next_links('formatted_flagged_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'advanced_search') { | ||
Hm_Message_List.prev_next_links('formatted_advanced_search_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'search') { | ||
Hm_Message_List.prev_next_links('formatted_search_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'sent') { | ||
Hm_Message_List.prev_next_links('formatted_sent_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'junk') { | ||
Hm_Message_List.prev_next_links('formatted_junk_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'trash') { | ||
Hm_Message_List.prev_next_links('formatted_trash_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'drafts') { | ||
Hm_Message_List.prev_next_links('formatted_drafts_data', class_name); | ||
} | ||
else if (hm_list_parent() === 'tag') { | ||
Hm_Message_List.prev_next_links('formatted_tag_data', class_name); | ||
} | ||
else { | ||
var key = 'imap_' + Hm_Utils.get_url_page_number() + '_' + getListPathParam(); | ||
Hm_Message_List.prev_next_links(key, class_name); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This rebase isn't accurate. Master has passed over these changes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@amaninyumu1 I think you should be careful merging the changes from master - there are conflicts because of the upstream changes and these need to be merged correctly (keep the master ones and copy your code to the relevant places).
modules/imap/site.js
Outdated
if (!uid) { | ||
uid = getMessageUidParam(); | ||
} | ||
const callbackFn = (...args) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you avoid such changes in the future? it's really difficult to focus on what has actually changed.
The small piece of code added won't need an update since it is not executed on page loads. |
e3825fe
to
729dc43
Compare
b34ef74
to
bbf3b65
Compare
var sprintf = function(format, ...args) { | ||
let i = 0; | ||
return format.replace(/%([sd])/g, (match, type) => { | ||
let arg = args[i++]; | ||
switch (type) { | ||
case 's': return String(arg); | ||
case 'd': return Number(arg); | ||
default: return match; | ||
} | ||
}); | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this is necessary. If including variables in a string is all you need, you can use template literals.
modules/core/site.js
Outdated
@@ -2012,6 +2025,12 @@ $(function() { | |||
try { navigator.registerProtocolHandler("mailto", "?page=compose&compose_to=%s", "Cypht"); } catch(e) {} | |||
} | |||
|
|||
if (hm_page_name() == 'home') { | |||
$('.pw_update').on("click", function() { update_password($(this).data('id')); }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see the same statement already in route_handlers.js. So, you don't need to have it here anymore besides the fact that adding handlers based on the hm_page_name()
is already outdated in favor of the route handlers in each module.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jacob-js I made some modifications by removing the hm_page_name() in the core module js file. please review
modules/core/site.js
Outdated
$('.pw_update').on("click", function() { update_password($(this).data('id')); }); | ||
} | ||
if (hm_page_name() == 'servers') { | ||
$('.edit_server_connection').on('click', imap_smtp_edit_action); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You should do the same here. Check if the statement is not yet in the serversPageHandlers and move it to there.
if (hm_page_name() === 'message_list' && hm_list_path().substr(0, 4) === 'imap') { | ||
setup_imap_folder_page(); | ||
} | ||
else if (hm_page_name() === 'message_list' && hm_list_path() === 'combined_inbox') { | ||
setup_imap_message_list_content_page(); | ||
} | ||
else if (hm_page_name() === 'message' && hm_list_path().substr(0, 4) === 'imap') { | ||
imap_setup_message_view_page(); | ||
} | ||
else if (hm_page_name() === 'servers') { | ||
imap_setup_server_page(); | ||
} | ||
else if (hm_page_name() === 'info') { | ||
setTimeout(imap_status_update, 100); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All of this should not be here anymore.
if (hm_page_name() === 'message_list' || hm_page_name() === 'message') { | ||
imap_setup_snooze(); | ||
imap_setup_tags(); | ||
setup_nexter_date(function(e) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move this function call to the appropriate page handlers
@@ -427,3 +436,264 @@ function smtpSettingsPageHandler() { | |||
); | |||
}); | |||
} | |||
$(function () { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
master has passed over these changes. If you have additional lines of code, ensure they are in the right route handlers.
bbf3b65
to
5f0695c
Compare
Hello @jacob-js I don't understand very well please |
5f0695c
to
740bf92
Compare
I added more details in your inbox, I hope it becomes clear! |
740bf92
to
4698358
Compare
issue
issue