diff --git a/.gitmodules b/.gitmodules index 3a7f6edb..32042876 100644 --- a/.gitmodules +++ b/.gitmodules @@ -17,3 +17,6 @@ path = lib/websocketpp url = https://github.com/zaphoyd/websocketpp.git branch = develop +[submodule "lib/qBreakpad"] + path = lib/qBreakpad + url = https://github.com/jiakuan/qBreakpad.git diff --git a/BUILDING_ON_WINDOWS.md b/BUILDING_ON_WINDOWS.md index aa1b7746..aaa8743c 100644 --- a/BUILDING_ON_WINDOWS.md +++ b/BUILDING_ON_WINDOWS.md @@ -32,6 +32,11 @@ 2. Under Tools: - Select Qt Creator, and Qt Creator CDB Debugger Support +### Compile with Breakpad support (Optional) +1. Open up lib/qBreakpad/handler/handler.pro +2. Build it in whichever mode you wanna build Chatterino (Debug/Profile/Release) +3. Copy the newly built qBreakpad.lib to a folder you create: `lib/qBreakpad/build/handler` + # Windows (Using MSYS2, not recommended) Note: This guide is currently out of date and will not work as is. Note: This build will have some features missing from the build. diff --git a/chatterino.pro b/chatterino.pro index 360c11d9..a4a62987 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -17,6 +17,12 @@ DEFINES += QT_DEPRECATED_WARNINGS PRECOMPILED_HEADER = src/PrecompiledHeader.hpp CONFIG += precompile_header +useBreakpad { + LIBS += -L$$PWD/lib/qBreakpad/handler/build + include(lib/qBreakpad/qBreakpad.pri) + DEFINES += C_USE_BREAKPAD +} + # https://bugreports.qt.io/browse/QTBUG-27018 equals(QMAKE_CXX, "clang++")|equals(QMAKE_CXX, "g++") { TARGET = bin/chatterino @@ -216,7 +222,8 @@ SOURCES += \ src/widgets/splits/SplitOverlay.cpp \ src/widgets/StreamView.cpp \ src/widgets/TooltipWidget.cpp \ - src/widgets/Window.cpp + src/widgets/Window.cpp \ + src/common/LinkParser.cpp HEADERS += \ src/Application.hpp \ @@ -384,7 +391,8 @@ HEADERS += \ src/widgets/TooltipWidget.hpp \ src/widgets/Window.hpp \ src/providers/twitch/TwitchCommon.hpp \ - src/util/IsBigEndian.hpp + src/util/IsBigEndian.hpp \ + src/common/LinkParser.hpp RESOURCES += \ resources/resources.qrc \ diff --git a/lib/qBreakpad b/lib/qBreakpad new file mode 160000 index 00000000..a4626c12 --- /dev/null +++ b/lib/qBreakpad @@ -0,0 +1 @@ +Subproject commit a4626c12e9ae6f02fc1ca7a4e399bd8307424103 diff --git a/resources/resources.qrc b/resources/resources.qrc index 8e968699..b12b67d4 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -66,6 +66,7 @@ images/buttons/unban.png images/buttons/unmod.png images/emote_dark.svg + tlds.txt qt.conf diff --git a/resources/tlds.txt b/resources/tlds.txt new file mode 100644 index 00000000..379fecf6 --- /dev/null +++ b/resources/tlds.txt @@ -0,0 +1,1693 @@ +aaa +aarp +abarth +abb +abbott +abbvie +abc +able +abogado +abudhabi +ac +academy +accenture +accountant +accountants +aco +active +actor +ad +adac +ads +adult +ae +aeg +aero +aetna +af +afamilycompany +afl +africa +ag +agakhan +agency +ai +aig +aigo +airbus +airforce +airtel +akdn +al +alfaromeo +alibaba +alipay +allfinanz +allstate +ally +alsace +alstom +am +americanexpress +americanfamily +amex +amfam +amica +amsterdam +analytics +android +anquan +anz +ao +aol +apartments +app +apple +aq +aquarelle +ar +arab +aramco +archi +army +arpa +art +arte +as +asda +asia +associates +at +athleta +attorney +au +auction +audi +audible +audio +auspost +author +auto +autos +avianca +aw +aws +ax +axa +az +azure +ba +baby +baidu +banamex +bananarepublic +band +bank +bar +barcelona +barclaycard +barclays +barefoot +bargains +baseball +basketball +bauhaus +bayern +bb +bbc +bbt +bbva +bcg +bcn +bd +be +beats +beauty +beer +bentley +berlin +best +bestbuy +bet +bf +bg +bh +bharti +bi +bible +bid +bike +bing +bingo +bio +biz +bj +black +blackfriday +blanco +blockbuster +blog +bloomberg +blue +bm +bms +bmw +bn +bnl +bnpparibas +bo +boats +boehringer +bofa +bom +bond +boo +book +booking +bosch +bostik +boston +bot +boutique +box +br +bradesco +bridgestone +broadway +broker +brother +brussels +bs +bt +budapest +bugatti +build +builders +business +buy +buzz +bv +bw +by +bz +bzh +ca +cab +cafe +cal +call +calvinklein +cam +camera +camp +cancerresearch +canon +capetown +capital +capitalone +car +caravan +cards +care +career +careers +cars +cartier +casa +case +caseih +cash +casino +cat +catering +catholic +cba +cbn +cbre +cbs +cc +cd +ceb +center +ceo +cern +cf +cfa +cfd +cg +ch +chanel +channel +charity +chase +chat +cheap +chintai +christmas +chrome +chrysler +church +ci +cipriani +circle +cisco +citadel +citi +citic +city +cityeats +ck +cl +claims +cleaning +click +clinic +clinique +clothing +cloud +club +clubmed +cm +cn +co +coach +codes +coffee +college +cologne +com +comcast +commbank +community +company +compare +computer +comsec +condos +construction +consulting +contact +contractors +cooking +cookingchannel +cool +coop +corsica +country +coupon +coupons +courses +cr +credit +creditcard +creditunion +cricket +crown +crs +cruise +cruises +csc +cu +cuisinella +cv +cw +cx +cy +cymru +cyou +cz +dabur +dad +dance +data +date +dating +datsun +day +dclk +dds +de +deal +dealer +deals +degree +delivery +dell +deloitte +delta +democrat +dental +dentist +desi +design +dev +dhl +diamonds +diet +digital +direct +directory +discount +discover +dish +diy +dj +dk +dm +dnp +do +docs +doctor +dodge +dog +doha +domains +dot +download +drive +dtv +dubai +duck +dunlop +duns +dupont +durban +dvag +dvr +dz +earth +eat +ec +eco +edeka +edu +education +ee +eg +email +emerck +energy +engineer +engineering +enterprises +epost +epson +equipment +er +ericsson +erni +es +esq +estate +esurance +et +etisalat +eu +eurovision +eus +events +everbank +exchange +expert +exposed +express +extraspace +fage +fail +fairwinds +faith +family +fan +fans +farm +farmers +fashion +fast +fedex +feedback +ferrari +ferrero +fi +fiat +fidelity +fido +film +final +finance +financial +fire +firestone +firmdale +fish +fishing +fit +fitness +fj +fk +flickr +flights +flir +florist +flowers +fly +fm +fo +foo +food +foodnetwork +football +ford +forex +forsale +forum +foundation +fox +fr +free +fresenius +frl +frogans +frontdoor +frontier +ftr +fujitsu +fujixerox +fun +fund +furniture +futbol +fyi +ga +gal +gallery +gallo +gallup +game +games +gap +garden +gb +gbiz +gd +gdn +ge +gea +gent +genting +george +gf +gg +ggee +gh +gi +gift +gifts +gives +giving +gl +glade +glass +gle +global +globo +gm +gmail +gmbh +gmo +gmx +gn +godaddy +gold +goldpoint +golf +goo +goodhands +goodyear +goog +google +gop +got +gov +gp +gq +gr +grainger +graphics +gratis +green +gripe +grocery +group +gs +gt +gu +guardian +gucci +guge +guide +guitars +guru +gw +gy +hair +hamburg +hangout +haus +hbo +hdfc +hdfcbank +health +healthcare +help +helsinki +here +hermes +hgtv +hiphop +hisamitsu +hitachi +hiv +hk +hkt +hm +hn +hockey +holdings +holiday +homedepot +homegoods +homes +homesense +honda +honeywell +horse +hospital +host +hosting +hot +hoteles +hotels +hotmail +house +how +hr +hsbc +ht +hu +hughes +hyatt +hyundai +ibm +icbc +ice +icu +id +ie +ieee +ifm +ikano +il +im +imamat +imdb +immo +immobilien +in +industries +infiniti +info +ing +ink +institute +insurance +insure +int +intel +international +intuit +investments +io +ipiranga +iq +ir +irish +is +iselect +ismaili +ist +istanbul +it +itau +itv +iveco +iwc +jaguar +java +jcb +jcp +je +jeep +jetzt +jewelry +jio +jlc +jll +jm +jmp +jnj +jo +jobs +joburg +jot +joy +jp +jpmorgan +jprs +juegos +juniper +kaufen +kddi +ke +kerryhotels +kerrylogistics +kerryproperties +kfh +kg +kh +ki +kia +kim +kinder +kindle +kitchen +kiwi +km +kn +koeln +komatsu +kosher +kp +kpmg +kpn +kr +krd +kred +kuokgroup +kw +ky +kyoto +kz +la +lacaixa +ladbrokes +lamborghini +lamer +lancaster +lancia +lancome +land +landrover +lanxess +lasalle +lat +latino +latrobe +law +lawyer +lb +lc +lds +lease +leclerc +lefrak +legal +lego +lexus +lgbt +li +liaison +lidl +life +lifeinsurance +lifestyle +lighting +like +lilly +limited +limo +lincoln +linde +link +lipsy +live +living +lixil +lk +llc +loan +loans +locker +locus +loft +lol +london +lotte +lotto +love +lpl +lplfinancial +lr +ls +lt +ltd +ltda +lu +lundbeck +lupin +luxe +luxury +lv +ly +ma +macys +madrid +maif +maison +makeup +man +management +mango +map +market +marketing +markets +marriott +marshalls +maserati +mattel +mba +mc +mckinsey +md +me +med +media +meet +melbourne +meme +memorial +men +menu +merckmsd +metlife +mg +mh +miami +microsoft +mil +mini +mint +mit +mitsubishi +mk +ml +mlb +mls +mm +mma +mn +mo +mobi +mobile +mobily +moda +moe +moi +mom +monash +money +monster +mopar +mormon +mortgage +moscow +moto +motorcycles +mov +movie +movistar +mp +mq +mr +ms +msd +mt +mtn +mtr +mu +museum +mutual +mv +mw +mx +my +mz +na +nab +nadex +nagoya +name +nationwide +natura +navy +nba +nc +ne +nec +net +netbank +netflix +network +neustar +new +newholland +news +next +nextdirect +nexus +nf +nfl +ng +ngo +nhk +ni +nico +nike +nikon +ninja +nissan +nissay +nl +no +nokia +northwesternmutual +norton +now +nowruz +nowtv +np +nr +nra +nrw +ntt +nu +nyc +nz +obi +observer +off +office +okinawa +olayan +olayangroup +oldnavy +ollo +om +omega +one +ong +onl +online +onyourside +ooo +open +oracle +orange +org +organic +origins +osaka +otsuka +ott +ovh +pa +page +panasonic +panerai +paris +pars +partners +parts +party +passagens +pay +pccw +pe +pet +pf +pfizer +pg +ph +pharmacy +phd +philips +phone +photo +photography +photos +physio +piaget +pics +pictet +pictures +pid +pin +ping +pink +pioneer +pizza +pk +pl +place +play +playstation +plumbing +plus +pm +pn +pnc +pohl +poker +politie +porn +post +pr +pramerica +praxi +press +prime +pro +prod +productions +prof +progressive +promo +properties +property +protection +pru +prudential +ps +pt +pub +pw +pwc +py +qa +qpon +quebec +quest +qvc +racing +radio +raid +re +read +realestate +realtor +realty +recipes +red +redstone +redumbrella +rehab +reise +reisen +reit +reliance +ren +rent +rentals +repair +report +republican +rest +restaurant +review +reviews +rexroth +rich +richardli +ricoh +rightathome +ril +rio +rip +rmit +ro +rocher +rocks +rodeo +rogers +room +rs +rsvp +ru +rugby +ruhr +run +rw +rwe +ryukyu +sa +saarland +safe +safety +sakura +sale +salon +samsclub +samsung +sandvik +sandvikcoromant +sanofi +sap +sarl +sas +save +saxo +sb +sbi +sbs +sc +sca +scb +schaeffler +schmidt +scholarships +school +schule +schwarz +science +scjohnson +scor +scot +sd +se +search +seat +secure +security +seek +select +sener +services +ses +seven +sew +sex +sexy +sfr +sg +sh +shangrila +sharp +shaw +shell +shia +shiksha +shoes +shop +shopping +shouji +show +showtime +shriram +si +silk +sina +singles +site +sj +sk +ski +skin +sky +skype +sl +sling +sm +smart +smile +sn +sncf +so +soccer +social +softbank +software +sohu +solar +solutions +song +sony +soy +space +spiegel +sport +spot +spreadbetting +sr +srl +srt +st +stada +staples +star +starhub +statebank +statefarm +statoil +stc +stcgroup +stockholm +storage +store +stream +studio +study +style +su +sucks +supplies +supply +support +surf +surgery +suzuki +sv +swatch +swiftcover +swiss +sx +sy +sydney +symantec +systems +sz +tab +taipei +talk +taobao +target +tatamotors +tatar +tattoo +tax +taxi +tc +tci +td +tdk +team +tech +technology +tel +telecity +telefonica +temasek +tennis +teva +tf +tg +th +thd +theater +theatre +tiaa +tickets +tienda +tiffany +tips +tires +tirol +tj +tjmaxx +tjx +tk +tkmaxx +tl +tm +tmall +tn +to +today +tokyo +tools +top +toray +toshiba +total +tours +town +toyota +toys +tr +trade +trading +training +travel +travelchannel +travelers +travelersinsurance +trust +trv +tt +tube +tui +tunes +tushu +tv +tvs +tw +tz +ua +ubank +ubs +uconnect +ug +uk +unicom +university +uno +uol +ups +us +uy +uz +va +vacations +vana +vanguard +vc +ve +vegas +ventures +verisign +versicherung +vet +vg +vi +viajes +video +vig +viking +villas +vin +vip +virgin +visa +vision +vista +vistaprint +viva +vivo +vlaanderen +vn +vodka +volkswagen +volvo +vote +voting +voto +voyage +vu +vuelos +wales +walmart +walter +wang +wanggou +warman +watch +watches +weather +weatherchannel +webcam +weber +website +wed +wedding +weibo +weir +wf +whoswho +wien +wiki +williamhill +win +windows +wine +winners +wme +wolterskluwer +woodside +work +works +world +wow +ws +wtc +wtf +xbox +xerox +xfinity +xihuan +xin +xn--11b4c3d +xn--1ck2e1b +xn--1qqw23a +xn--2scrj9c +xn--30rr7y +xn--3bst00m +xn--3ds443g +xn--3e0b707e +xn--3hcrj9c +xn--3oq18vl8pn36a +xn--3pxu8k +xn--42c2d9a +xn--45br5cyl +xn--45brj9c +xn--45q11c +xn--4gbrim +xn--54b7fta0cc +xn--55qw42g +xn--55qx5d +xn--5su34j936bgsg +xn--5tzm5g +xn--6frz82g +xn--6qq986b3xl +xn--80adxhks +xn--80ao21a +xn--80aqecdr1a +xn--80asehdb +xn--80aswg +xn--8y0a063a +xn--90a3ac +xn--90ae +xn--90ais +xn--9dbq2a +xn--9et52u +xn--9krt00a +xn--b4w605ferd +xn--bck1b9a5dre4c +xn--c1avg +xn--c2br7g +xn--cck2b3b +xn--cg4bki +xn--clchc0ea0b2g2a9gcd +xn--czr694b +xn--czrs0t +xn--czru2d +xn--d1acj3b +xn--d1alf +xn--e1a4c +xn--eckvdtc9d +xn--efvy88h +xn--estv75g +xn--fct429k +xn--fhbei +xn--fiq228c5hs +xn--fiq64b +xn--fiqs8s +xn--fiqz9s +xn--fjq720a +xn--flw351e +xn--fpcrj9c3d +xn--fzc2c9e2c +xn--fzys8d69uvgm +xn--g2xx48c +xn--gckr3f0f +xn--gecrj9c +xn--gk3at1e +xn--h2breg3eve +xn--h2brj9c +xn--h2brj9c8c +xn--hxt814e +xn--i1b6b1a6a2e +xn--imr513n +xn--io0a7i +xn--j1aef +xn--j1amh +xn--j6w193g +xn--jlq61u9w7b +xn--jvr189m +xn--kcrx77d1x4a +xn--kprw13d +xn--kpry57d +xn--kpu716f +xn--kput3i +xn--l1acc +xn--lgbbat1ad8j +xn--mgb9awbf +xn--mgba3a3ejt +xn--mgba3a4f16a +xn--mgba7c0bbn0a +xn--mgbaakc7dvf +xn--mgbaam7a8h +xn--mgbab2bd +xn--mgbai9azgqp6j +xn--mgbayh7gpa +xn--mgbb9fbpob +xn--mgbbh1a +xn--mgbbh1a71e +xn--mgbc0a9azcg +xn--mgbca7dzdo +xn--mgberp4a5d4ar +xn--mgbgu82a +xn--mgbi4ecexp +xn--mgbpl2fh +xn--mgbt3dhd +xn--mgbtx2b +xn--mgbx4cd0ab +xn--mix891f +xn--mk1bu44c +xn--mxtq1m +xn--ngbc5azd +xn--ngbe9e0a +xn--ngbrx +xn--node +xn--nqv7f +xn--nqv7fs00ema +xn--nyqy26a +xn--o3cw4h +xn--ogbpf8fl +xn--otu796d +xn--p1acf +xn--p1ai +xn--pbt977c +xn--pgbs0dh +xn--pssy2u +xn--q9jyb4c +xn--qcka1pmc +xn--qxam +xn--rhqv96g +xn--rovu88b +xn--rvc1e0am3e +xn--s9brj9c +xn--ses554g +xn--t60b56a +xn--tckwe +xn--tiq49xqyj +xn--unup4y +xn--vermgensberater-ctb +xn--vermgensberatung-pwb +xn--vhquv +xn--vuq861b +xn--w4r85el8fhu5dnra +xn--w4rs40l +xn--wgbh1c +xn--wgbl6a +xn--xhq521b +xn--xkc2al3hye2a +xn--xkc2dl3a5ee0h +xn--y9a3aq +xn--yfro4i67o +xn--ygbi2ammx +xn--zfr164b +xperia +xxx +xyz +yachts +yahoo +yamaxun +yandex +ye +yodobashi +yoga +yokohama +you +youtube +yt +yun +za +zappos +zara +zero +zip +zippo +zm +zone +zuerich +zw +कॉम +セール +佛山 +ಭಾರತ +慈善 +集团 +在线 +한국 +ଭାରତ +大众汽车 +点看 +คอม +ভাৰত +ভারত +八卦 +موقع +বাংলা +公益 +公司 +香格里拉 +网站 +移动 +我爱你 +москва +қаз +католик +онлайн +сайт +联通 +срб +бг +бел +קום +时尚 +微博 +淡马锡 +ファッション +орг +नेट +ストア +삼성 +சிங்கப்பூர் +商标 +商店 +商城 +дети +мкд +ею +ポイント +新闻 +工行 +家電 +كوم +中文网 +中信 +中国 +中國 +娱乐 +谷歌 +భారత్ +ලංකා +電訊盈科 +购物 +クラウド +ભારત +通販 +भारतम् +भारत +भारोत +网店 +संगठन +餐厅 +网络 +ком +укр +香港 +诺基亚 +食品 +飞利浦 +台湾 +台灣 +手表 +手机 +мон +الجزائر +عمان +ارامكو +ایران +العليان +اتصالات +امارات +بازار +پاکستان +الاردن +موبايلي +بارت +بھارت +المغرب +ابوظبي +السعودية +ڀارت +كاثوليك +سودان +همراه +عراق +مليسيا +澳門 +닷컴 +政府 +شبكة +بيتك +عرب +გე +机构 +组织机构 +健康 +ไทย +سورية +招聘 +рус +рф +珠宝 +تونس +大拿 +みんな +グーグル +ελ +世界 +書籍 +ഭാരതം +ਭਾਰਤ +网址 +닷넷 +コム +天主教 +游戏 +vermögensberater +vermögensberatung +企业 +信息 +嘉里大酒店 +嘉里 +مصر +قطر +广东 +இலங்கை +இந்தியா +հայ +新加坡 +فلسطين +政务 \ No newline at end of file diff --git a/src/common/LinkParser.cpp b/src/common/LinkParser.cpp new file mode 100644 index 00000000..1c081d8d --- /dev/null +++ b/src/common/LinkParser.cpp @@ -0,0 +1,61 @@ +#include "common/LinkParser.hpp" + +#include +#include +#include +#include + +namespace chatterino { + +LinkParser::LinkParser(const QString &unparsedString) +{ + static QRegularExpression linkRegex = [] { + QFile tldFile(":/tlds.txt"); + tldFile.open(QFile::ReadOnly); + + QTextStream t1(&tldFile); + t1.setCodec("UTF-8"); + + // Read the TLDs in and replace the newlines with pipes + QString tldData = t1.readAll().replace("\n", "|"); + + const QString urlRegExp = + "^" + // protocol identifier + "(?:(?:https?|ftps?)://)?" + // user:pass authentication + "(?:\\S+(?::\\S*)?@)?" + "(?:" + // IP address dotted notation octets + // excludes loopback network 0.0.0.0 + // excludes reserved space >= 224.0.0.0 + // excludes network & broacast addresses + // (first & last IP address of each class) + "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" + "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" + "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + "|" + // host name + "(?:(?:[_a-z\\x{00a1}-\\x{ffff}0-9]-*)*[a-z\\x{00a1}-\\x{ffff}0-9]+)" + // domain name + "(?:\\.(?:[a-z\\x{00a1}-\\x{ffff}0-9]-*)*[a-z\\x{00a1}-\\x{ffff}0-9]+)*" + // TLD identifier + //"(?:\\.(?:[a-z\\x{00a1}-\\x{ffff}]{2,}))" + "(?:[\\.](?:" + + tldData + + "))" + "\\.?" + ")" + // port number + "(?::\\d{2,5})?" + // resource path + "(?:[/?#]\\S*)?" + "$"; + + return QRegularExpression(urlRegExp, QRegularExpression::CaseInsensitiveOption); + }(); + + this->match_ = linkRegex.match(unparsedString); +} + +} // namespace chatterino diff --git a/src/common/LinkParser.hpp b/src/common/LinkParser.hpp new file mode 100644 index 00000000..3a1ad6fa --- /dev/null +++ b/src/common/LinkParser.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +namespace chatterino { + +class LinkParser +{ +public: + explicit LinkParser(const QString &unparsedString); + + bool hasMatch() const + { + return this->match_.hasMatch(); + } + + QString getCaptured() const + { + return this->match_.captured(); + } + +private: + QRegularExpressionMatch match_; +}; + +} // namespace chatterino diff --git a/src/main.cpp b/src/main.cpp index 2c81362a..cd1a1948 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,6 +23,10 @@ #include #endif +#ifdef C_USE_BREAKPAD +#include +#endif + int runGui(QApplication &a, int argc, char *argv[]); void runNativeMessagingHost(); void installCustomPalette(); @@ -83,12 +87,16 @@ int runGui(QApplication &a, int argc, char *argv[]) app->construct(); +#ifdef C_USE_BREAKPAD + QBreakpadInstance.setDumpPath(app->paths->settingsFolderPath + "/Crashes"); +#endif + auto &pathMan = *app->paths; // Running file auto runningPath = pathMan.miscDirectory + "/running_" + pathMan.applicationFilePathHash; if (QFile::exists(runningPath)) { -#ifndef DISABLE_CRASH_DIALOG +#ifndef C_DISABLE_CRASH_DIALOG chatterino::LastRunCrashDialog dialog; switch (dialog.exec()) { diff --git a/src/messages/MessageBuilder.cpp b/src/messages/MessageBuilder.cpp index 697779ed..0a8e58f1 100644 --- a/src/messages/MessageBuilder.cpp +++ b/src/messages/MessageBuilder.cpp @@ -1,4 +1,6 @@ #include "MessageBuilder.hpp" + +#include "common/LinkParser.hpp" #include "singletons/EmoteManager.hpp" #include "singletons/ResourceManager.hpp" #include "singletons/ThemeManager.hpp" @@ -43,19 +45,21 @@ void MessageBuilder::appendTimestamp(const QTime &time) QString MessageBuilder::matchLink(const QString &string) { - static QRegularExpression linkRegex("[[:ascii:]]*\\.[a-zA-Z]+\\/?[[:ascii:]]*"); + LinkParser linkParser(string); + static QRegularExpression httpRegex("\\bhttps?://"); + static QRegularExpression ftpRegex("\\bftps?://"); - auto match = linkRegex.match(string); - - if (!match.hasMatch()) { + if (!linkParser.hasMatch()) { return QString(); } - QString captured = match.captured(); + QString captured = linkParser.getCaptured(); if (!captured.contains(httpRegex)) { - captured.insert(0, "http://"); + if (!captured.contains(ftpRegex)) { + captured.insert(0, "http://"); + } } return captured; diff --git a/tools/build-breakpad-linux.sh b/tools/build-breakpad-linux.sh new file mode 100755 index 00000000..7d343ce6 --- /dev/null +++ b/tools/build-breakpad-linux.sh @@ -0,0 +1,14 @@ +#!/bin/bash +cd ../lib/qBreakpad + +echo "Updating qBreakpad's breakpad dependency version" +cd third_party/breakpad +git checkout 7b3afa9258e58a57ffbeb395d445811f92616ae9 +cd ../../ + +cd handler +mkdir build +cd build +qmake .. +echo "Building handler" +make -j8 && "Successfully built qBreakpad" diff --git a/tools/get-tlds-update.sh b/tools/get-tlds-update.sh new file mode 100644 index 00000000..a8b01b51 --- /dev/null +++ b/tools/get-tlds-update.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +#Download the official list of active TLDs from IANA +#Remove the first line that contains data not needed. +#Put everything that can be into lowercase. +#Output the result to a file. +curl -s 'https://data.iana.org/TLD/tlds-alpha-by-domain.txt' | sed -e '1d' -e 's/\(.*\)/\L\1/' > tlds.txt + +#Get the TLDs in punycode format. +#Convert the punycode to Unicode. +#Append the results to the current file. +sed -n -e '/^xn--/p' tlds.txt | idn2 -d >> tlds.txt +mv tlds.txt ../resources/tlds.txt \ No newline at end of file