mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Merge pull request #554 from hunbernd/feature/paste-RS-link
Automatically detect retroshare links when pasting text
This commit is contained in:
commit
46dd5be2f2
@ -1587,46 +1587,8 @@ void RSLinkClipboard::parseClipboard(QList<RetroShareLink> &links)
|
|||||||
{
|
{
|
||||||
// parse clipboard for links.
|
// parse clipboard for links.
|
||||||
//
|
//
|
||||||
links.clear();
|
|
||||||
QString text = QApplication::clipboard()->text() ;
|
QString text = QApplication::clipboard()->text() ;
|
||||||
|
parseText(text, links);
|
||||||
std::cerr << "Parsing clipboard:" << text.toStdString() << std::endl ;
|
|
||||||
|
|
||||||
QRegExp rx(QString("retroshare://(%1)[^\r\n]+").arg(HOST_REGEXP));
|
|
||||||
|
|
||||||
int pos = 0;
|
|
||||||
|
|
||||||
while((pos = rx.indexIn(text, pos)) != -1)
|
|
||||||
{
|
|
||||||
QString url(text.mid(pos, rx.matchedLength()));
|
|
||||||
RetroShareLink link(url);
|
|
||||||
|
|
||||||
if(link.valid())
|
|
||||||
{
|
|
||||||
// check that the link is not already in the list:
|
|
||||||
bool already = false ;
|
|
||||||
for (int i = 0; i <links.size(); ++i)
|
|
||||||
if(links[i] == link)
|
|
||||||
{
|
|
||||||
already = true ;
|
|
||||||
break ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!already)
|
|
||||||
{
|
|
||||||
links.push_back(link) ;
|
|
||||||
#ifdef DEBUG_RSLINK
|
|
||||||
std::cerr << "captured link: " << link.toString().toStdString() << std::endl ;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef DEBUG_RSLINK
|
|
||||||
else
|
|
||||||
std::cerr << "invalid link" << std::endl ;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pos += rx.matchedLength();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString RSLinkClipboard::toString()
|
QString RSLinkClipboard::toString()
|
||||||
@ -1690,3 +1652,46 @@ bool RSLinkClipboard::empty(RetroShareLink::enumType type /* = RetroShareLink::T
|
|||||||
return RetroShareLink::process(linksToProcess, flag);
|
return RetroShareLink::process(linksToProcess, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RSLinkClipboard::parseText(QString text, QList<RetroShareLink> &links)
|
||||||
|
{
|
||||||
|
links.clear();
|
||||||
|
|
||||||
|
std::cerr << "Parsing text:" << text.toStdString() << std::endl ;
|
||||||
|
|
||||||
|
QRegExp rx(QString("retroshare://(%1)[^\r\n]+").arg(HOST_REGEXP));
|
||||||
|
|
||||||
|
int pos = 0;
|
||||||
|
|
||||||
|
while((pos = rx.indexIn(text, pos)) != -1)
|
||||||
|
{
|
||||||
|
QString url(text.mid(pos, rx.matchedLength()));
|
||||||
|
RetroShareLink link(url);
|
||||||
|
|
||||||
|
if(link.valid())
|
||||||
|
{
|
||||||
|
// check that the link is not already in the list:
|
||||||
|
bool already = false ;
|
||||||
|
for (int i = 0; i <links.size(); ++i)
|
||||||
|
if(links[i] == link)
|
||||||
|
{
|
||||||
|
already = true ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!already)
|
||||||
|
{
|
||||||
|
links.push_back(link) ;
|
||||||
|
#ifdef DEBUG_RSLINK
|
||||||
|
std::cerr << "captured link: " << link.toString().toStdString() << std::endl ;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef DEBUG_RSLINK
|
||||||
|
else
|
||||||
|
std::cerr << "invalid link" << std::endl ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pos += rx.matchedLength();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -208,6 +208,8 @@ class RSLinkClipboard
|
|||||||
//
|
//
|
||||||
static int process(RetroShareLink::enumType type = RetroShareLink::TYPE_UNKNOWN, uint flag = RSLINK_PROCESS_NOTIFY_ALL);
|
static int process(RetroShareLink::enumType type = RetroShareLink::TYPE_UNKNOWN, uint flag = RSLINK_PROCESS_NOTIFY_ALL);
|
||||||
|
|
||||||
|
static void parseText(QString text, QList<RetroShareLink> &links) ;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void parseClipboard(QList<RetroShareLink> &links) ;
|
static void parseClipboard(QList<RetroShareLink> &links) ;
|
||||||
};
|
};
|
||||||
|
@ -78,6 +78,17 @@ void MimeTextEdit::insertFromMimeData(const QMimeData* source)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//insert retroshare links
|
||||||
|
QList<RetroShareLink> links;
|
||||||
|
RSLinkClipboard::parseText(source->text(), links);
|
||||||
|
if(links.size() > 0)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < links.size(); ++i)
|
||||||
|
insertHtml(links[i].toHtml() + "<br>");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
return RSTextEdit::insertFromMimeData(source);
|
return RSTextEdit::insertFromMimeData(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user