mirror of
https://gitlab.gnome.org/World/tootle
synced 2025-02-02 00:46:48 +01:00
split Utils module into Desktop and Html ;)
This commit is contained in:
parent
f12240a364
commit
1b8ef062e4
@ -19,12 +19,13 @@ executable(
|
||||
meson.project_name(),
|
||||
asresources,
|
||||
'src/Application.vala',
|
||||
'src/Desktop.vala',
|
||||
'src/Html.vala',
|
||||
'src/MainWindow.vala',
|
||||
'src/SettingsManager.vala',
|
||||
'src/AccountManager.vala',
|
||||
'src/ImageCache.vala',
|
||||
'src/NetManager.vala',
|
||||
'src/Utils.vala',
|
||||
'src/Notificator.vala',
|
||||
'src/InstanceAccount.vala',
|
||||
'src/API/Account.vala',
|
||||
|
@ -1,9 +1,10 @@
|
||||
src/Application.vala
|
||||
src/Desktop.vala
|
||||
src/Html.vala
|
||||
src/MainWindow.vala
|
||||
src/SettingsManager.vala
|
||||
src/AccountManager.vala
|
||||
src/NetManager.vala
|
||||
src/Utils.vala
|
||||
src/API/StatusVisibility.vala
|
||||
src/API/NotificationType.vala
|
||||
src/API/Attachment.vala
|
||||
|
@ -39,13 +39,13 @@ public class Tootle.Status {
|
||||
status.created_at = obj.get_string_member ("created_at");
|
||||
status.reblogs_count = obj.get_int_member ("reblogs_count");
|
||||
status.favourites_count = obj.get_int_member ("favourites_count");
|
||||
status.content = Utils.simplify_html ( obj.get_string_member ("content"));
|
||||
status.content = Html.simplify ( obj.get_string_member ("content"));
|
||||
status.sensitive = obj.get_boolean_member ("sensitive");
|
||||
status.visibility = StatusVisibility.from_string (obj.get_string_member ("visibility"));
|
||||
|
||||
var spoiler = obj.get_string_member ("spoiler_text");
|
||||
if (spoiler != "")
|
||||
status.spoiler_text = Utils.simplify_html (spoiler);
|
||||
status.spoiler_text = Html.simplify (spoiler);
|
||||
|
||||
if (obj.has_member ("reblogged"))
|
||||
status.reblogged = obj.get_boolean_member ("reblogged");
|
||||
|
@ -1,42 +1,10 @@
|
||||
public class Tootle.Utils{
|
||||
|
||||
public class Tootle.Desktop {
|
||||
// open a URI in the user's default browser
|
||||
public static void open_url (string url) {
|
||||
Gtk.show_uri (null, url, Gdk.CURRENT_TIME);
|
||||
}
|
||||
|
||||
public static string escape_html (string content) {
|
||||
var all_tags = new Regex("<(.|\n)*?>", RegexCompileFlags.CASELESS);
|
||||
return all_tags.replace(content, -1, 0, "");
|
||||
}
|
||||
|
||||
public static string simplify_html (string content) {
|
||||
var divided = content
|
||||
.replace("<br>", "\n")
|
||||
.replace("</br>", "")
|
||||
.replace("<br />", "\n")
|
||||
.replace("<p>", "")
|
||||
.replace("</p>", "\n\n");
|
||||
|
||||
var html_params = new Regex("(class|target|rel)=\"(.|\n)*?\"", RegexCompileFlags.CASELESS);
|
||||
var simplified = html_params.replace(divided, -1, 0, "");
|
||||
|
||||
while (simplified.has_suffix ("\n"))
|
||||
simplified = simplified.slice (0, simplified.last_index_of ("\n"));
|
||||
|
||||
return simplified;
|
||||
}
|
||||
|
||||
public static string escape_entities (string content) {
|
||||
return content
|
||||
.replace ("&", "&")
|
||||
.replace ("'", "'");
|
||||
}
|
||||
|
||||
public static string encode (string content) {
|
||||
var to_escape = ";&+";
|
||||
return Soup.URI.encode (content, to_escape);
|
||||
}
|
||||
|
||||
// copy a string to the clipboard
|
||||
public static void copy (string str) {
|
||||
var display = Tootle.window.get_display ();
|
||||
var clipboard = Gtk.Clipboard.get_for_display (display, Gdk.SELECTION_CLIPBOARD);
|
||||
@ -45,8 +13,9 @@ public class Tootle.Utils{
|
||||
.replace ("'", "'");
|
||||
clipboard.set_text (normalized, -1);
|
||||
}
|
||||
|
||||
public static void download (string url) {
|
||||
|
||||
// download a file from the web to a user's configured Downloads folder
|
||||
public static void download_file (string url) {
|
||||
debug ("Downloading file: %s", url);
|
||||
|
||||
var i = url.last_index_of ("/");
|
||||
@ -78,5 +47,4 @@ public class Tootle.Utils{
|
||||
});
|
||||
Tootle.network.queue (msg);
|
||||
}
|
||||
|
||||
}
|
@ -176,14 +176,14 @@ public class Tootle.PostDialog : Gtk.Dialog {
|
||||
}
|
||||
|
||||
public void publish_post () {
|
||||
var pars = "?status=%s&visibility=%s".printf (Utils.encode (text.buffer.text), visibility_opt.to_string ());
|
||||
var pars = "?status=%s&visibility=%s".printf (Html.uri_encode (text.buffer.text), visibility_opt.to_string ());
|
||||
pars += attachments.get_uri_array ();
|
||||
if (in_reply_to != null)
|
||||
pars += "&in_reply_to_id=%s".printf (in_reply_to.id.to_string ());
|
||||
|
||||
if (spoiler.active) {
|
||||
pars += "&sensitive=true";
|
||||
pars += "&spoiler_text=" + Utils.encode (spoiler_text.buffer.text);
|
||||
pars += "&spoiler_text=" + Html.uri_encode (spoiler_text.buffer.text);
|
||||
}
|
||||
|
||||
var url = "%s/api/v1/statuses%s".printf (Tootle.accounts.formal.instance, pars);
|
||||
|
34
src/Html.vala
Normal file
34
src/Html.vala
Normal file
@ -0,0 +1,34 @@
|
||||
public class Tootle.Html {
|
||||
public static string remove_tags (string content) {
|
||||
var all_tags = new Regex("<(.|\n)*?>", RegexCompileFlags.CASELESS);
|
||||
return all_tags.replace(content, -1, 0, "");
|
||||
}
|
||||
|
||||
public static string simplify (string content) {
|
||||
var divided = content
|
||||
.replace("<br>", "\n")
|
||||
.replace("</br>", "")
|
||||
.replace("<br />", "\n")
|
||||
.replace("<p>", "")
|
||||
.replace("</p>", "\n\n");
|
||||
|
||||
var html_params = new Regex("(class|target|rel)=\"(.|\n)*?\"", RegexCompileFlags.CASELESS);
|
||||
var simplified = html_params.replace(divided, -1, 0, "");
|
||||
|
||||
while (simplified.has_suffix ("\n"))
|
||||
simplified = simplified.slice (0, simplified.last_index_of ("\n"));
|
||||
|
||||
return simplified;
|
||||
}
|
||||
|
||||
public static string escape_entities (string content) {
|
||||
return content
|
||||
.replace ("&", "&")
|
||||
.replace ("'", "'");
|
||||
}
|
||||
|
||||
public static string uri_encode (string content) {
|
||||
var to_escape = ";&+";
|
||||
return Soup.URI.encode (content, to_escape);
|
||||
}
|
||||
}
|
@ -70,13 +70,13 @@ public class Tootle.InstanceAccount : GLib.Object {
|
||||
}
|
||||
|
||||
private void notification (ref Notification obj) {
|
||||
var title = Utils.escape_html (obj.type.get_desc (obj.account));
|
||||
var title = Html.remove_tags (obj.type.get_desc (obj.account));
|
||||
var notification = new GLib.Notification (title);
|
||||
if (obj.status != null) {
|
||||
var body = "";
|
||||
body += get_pretty_instance ();
|
||||
body += "\n";
|
||||
body += Utils.escape_html (obj.status.content);
|
||||
body += Html.remove_tags (obj.status.content);
|
||||
notification.set_body (body);
|
||||
}
|
||||
|
||||
|
@ -141,9 +141,9 @@ public class Tootle.AccountView : TimelineView {
|
||||
|
||||
|
||||
public void rebind (){
|
||||
display_name.label = "<b>%s</b>".printf (Utils.escape_entities(account.display_name));
|
||||
display_name.label = "<b>%s</b>".printf (Html.escape_entities(account.display_name));
|
||||
username.label = "@" + account.acct;
|
||||
note.label = Utils.simplify_html (account.note);
|
||||
note.label = Html.simplify (account.note);
|
||||
button_follow.visible = !account.is_self ();
|
||||
Tootle.network.load_avatar (account.avatar, avatar, 128);
|
||||
|
||||
|
@ -26,9 +26,9 @@ public class Tootle.AccountWidget : StatusWidget {
|
||||
});
|
||||
|
||||
var item_open_link = new Gtk.MenuItem.with_label (_("Open in Browser"));
|
||||
item_open_link.activate.connect (() => Utils.open_url (status.url));
|
||||
item_open_link.activate.connect (() => Desktop.open_url (status.url));
|
||||
var item_copy_link = new Gtk.MenuItem.with_label (_("Copy Link"));
|
||||
item_copy_link.activate.connect (() => Utils.copy (status.url));
|
||||
item_copy_link.activate.connect (() => Desktop.copy (status.url));
|
||||
menu.add (item_open_link);
|
||||
menu.add (item_copy_link);
|
||||
|
||||
|
@ -108,7 +108,7 @@ public class Tootle.AttachmentWidget : Gtk.EventBox {
|
||||
if (ev.button == 3)
|
||||
return open_menu (ev.button, ev.time);
|
||||
|
||||
Tootle.Utils.open_url (attachment.url);
|
||||
Desktop.open_url (attachment.url);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -120,11 +120,11 @@ public class Tootle.AttachmentWidget : Gtk.EventBox {
|
||||
});
|
||||
|
||||
var item_open_link = new Gtk.MenuItem.with_label (_("Open in Browser"));
|
||||
item_open_link.activate.connect (() => Utils.open_url (attachment.url));
|
||||
item_open_link.activate.connect (() => Desktop.open_url (attachment.url));
|
||||
var item_copy_link = new Gtk.MenuItem.with_label (_("Copy Link"));
|
||||
item_copy_link.activate.connect (() => Utils.copy (attachment.url));
|
||||
item_copy_link.activate.connect (() => Desktop.copy (attachment.url));
|
||||
var item_download = new Gtk.MenuItem.with_label (_("Download"));
|
||||
item_download.activate.connect (() => Utils.download (attachment.url));
|
||||
item_download.activate.connect (() => Desktop.download_file (attachment.url));
|
||||
menu.add (item_open_link);
|
||||
if (attachment.type != "unknown")
|
||||
menu.add (item_download);
|
||||
|
@ -49,7 +49,7 @@ public class Tootle.RichLabel : Gtk.Label {
|
||||
return true;
|
||||
}
|
||||
|
||||
Tootle.Utils.open_url (url);
|
||||
Desktop.open_url (url);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -200,7 +200,7 @@ public class Tootle.StatusWidget : Gtk.EventBox {
|
||||
public void rebind () {
|
||||
var formal = status.get_formal ();
|
||||
|
||||
title_user.label = "<b>%s</b>".printf (Utils.escape_entities (formal.account.display_name));
|
||||
title_user.label = "<b>%s</b>".printf (Html.escape_entities (formal.account.display_name));
|
||||
title_acct.label = "@" + formal.account.acct;
|
||||
content_label.label = formal.content;
|
||||
content_label.mentions = formal.mentions;
|
||||
@ -272,13 +272,13 @@ public class Tootle.StatusWidget : Gtk.EventBox {
|
||||
var item_delete = new Gtk.MenuItem.with_label (_("Delete"));
|
||||
item_delete.activate.connect (() => status.poof ());
|
||||
var item_open_link = new Gtk.MenuItem.with_label (_("Open in Browser"));
|
||||
item_open_link.activate.connect (() => Utils.open_url (status.url));
|
||||
item_open_link.activate.connect (() => Desktop.open_url (status.url));
|
||||
var item_copy_link = new Gtk.MenuItem.with_label (_("Copy Link"));
|
||||
item_copy_link.activate.connect (() => Utils.copy (status.url));
|
||||
item_copy_link.activate.connect (() => Desktop.copy (status.url));
|
||||
var item_copy = new Gtk.MenuItem.with_label (_("Copy Text"));
|
||||
item_copy.activate.connect (() => {
|
||||
var sanitized = Utils.escape_html (status.content);
|
||||
Utils.copy (sanitized);
|
||||
var sanitized = Html.remove_tags (status.content);
|
||||
Desktop.copy (sanitized);
|
||||
});
|
||||
|
||||
if (this.status.is_owned ()) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user