Author: toad
Date: 2007-06-09 17:36:34 +0000 (Sat, 09 Jun 2007)
New Revision: 13501
Modified:
trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Notify user when f2f transfers succeed or fail
Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2007-06-09
17:23:49 UTC (rev 13500)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2007-06-09
17:36:34 UTC (rev 13501)
@@ -325,15 +325,19 @@
FetchException.shortError.7=Too many metadata levels
FetchException.shortError.8=Too many archive restarts
FetchException.shortError.9=Too much recursion
-FileOfferUserAlert.title=Direct file transfer
-FileOfferUserAlert.offeredFileHeader=The node ${name} has offered a file:
-FileOfferUserAlert.fileLabel=File:
-FileOfferUserAlert.senderLabel=Sender:
-FileOfferUserAlert.commentLabel=Comment:
-FileOfferUserAlert.mimeLabel=MIME Type:
-FileOfferUserAlert.sizeLabel=Size:
-FileOfferUserAlert.acceptTransferButton=Accept Transfer
-FileOfferUserAlert.rejectTransferButton=Reject Transfer
+FileOffer.askUserTitle=Direct file transfer
+FileOffer.offeredFileHeader=The node ${name} has offered a file:
+FileOffer.fileLabel=File:
+FileOffer.senderLabel=Sender:
+FileOffer.commentLabel=Comment:
+FileOffer.mimeLabel=MIME Type:
+FileOffer.sizeLabel=Size:
+FileOffer.acceptTransferButton=Accept Transfer
+FileOffer.rejectTransferButton=Reject Transfer
+FileOffer.failedFileHeader=The transfer of the file ${filename} from ${node}
has failed.
+FileOffer.failedReceiveTitle=Failed to receive file
+FileOffer.succeededReceiveTitle=Successfully received file
+FileOffer.succeededReceiveHeader=The transfer of the file ${filename} from
${node} was a success.
GIFFilter.invalidHeader=The file does not contain a valid GIF header.
GIFFilter.invalidHeaderTitle=Invalid header
GIFFilter.notGif=The file you tried to fetch is not a GIF. It might be some
other file format, and your browser may do something dangerous with it,
therefore we have blocked it.
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-06-09 17:23:49 UTC
(rev 13500)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-06-09 17:36:34 UTC
(rev 13501)
@@ -3292,6 +3292,9 @@
String err = "Failed to
send "+uid+" for "+FileOffer.this;
Logger.error(this, err);
System.err.println(err);
+ onReceiveFailure();
+ } else {
+ onReceiveSuccess();
}
} catch (Throwable t) {
Logger.error(this, "Caught
"+t+" sending file", t);
@@ -3299,6 +3302,7 @@
if(logMINOR)
Logger.minor(this, "Sent file");
}
+
}, "Sender for bulk transfer "+uid+":"+filename);
t.setDaemon(true);
t.start();
@@ -3315,6 +3319,203 @@
prb.abort(RetrievalException.CANCELLED_BY_RECEIVER,
"Cancelled by receiver");
}
+ protected void onReceiveFailure() {
+ UserAlert alert = new UserAlert() {
+ public String dismissButtonText() {
+ return L10n.getString("UserAlert.hide");
+ }
+ public HTMLNode getHTMLText() {
+ HTMLNode div = new HTMLNode("div");
+
+ // FIXME localise!!!
+
+ div.addChild("p",
l10n("failedFileHeader", new String[] { "filename", "node" },
+ new String[] {
filename, getName() }));
+
+ // Descriptive table
+
+ HTMLNode table = div.addChild("table",
"border", "0");
+ HTMLNode row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("fileLabel"));
+ row.addChild("td").addChild("#",
filename);
+ row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("sizeLabel"));
+ row.addChild("td").addChild("#",
SizeUtil.formatSize(size));
+ row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("mimeLabel"));
+ row.addChild("td").addChild("#",
mimeType);
+ row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("senderLabel"));
+ row.addChild("td").addChild("#",
getName());
+ row = table.addChild("tr");
+ if(comment != null && comment.length()
> 0) {
+
row.addChild("td").addChild("#", l10n("commentLabel"));
+
row.addChild("td").addChild("#", comment);
+ }
+
+ return div;
+ }
+
+ public short getPriorityClass() {
+ return UserAlert.MINOR;
+ }
+
+ public String getText() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(l10n("failedFileHeader", new
String[] { "filename", "node" },
+ new String[] {
filename, getName() }));
+ sb.append('\n');
+ sb.append(l10n("fileLabel"));
+ sb.append(' ');
+ sb.append(filename);
+ sb.append('\n');
+ sb.append(l10n("sizeLabel"));
+ sb.append(' ');
+ sb.append(SizeUtil.formatSize(size));
+ sb.append('\n');
+ sb.append(l10n("mimeLabel"));
+ sb.append(' ');
+ sb.append(mimeType);
+ sb.append('\n');
+ sb.append(l10n("senderLabel"));
+ sb.append(' ');
+ sb.append(getName());
+ sb.append('\n');
+ if(comment != null && comment.length()
> 0) {
+ sb.append(l10n("commentLabel"));
+ sb.append(' ');
+ sb.append(comment);
+ }
+ return sb.toString();
+ }
+
+ public String getTitle() {
+ return l10n("failedReceiveTitle");
+ }
+
+ public boolean isValid() {
+ return true;
+ }
+
+ public void isValid(boolean validity) {
+ // Ignore
+ }
+
+ public void onDismiss() {
+ // Ignore
+ }
+
+ public boolean shouldUnregisterOnDismiss() {
+ return true;
+ }
+
+ public boolean userCanDismiss() {
+ return true;
+ }
+
+ };
+ node.clientCore.alerts.register(alert);
+ }
+
+ private void onReceiveSuccess() {
+ UserAlert alert = new UserAlert() {
+ public String dismissButtonText() {
+ return L10n.getString("UserAlert.hide");
+ }
+ public HTMLNode getHTMLText() {
+ HTMLNode div = new HTMLNode("div");
+
+ // FIXME localise!!!
+
+ div.addChild("p",
l10n("succeededFileHeader", new String[] { "filename", "node" },
+ new String[] {
filename, getName() }));
+
+ // Descriptive table
+
+ HTMLNode table = div.addChild("table",
"border", "0");
+ HTMLNode row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("fileLabel"));
+ row.addChild("td").addChild("#",
filename);
+ row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("sizeLabel"));
+ row.addChild("td").addChild("#",
SizeUtil.formatSize(size));
+ row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("mimeLabel"));
+ row.addChild("td").addChild("#",
mimeType);
+ row = table.addChild("tr");
+ row.addChild("td").addChild("#",
l10n("senderLabel"));
+ row.addChild("td").addChild("#",
getName());
+ row = table.addChild("tr");
+ if(comment != null && comment.length()
> 0) {
+
row.addChild("td").addChild("#", l10n("commentLabel"));
+
row.addChild("td").addChild("#", comment);
+ }
+
+ return div;
+ }
+
+ public short getPriorityClass() {
+ return UserAlert.MINOR;
+ }
+
+ public String getText() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(l10n("succeededFileHeader",
new String[] { "filename", "node" },
+ new String[] {
filename, getName() }));
+ sb.append('\n');
+ sb.append(l10n("fileLabel"));
+ sb.append(' ');
+ sb.append(filename);
+ sb.append('\n');
+ sb.append(l10n("sizeLabel"));
+ sb.append(' ');
+ sb.append(SizeUtil.formatSize(size));
+ sb.append('\n');
+ sb.append(l10n("mimeLabel"));
+ sb.append(' ');
+ sb.append(mimeType);
+ sb.append('\n');
+ sb.append(l10n("senderLabel"));
+ sb.append(' ');
+ sb.append(getName());
+ sb.append('\n');
+ if(comment != null && comment.length()
> 0) {
+ sb.append(l10n("commentLabel"));
+ sb.append(' ');
+ sb.append(comment);
+ }
+ return sb.toString();
+ }
+
+ public String getTitle() {
+ return l10n("succeededReceiveTitle");
+ }
+
+ public boolean isValid() {
+ return true;
+ }
+
+ public void isValid(boolean validity) {
+ // Ignore
+ }
+
+ public void onDismiss() {
+ // Ignore
+ }
+
+ public boolean shouldUnregisterOnDismiss() {
+ return true;
+ }
+
+ public boolean userCanDismiss() {
+ return true;
+ }
+
+ };
+ node.clientCore.alerts.register(alert);
+ }
+
+
/** Ask the user whether (s)he wants to download a file from a
direct peer */
public UserAlert askUserUserAlert() {
return new UserAlert() {
@@ -3400,15 +3601,9 @@
return sb.toString();
}
public String getTitle() {
- return l10n("title");
+ return l10n("askUserTitle");
}
- private String l10n(String key) {
- return
L10n.getString("FileOfferUserAlert."+key);
- }
- private String l10n(String key, String pattern,
String value) {
- return
L10n.getString("FileOfferUserAlert."+key, pattern, value);
- }
public boolean isValid() {
if(acceptedOrRejected) {
node.clientCore.alerts.unregister(this);
@@ -3432,6 +3627,15 @@
};
}
+ private String l10n(String key) {
+ return L10n.getString("FileOffer."+key);
+ }
+ private String l10n(String key, String pattern, String value) {
+ return L10n.getString("FileOffer."+key, pattern, value);
+ }
+ private String l10n(String key, String[] pattern, String[]
value) {
+ return L10n.getString("FileOffer."+key, pattern, value);
+ }
}
public int sendTextMessage(String message) {