рд╣рдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдирдП рдбрд╛рдЙрдирд▓реЛрдб рдкреИрдирд▓ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░
рдбрд╛рдЙрдирд▓реЛрдб рдкреИрдирд▓ Tweaker рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХреБрдЫ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдмрд╕реЗ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдирд╡рд╛рдЪрд╛рд░, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рд╕реВрдЪреА рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ "рдкреБрд╕реНрддрдХрд╛рд▓рдп" рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ) - рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рд╕рдордп рд╕реБрдзрд╛рд░ рдХреЛ
рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрд╛ред
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдпрд╣
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдПрдХ "рдХреЙрдореНрдкреИрдХреНрдЯ" рд╡рд┐рдХрд▓реНрдк рд╣реИ, "рдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ" рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рдмрдЪрд╛рдПрдЧрд╛):
рд▓реЗрдХрд┐рди
рдЬреИрд╕рд╛ рдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рдерд╛ ред
рдХреБрдЫ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рднреА рд╣реЛрдВрдЧреЗ (рдЕрдиреНрдпрдерд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛рдВ?)ред
рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдХреЗ рдмрдЬрд╛рдп, рдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд▓рд╛рдЗрд╡ рдХреЙрдореНрдкреИрдХреНрдЯ!
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдбрд╛рдЙрдирд▓реЛрдб рдмрд╛рд░ рдХреЗ рд╕рднреА рддрддреНрд╡ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд╛рд▓ рд╣реИрдВ! рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдкрд░реНрд╢ рдореЙрдирд┐рдЯрд░ рдирд╣реАрдВ рд╣реИ - рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реИрд╕реЗ рднреА рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВред рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдХреЗрд╡рд▓ рддреАрди рдмрд┐рдВрджреБ рд╣реИрдВ, рдЕрдзрд┐рдХ рдирд╣реАрдВред рдпрд╣реА рд╣реИ, рдЬрдЧрд╣ рдЦрд░реНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрд╛ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рджреГрд╢реНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ userChrome.css рдпрд╛
рд╕реНрдЯрд╛рдЗрд▓рд┐рд╢ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛рддреЗ
рд╣реИрдВ ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ
(?) рдбрд╛рдЙрдирд▓реЛрдб рдЧрддрд┐ рдХреЛ рдЕрдХреЗрд▓реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдпрд╣ рдЯреВрд▓рдЯрд┐рдк рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЫрджреНрдо-рд╡рд░реНрдЧреЛрдВ рдХреЗ
рдмрд╛рдж :: рдкрд╣рд▓реЗ рдФрд░
рдмрд╛рдж рдореЗрдВ рд╣рдореЗрд╢рд╛ XUL рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпреЗ
рдЧреБрдордирд╛рдо рдиреЛрдбреНрд╕ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз
рд╣реИрдВ ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
.downloadDetails[tooltiptext]::after { content: attr(tooltiptext) !important; }
рджрд░реНрд╢рдиреАрдп рдбрд╛рдЙрдирд▓реЛрдб рдмрдврд╝рд╛рдПрдБ
рдирддреАрдЬрддрди, рдкреИрдирд▓ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб
рдХреНрд░реЛрдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдкрд╛рдпрд╛ рдЧрдпрд╛
: //browser/content/downloads/downloads.js :
const DownloadsView = {
рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рд╡реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░, рдпрд╛рдиреА рдбрд╛рдЙрдирд▓реЛрдб рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдП рдЧрдП рдереЗред
рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рдХреА рдЦреЛрдЬ рдиреЗ
рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛
: //app/modules/DownloadsCommon.jsm рдлрд╝рд╛рдЗрд▓ рдФрд░
рдбрд╛рдЙрдирд▓реЛрдбрдХреИрдореЛрди .getSummary () рдлрд╝рдВрдХреНрд╢рди:
getSummary: function DC_getSummary(aWindow, aNumToExclude) { if (PrivateBrowsingUtils.isWindowPrivate(aWindow)) { if (this._privateSummary) { return this._privateSummary; } return this._privateSummary = new DownloadsSummaryData(true, aNumToExclude); } else { if (this._summary) { return this._summary; } return this._summary = new DownloadsSummaryData(false, aNumToExclude); } },
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ
function DownloadsSummaryData(aIsPrivate, aNumToExclude) { this._numToExclude = aNumToExclude;
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдмрд╕ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВ:
var itemCountLimit = 5;
рдпрд╣реА рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдП рдЧрдП рдирд┐рдпрдорд┐рдд рдФрд░ рдирд┐рдЬреА рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХреЗ
рдбрд╛рдЙрдирд▓реЛрдбреНрд╕ рдХреА рд╕реАрдорд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбрд╛рдЙрдирд▓реЛрдб рд╕реВрдЪреА рд╣реА рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧреАред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдореБрдЦ рд╢реБрд░реБрдЖрдд рдереА:
рдирд┐рдЬреА рдЯреИрдм рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди (рдЬреЛ, рд╕рдВрдпреЛрдЧрд╡рд╢, рдПрдХ
рд▓реЗрдЦ рднреА рдерд╛), рдареАрдХ рдЙрд╕реА рдкреНрд░рд╢реНрди рдХрд╛ рдЙрджрдп рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ рдЯреИрдм рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп рдирд┐рдпрдорд┐рдд рд╕реЗ рдирд┐рдЬреА рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕реВрдЪреА рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ (рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдереЗред рд╕рдлрд▓рддрд╛ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рдХреЗ рдкреНрд░рдпреЛрдЧ)ред
рд▓реЗрдХрд┐рди, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрднреА рднреА рдХреБрдЫ рддрд░рдХреАрдмреЗрдВ рдереАрдВ: рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 28 рдиреЗ рдбрд╛рдЙрдирд▓реЛрдб рдмрд╛рд░ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ (рдпрд╣ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдбрд╛рдЙрдирд▓реЛрдб рдЗрдВрдЬрди рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛)ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд▓рд┐рдЦрдирд╛ рдерд╛ - рдЕрдЪреНрдЫрд╛, рдпрд╣ рд╕рд░рд▓ рд╣реИред
рдкрд░рд┐рдгрд╛рдо рдКрдкрд░ рджрд┐рдП рдЧрдП
рд▓рд┐рдВрдХ рдкрд░ рдпрд╛
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрдб рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдмрд╕ рдХрд░рддреЗ рд╣реИрдВ
DownloadsView._viewItems = {}; DownloadsView._dataItems = [];
, рддрдм рдПрдХ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп рдХрд╛рдо рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:
DownloadsView._viewItems = new window.Object(); DownloadsView._dataItems = new window.Array();
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
рд╡рд┐рдВрдбреЛ рд╡рд╣ рд╡рд┐рдВрдбреЛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ
рдбрд╛рдЙрдирд▓реЛрдб рджреГрд╢реНрдп рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд
рдбрд╛рдЙрдирд▓реЛрдбреНрд╕ рд╡реНрдпреВ === рд╡рд┐рдВрдбреЛред
рдбрд╛рдЙрдирд▓реЛрдб )ред
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рд╕рд╣реЗрдЬреЗрдВ
рдпрд╣ рд╕рдмрд╕реЗ рдХрдард┐рди рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдЗрддрдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 26 рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдгред рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ
рдЗрд╕реА рдореБрджреНрджреЗ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред
рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рд╕рдлрд╛рдИ
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 25 рдФрд░ рдкреБрд░рд╛рдиреЗ рдореЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдЬрдмрд░рди рд╕рд╛рдлрд╝ рдХрд░ рджрд┐рдП рдЧрдП рдереЗ (
рд╕рдВрд╕рд╛рдзрди: //app/compenders/DownloadsStartup.ss ):
case "browser-lastwindow-close-granted":
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╕рдордп,
Services.downloads.cleanUp () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
(рд╡реИрд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдирдП рдЗрдВрдЬрди рдХреЗ рдирд┐рд╢рд╛рди рд╣реИрдВ -
Browser.download.useJSTransfer рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪред)
рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ
Services.downloads рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣реИ
Components.classes["@mozilla.org/download-manager;1"] .getService(Components.interfaces.nsIDownloadManager);
(
рд╕рдВрд╕рд╛рдзрди рджреЗрдЦреЗрдВ
: //gre/modules/Services.jsm ), рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Object.defineProperty(Services.downloads, "cleanUp", { value: function() {}, enumerable: true, configurable: true, writable: true });
рдпрджрд┐ рд╕рд░рд▓реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
var downloads = Services.downloads; var downloadsWrapper = { __proto__: downloads, cleanUp: function() { ... } }; this.setProperty(Services, "downloads", downloadsWrapper);
рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реА рдирдХрд▓реА рд╡рд╕реНрддреБ рдореЗрдВ
рдХреНрд▓реАрдирдЕрдк рдкреНрд░реЙрдкрд░реНрдЯреА
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди
Services.downloads рд╕реЗ рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред
рдЦреИрд░, рдлрд░реНрдЬреА рдлрд╝рдВрдХреНрд╢рди
Services.downloads.cleanUp () рд╕реЗ, рдЖрдк рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд╣реА
рдбрд╛рдЙрдирд▓реЛрдбрд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╣реИ ред рддреЛ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд╣рд╛рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк
рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рд╕рдорд╛рди рдЖрд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рддреЛ рдЪреЗрдХ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдирдП рд╕рдВрд╕реНрдХрд░рдг, рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЪрдпрдирд╛рддреНрдордХ рдмрдЪрдд рдФрд░ рдХрдИ рд╣реИрдХ
рдлрд┐рд░, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 26 рдореЗрдВ, рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЗрдВрдЬрди рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рдбрд╛рдЙрдирд▓реЛрдб (рдЕрд░реНрдерд╛рддреН, рд╡реЗ рдбрд╛рдЙрдирд▓реЛрдб рдкреИрдирд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ) рдХреЛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ
рдбрд╛рдЙрдирд▓реЛрдб s.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдлрд╛рдИ рдХреЗ рдмрдЬрд╛рдп, рдмрдЪрдд рдХрд░рддреЗ рд╕рдордп рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рд╕рдВрд╕рд╛рдзрди: //gre/modules/DownloadStore.jsm this.DownloadStore.prototype = { ... onsaveitem: () => true, ... save: function DS_save() { return Task.spawn(function task_DS_save() { let downloads = yield this.list.getAll(); ... for (let download of downloads) { try { if (!this.onsaveitem(download)) { continue; }
рдлрд┐рд░
рд╕рдВрд╕рд╛рдзрди рдореЗрдВ: //gre/modules/DownloadIntegration.jsm рдСрдирд╕реЗрд╡рд┐рдЯрдо рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИ:
this.DownloadIntegration = { ... initializePublicDownloadList: function(aList) { return Task.spawn(function task_DI_initializePublicDownloadList() { ... this._store.onsaveitem = this.shouldPersistDownload.bind(this); ... shouldPersistDownload: function (aDownload) {
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдлрд╝рдВрдХреНрд╢рди
DownloadStore.prototyp.onsaveitem () рд╣реИ , рдЬреЛ рд╣рдореЗрд╢рд╛ рдмрдЪрдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░
рдирдП DownloadStore () рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
(рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдФрд░ рд╕рддреНрдп рдирд╣реАрдВ рд╣реИрдВред)
рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
DownloadIntegration.jsm рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╢рд░реНрдд рдЯрд┐рдкреНрдкрдгреА рд╣реИ:
shouldPersistDownload: function (aDownload) {
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рд╢рд░реНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЙрдкрдорд╛ рдХреЗ рд╕рд╛рде
DownloadIntegration.shouldPersistDownload () рдлрд╝рдВрдХреНрд╢рди (рдФрд░
DownloadIntegration._store.onsaveitem () рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ
) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдореВрд╣ рдкреЙрдк-рдЕрдк рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рд╕рд╣реЗрдЬреЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ , рдПрдХ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж, рд╕рднреА рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рдПрдХ рд╢реВрдиреНрдп рдЖрдХрд╛рд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░рд╛рд░рдВрдн рд╕рдордп рджрд┐рдЦрд╛рдПрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбрд╛рдЙрдирд▓реЛрдбрд╕реЗрдЬрди рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ)ред
рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рдЕрдорд╛рдиреНрдп рддрд┐рдерд┐
: //app/modules/DownloadsCommon.jsm :
function DownloadsDataItem(aDownload) { this._download = aDownload; ... this.endTime = Date.now(); this.updateFromDownload(); }
рддрдм рдпрд╣ рд╕рдордп рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдЬрдм рдХреЙрд▓рдбрд╛рдЙрдЯрдбреИрдордЯрдо.рдкреНрд░реЛрдХреНрдЯреЛрдЯрд╛рдЗрдк.рдЕрдкрдбреЗрдЯреЗрдЯрдлреНрд░реЙрдордЬреЗрдбреЛрдХрд╛рдЙрдЯ
() (рдлрд╛рдпрд░рдлреЙрдХреНрд╕ реирем-реи change) рдФрд░ рдбрд╛реЕрдбрдЯреИрдЯрдо.рдкреНрд░реЛрдЯреЗрдХреНрдЯ.рдЙрдкрдбреЗрдЯрдлреНрд░реЗрдордбреЙрдХ
() (рдлрд╛рдпрд░рдлреЙрдХреНрд╕ реи
)+) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░
рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрд╛рджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рджреВрд╕рд░реЗ , MOZ_B2G рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╢рд░реНрдд рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рдХрднреА рднреА рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдореБрдЭреЗ MOZ_B2G рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рдЙрдкрдпреБрдХреНрдд рд╕рд╢рд░реНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓реАрдВ (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд╣рд╛рдВ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ -
рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ ред
рдлрд┐рд░ рдпрд╣рд╛рдВ
рд╕реЗ рддреАрд╕рд░рд╛ рдПрдХ : рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рд▓реЛрдб рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА - рдПрдХ рд╕реНрдЯреИрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ (рддреНрд░реБрдЯрд┐ "
рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ ") рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 35 рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡рд╛рджреЛрдВ (
рд╡рд╛рджреЛрдВ ) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░
DownloadStore.prototype.load () (
рд╕рдВрд╕рд╛рдзрди: //gre/modules/DownloadStore.jsm ) рдореЗрдВ рдереЛрдбрд╝рд╛ рдЯреНрд╡реАрдХ рдФрд░ рдмрджрд▓реЗрдВ
load: function DS_load() { return Task.spawn(function task_DS_load() { let bytes; try { bytes = yield OS.File.read(this.path); } catch (ex if ex instanceof OS.File.Error && ex.becauseNoSuchFile) {
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐
let {Download} = Components.utils.import("resource://gre/modules/DownloadCore.jsm", {}); let download = Download.fromSerializable(downloadData);
, рддрдм рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред
рдЪреМрдерд╛ , рдХрд╣реАрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рди рд╣реИрдВ
(?) , рдЗрд╕рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдбреЗрдЯрд╛
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реЗ рд╕рд╣реЗрдЬреЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ), рдЗрд╕рд▓рд┐рдП рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд░рд╣реЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдерд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд░реНрддрдорд╛рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг
рдЬреЛрдбрд╝реЗрдВ ред
рдкрд╛рдВрдЪрд╡рд╛рдВ , рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рдбрд╛рдЙрдирд▓реЛрдб рдкреИрдирд▓ рдореЗрдВ рдХреБрдЫ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рдирд┐рд▓рдВрдмрд┐рдд рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рд╣реИ) рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╣реЛрдЧреАред
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд╛рдЙрдирд▓реЛрдбрдбрд╛рдЯрд╛ рдЗрдЯреЗрдо.рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк.рдЕрдкрдбреЗрдЯ рдлрд╝реЙрд░рдбреЛрдо
рдбрд╛рдЙрдирд▓реЛрдб () рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣
рдЖрд╕рд╛рдиреА рд╕реЗ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ ред
рдЦреИрд░, рдбрд╛рдЙрдирд▓реЛрдбрдЬрд╕рди рд░реАрдбрд┐рдВрдЧ рдХреЛрдб, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
рдлрд┐рд░ рд╕реЗ
рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред рд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдХреБрдЫ рднреА рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ - рдХрд┐рд╕реА рднреА рддрдХрдиреАрдХ рдХреЛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЗрд╡рд▓ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдФрд░ рдмрд┐рдирд╛ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдлреИрд╢рдиреЗрдмрд▓ рдФрд░ рдЖрдзреБрдирд┐рдХ рд╣реИ)ред
рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬреАрдм рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдпрджрд┐ рддрд┐рдерд┐рдпрд╛рдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рдЫрдВрдЯрд╛рдИ рдЙрд▓реНрдЯрд╛ рд╣реЛ рдЬрд╛рдПрдЧреА (рдирдП рд╡рд╛рд▓реЗ рдиреАрдЪреЗ рдореЗрдВ рд╣реЛрдВрдЧреЗ, рд╢реАрд░реНрд╖ рдкрд░ рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдкреИрдирд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд▓рдВрдмрд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрджреЗрд╢ рд╕рд╣реА рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВ ... рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдирдП рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдкрдбреЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ред рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕реВрдЪреА рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЬреЛрдбрд╝ рднреА рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ред рдпрд╣рд╛рдБ рдореБрдЭреЗ
рдХреБрдЫ рдФрд░
рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдкрдбрд╝реЗред
рдпрд╣рд╛рдВ
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ (Shift + F5) рдиреЗ рдЕрдореВрд▓реНрдп рдорджрдж рдкреНрд░рджрд╛рди рдХреА, рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдлреНрд░реАрдЬ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ - рддрд░реНрдХ рд╡рд╣рд╛рдВ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ (рдФрд░
рдХреЙрд▓ рд╕реНрдЯреИрдХ рднреАрд╖рдг рд╣реИ)ред
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкрдврд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдо рд╕реЗ рдХрдо рд╕реВрдЪреА рд╕рдлрд╛рдИ рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдВ рднреА рдпрд╣ рдПрдХ рдвреЗрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕реВрдЪреА рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИред рдпрд╣ рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ: рдЕрдЧрд░ рдХреБрдЫ рдмрдЪрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдирд┐рдЬреА рдореЛрдб рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ (рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╕рдлрд╛рдИ рдЖрдЗрдЯрдо) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЬреЛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЕрдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрдо рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ - рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЙрдирдХреА рд╡рд╕реВрд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдЧреА, рднрд▓реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛ (рдореИрдВрдиреЗ 150 рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА)ред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЖрд╡рдВрдЯрд┐рдд OS.File API рдХреЗ рдХрд╛рд░рдг рд╣реИ (рдФрд░ рд░реБрдХреЗ рд╣реБрдП рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдлреЙрд░реНрдо рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВ
рддреНрд░реБрдЯрд┐: рдСрдкрд░реЗрд╢рди рдЦреЛрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЬреАрдд рддреНрд░реБрдЯрд┐ 2 (рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
)
рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓: рд╕рдВрд╕рд╛рдзрди: //gre/modules/commonjs/sdk/core/promise.js
рдкрдВрдХреНрддрд┐: 133
(рдпрд╣ рд╣реИ рдЕрдЧрд░ рдЖрдк рдбрд╛рдЙрдирд▓реЛрдб рджреНрд╡рд╛рд░рд╛ рд░реЛрдХрд╛ рдЧрдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╣рдЯрд╛ рджреЗрдВ)
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдиреЗ рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдбрд╛рдЙрдирд▓реЛрдб рдкреИрдирд▓ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреБрдЫ рдЕрдиреНрдп рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░, рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбрд╛рдЙрдирд▓реЛрдб рд╣реИрдВ, рддреЛ рдпрд╣ рдлреНрд░реАрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
PS рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЕрднреА рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, "рдХрддрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐: 17 рдХрд╛ 4" рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ (рдФрд░ рдкрд╛рда, рд╕рдВрдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ - рдФрд░ рдпрд╣ рдПрдХ рд╕рдкреНрддрд╛рд╣ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ - рдпрд╣ рдХреЗрд╡рд▓ рдЕрдЪреНрдЫрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╣рд░ рдЪреАрдЬ рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИред
PPS рдореИрдВрдиреЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддрд╛рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдирдП рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рд░рд╛рдп рдкрд╛рдардХ рдкрд░ рди рдереЛрдкреЗрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕рдлрд▓ рд░рд╣рд╛, рдФрд░ рд╕рднреА рдХреЛ рдЕрдкрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рджреЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдореВрд▓ рд░реВрдк рдореЗрдВ, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдЖрддреА рд╣реИред