On 13 September 2016 at 09:01, Daniel Gruno <[email protected]> wrote:
> On 09/12/2016 12:48 PM, sebb wrote:
>> On 8 September 2016 at 07:03,  <[email protected]> wrote:
>>> Repository: incubator-ponymail
>>> Updated Branches:
>>>   refs/heads/coffee-and-cake d15294548 -> ae791c1a6
>>>
>>>
>>> add URL shortening
>>>
>>> this is a bit longer than the old format, and only shortens
>>> if the generator is medium or full, to avoid duplicates.
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/repo
>>> Commit: 
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/commit/ae791c1a
>>> Tree: 
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/tree/ae791c1a
>>> Diff: 
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/diff/ae791c1a
>>>
>>> Branch: refs/heads/coffee-and-cake
>>> Commit: ae791c1a619fc965cca72f1f62edb87b07a088b9
>>> Parents: d152945
>>> Author: Daniel Gruno <[email protected]>
>>> Authored: Thu Sep 8 08:02:50 2016 +0200
>>> Committer: Daniel Gruno <[email protected]>
>>> Committed: Thu Sep 8 08:02:50 2016 +0200
>>>
>>> ----------------------------------------------------------------------
>>>  site/api/thread.lua                         |  6 +++++
>>>  site/js/coffee/email_display_basic.coffee   |  3 ++-
>>>  site/js/coffee/listview_basic.coffee        |  3 ++-
>>>  site/js/coffee/listview_single_email.coffee |  4 ++-
>>>  site/js/coffee/misc.coffee                  | 31 ++++++++++++++++++++++++
>>>  site/js/coffee/scaffolding.coffee           |  2 +-
>>>  6 files changed, 45 insertions(+), 4 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/api/thread.lua
>>> ----------------------------------------------------------------------
>>> diff --git a/site/api/thread.lua b/site/api/thread.lua
>>> index aaaa9da..46e93c1 100644
>>> --- a/site/api/thread.lua
>>> +++ b/site/api/thread.lua
>>> @@ -126,6 +126,12 @@ function handle(r)
>>>          if #docs == 1 then
>>>              doc = docs[1]
>>>          end
>>> +        -- New shortening for medium/full generators
>>> +        if #docs == 0 and #eid == 24 then
>>> +            docs = elastic.find("mid:" .. r:escape(eid) .. "*", 1, "mbox")
>>> +
>>> +        end
>>> +        -- old shortening format, bleh
>>>          if #docs == 0 and #eid == 18 then
>>>              docs = elastic.find("mid:" .. r:escape(eid) .. "*", 1, "mbox")
>>>          end
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/email_display_basic.coffee
>>> ----------------------------------------------------------------------
>>> diff --git a/site/js/coffee/email_display_basic.coffee 
>>> b/site/js/coffee/email_display_basic.coffee
>>> index 708c373..73a60f6 100644
>>> --- a/site/js/coffee/email_display_basic.coffee
>>> +++ b/site/js/coffee/email_display_basic.coffee
>>> @@ -149,7 +149,8 @@ class BasicEmailDisplay
>>>          ### Action buttons ###
>>>
>>>          ### Permalink ###
>>> -        pbutton = new HTML('a', { class: "label_yellow", href: 
>>> "thread.html/#{json.mid}"}, "Permalink")
>>> +        shortID = shortenURL(json.mid)
>>> +        pbutton = new HTML('a', { class: "label_yellow", href: 
>>> "thread.html/#{shortID}"}, "Permalink")
>>>
>>>          ### Source ###
>>>          sbutton = new HTML('a', { class: "label_red", href: 
>>> "api/source.lua/#{json.mid}"}, "View source")
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/listview_basic.coffee
>>> ----------------------------------------------------------------------
>>> diff --git a/site/js/coffee/listview_basic.coffee 
>>> b/site/js/coffee/listview_basic.coffee
>>> index f9bfe47..bd97dbf 100644
>>> --- a/site/js/coffee/listview_basic.coffee
>>> +++ b/site/js/coffee/listview_basic.coffee
>>> @@ -234,8 +234,9 @@ class BasicListView
>>>
>>>
>>>              ### Subject, PLUS a bit of the body with a break before ###
>>> +            sid = shortenURL(thread.tid)
>>>              subject = new HTML('div', {}, [
>>> -                new HTML('a', { style: {fontWeight: readStyle}, href: 
>>> "thread.html/#{thread.tid}", onclick: 
>>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = 
>>> 'normal'; return false;"}, original.subject),
>>> +                new HTML('a', { style: {fontWeight: readStyle}, href: 
>>> "thread.html/#sid}", onclick: 
>>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = 
>>> 'normal'; return false;"}, original.subject),
>>>                  new HTML('br'),
>>>                  new HTML('span', {class: "listview_item_body"}, 
>>> thread.body)
>>>              ])
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/listview_single_email.coffee
>>> ----------------------------------------------------------------------
>>> diff --git a/site/js/coffee/listview_single_email.coffee 
>>> b/site/js/coffee/listview_single_email.coffee
>>> index 5aa3e07..b3baff8 100644
>>> --- a/site/js/coffee/listview_single_email.coffee
>>> +++ b/site/js/coffee/listview_single_email.coffee
>>> @@ -102,9 +102,11 @@ class SingleListView extends BasicListView
>>>              if hasRead(original.id)
>>>                  readStyle = "normal"
>>>
>>> +
>>>              ### Subject, PLUS a bit of the body with a break before ###
>>> +            sid = shortenURL(original.id)
>>>              subject = new HTML('div', {}, [
>>> -                new HTML('a', { style: {fontWeight: readStyle}, href: 
>>> "thread.html/#{original.id}", onclick: 
>>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = 
>>> 'normal'; return false;"}, original.subject),
>>> +                new HTML('a', { style: {fontWeight: readStyle}, href: 
>>> "thread.html/#{sid}", onclick: 
>>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = 
>>> 'normal'; return false;"}, original.subject),
>>>              ])
>>>
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/misc.coffee
>>> ----------------------------------------------------------------------
>>> diff --git a/site/js/coffee/misc.coffee b/site/js/coffee/misc.coffee
>>> index 131748a..2ac684c 100644
>>> --- a/site/js/coffee/misc.coffee
>>> +++ b/site/js/coffee/misc.coffee
>>> @@ -93,3 +93,34 @@ ponymail_url_regex = new RegExp(
>>>  ponymail_quote_regex = new RegExp(
>>>      "((?:\r?\n)((on .+ wrote:[\r\n]+)|(sent from my .+)|(>+[ 
>>> \t]*[^\r\n]*\r?\n[^\n]*\n*)+)+)+", "mi"
>>>  )
>>> +
>>> +shortBits = 3
>>> +
>>> +shortenURL = (mid) ->
>>> +    arr = mid.split("@")
>>
>> This function throws away the list id.
>>
>> However AFAIK the list id is essential to disambiguate messages which
>> are sent to multiple lists.
>
> When there are only 2 arr bits (iow one @), then the List ID is already
> hashed inside the initial first arr bit, and thus one does not need the
> list ID. This is a compromise and a change from the old shortening
> procedure where IDs were shortened regardless of which generator was
> used. The new shortener only shortens IF it can get away with it
> relatively painlessly, IOW if the list ID is part of the initial sha224
> blob. This merely needs some documentation, which I will get around to
> now that I'm not on vacation :)

In which case it's only necessary to drop the '@list' part.

There is no need to encode/decode as base36.
The net effect of using shortenURL and unshortenURL does just that.

The relevant change is the change to thread.lua which allows for
wild-card search if the mid length is 24.

> With regards,
> Daniel.
>
>>
>>> +    if arr.length == 2 and (pm_config and pm_config.shortenLinks)
>>> +        out = ""
>>> +        for i in [0..shortBits-1]
>>> +            a = arr[0].substr(i*8,8)
>>> +            num = parseInt(a, 16)
>>> +            res = num.toString(36)
>>> +            while res.length < 7
>>> +                res = '0' + res
>>> +            out += res
>>> +        return "PZ" + out
>>> +
>>> +    return mid
>>> +
>>> +unshortenURL = (mid) ->
>>> +    if mid.substr(0,2) == 'PZ'
>>> +        out = ""
>>> +        for i in [0..shortBits-1]
>>> +            num = parseInt(mid.substr(2+(i*7), 7), 36)
>>> +            res = num.toString(16)
>>> +            while res.length < 8
>>> +                res = '0' + res
>>> +            out += res
>>> +        return out
>>> +    else
>>> +        return mid
>>> +
>>
>> The functions need some documentation.
>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/scaffolding.coffee
>>> ----------------------------------------------------------------------
>>> diff --git a/site/js/coffee/scaffolding.coffee 
>>> b/site/js/coffee/scaffolding.coffee
>>> index ec58fee..379b463 100644
>>> --- a/site/js/coffee/scaffolding.coffee
>>> +++ b/site/js/coffee/scaffolding.coffee
>>> @@ -118,7 +118,7 @@ threadScaffolding = () ->
>>>
>>>      ### Make an API call to the preferences script, have it call back to 
>>> listView once done ###
>>>      mid = location.href.match(/thread\.html\/(.+)/)[1]
>>> -    r = new HTTPRequest("api/thread.lua?id=" + mid, {
>>> +    r = new HTTPRequest("api/thread.lua?id=" + unshortenURL(mid), {
>>>          callback: scaffoldingEmailCallback
>>>
>>>      })
>>>
>

Reply via email to