Alex 'AdUser' Z
11 years ago
commit
0d0701e01f
3 changed files with 178 additions and 0 deletions
@ -0,0 +1,139 @@ |
|||||||
|
#include "magnetize.h" |
||||||
|
|
||||||
|
MainWindow::MainWindow() |
||||||
|
{ |
||||||
|
filename=new QLineEdit; |
||||||
|
filename->setMinimumWidth(400); |
||||||
|
filenamelabel=new QLabel("File name:"); |
||||||
|
magnet=new QLineEdit; |
||||||
|
magnet->setReadOnly(true); |
||||||
|
magnet->setMinimumWidth(500); |
||||||
|
magnetlabel=new QLabel("Magnet link:"); |
||||||
|
quitButton=new QPushButton("Quit"); |
||||||
|
openButton=new QPushButton("Open"); |
||||||
|
genButton=new QPushButton("Generate"); |
||||||
|
copyButton=new QPushButton("Copy"); |
||||||
|
copyButton->setEnabled(false); |
||||||
|
copyButton->setMinimumHeight(40); |
||||||
|
connect(quitButton,SIGNAL(clicked()),this,SLOT(quit())); |
||||||
|
connect(openButton,SIGNAL(clicked()),this,SLOT(openfile())); |
||||||
|
connect(genButton,SIGNAL(clicked()),this,SLOT(generate())); |
||||||
|
connect(copyButton,SIGNAL(clicked()),this,SLOT(copy())); |
||||||
|
QVBoxLayout* mainlayout=new QVBoxLayout; |
||||||
|
QHBoxLayout* filenamelayout=new QHBoxLayout; |
||||||
|
QHBoxLayout* magnetlayout=new QHBoxLayout; |
||||||
|
|
||||||
|
filenamelayout->addWidget(filenamelabel); |
||||||
|
filenamelayout->addWidget(filename); |
||||||
|
filenamelayout->addWidget(openButton); |
||||||
|
magnetlayout->addWidget(magnetlabel); |
||||||
|
magnetlayout->addWidget(magnet); |
||||||
|
mainlayout->addLayout(filenamelayout); |
||||||
|
mainlayout->addWidget(genButton); |
||||||
|
mainlayout->addLayout(magnetlayout); |
||||||
|
mainlayout->addWidget(copyButton); |
||||||
|
mainlayout->addWidget(quitButton); |
||||||
|
setLayout(mainlayout); |
||||||
|
setWindowTitle("Generate magnet link"); |
||||||
|
} |
||||||
|
|
||||||
|
void MainWindow::quit() |
||||||
|
{ |
||||||
|
qApp->quit(); |
||||||
|
} |
||||||
|
|
||||||
|
void MainWindow::openfile() |
||||||
|
{ |
||||||
|
QString fname=QFileDialog::getOpenFileName(this,"Open file","","Torrent files (*.torrent)"); |
||||||
|
setmagnet(fname); |
||||||
|
} |
||||||
|
|
||||||
|
void MainWindow::generate() |
||||||
|
{ |
||||||
|
QString fname=filename->text(); |
||||||
|
setmagnet(fname); |
||||||
|
} |
||||||
|
|
||||||
|
void MainWindow::copy() |
||||||
|
{ |
||||||
|
QString link=magnet->text(); |
||||||
|
qApp->clipboard()->setText(link); |
||||||
|
} |
||||||
|
|
||||||
|
void MainWindow::setmagnet(const QString& fname) |
||||||
|
{ |
||||||
|
if(fname=="") |
||||||
|
{ |
||||||
|
magnet->setText(""); |
||||||
|
copyButton->setEnabled(false); |
||||||
|
return; |
||||||
|
} |
||||||
|
QString hash; |
||||||
|
int ret; |
||||||
|
bool priv; |
||||||
|
filename->setText(fname); |
||||||
|
ret=infohash(fname.toLocal8Bit().data(),hash,priv); |
||||||
|
if(ret) |
||||||
|
{ |
||||||
|
magnet->setText("Error!"); |
||||||
|
copyButton->setEnabled(false);
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
magnet->setText("magnet:?xt=urn:btih:"+hash); |
||||||
|
if(priv) copyButton->setEnabled(false); |
||||||
|
else copyButton->setEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void Byte2Hex(unsigned char ch, char* out) |
||||||
|
{ |
||||||
|
static const char cnv[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; |
||||||
|
out[0]=cnv[(ch&(15<<4))>>4]; |
||||||
|
out[1]=cnv[ch&15]; |
||||||
|
} |
||||||
|
|
||||||
|
int infohash(const char* file, QString& Qinfohash, bool& priv) |
||||||
|
{ |
||||||
|
int fd; |
||||||
|
struct stat st; |
||||||
|
off_t size; |
||||||
|
void* map; |
||||||
|
libtorrent::error_code ec; |
||||||
|
char s[3]; |
||||||
|
Qinfohash=""; |
||||||
|
libtorrent::sha1_hash infohash; |
||||||
|
unsigned char* i; |
||||||
|
|
||||||
|
fd=open(file,O_RDONLY); |
||||||
|
if(fd==-1) return 1; |
||||||
|
if(fstat(fd,&st)) {close(fd); return 1;} |
||||||
|
size=st.st_size; |
||||||
|
map=mmap(0,size,PROT_READ,MAP_SHARED,fd,0); |
||||||
|
if(map==(void*)-1) {close(fd); return 1;} |
||||||
|
|
||||||
|
libtorrent::torrent_info tinfo((const char*)map,size,ec); |
||||||
|
if(ec) {munmap(map,size); close(fd); return 1;} |
||||||
|
infohash=tinfo.info_hash(); |
||||||
|
priv=tinfo.priv(); |
||||||
|
s[2]=0; |
||||||
|
for(i=infohash.begin();i!=infohash.end();i++) |
||||||
|
{ |
||||||
|
Byte2Hex(*i,s); |
||||||
|
Qinfohash+=s; |
||||||
|
} |
||||||
|
|
||||||
|
munmap(map,size); |
||||||
|
close(fd); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char** argv) |
||||||
|
{ |
||||||
|
QApplication app(argc, argv); |
||||||
|
|
||||||
|
MainWindow w; |
||||||
|
w.show(); |
||||||
|
|
||||||
|
return app.exec(); |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
#include <QtGui> |
||||||
|
//#define BOOST_FILESYSTEM_NARROW_ONLY
|
||||||
|
#include <libtorrent/torrent_info.hpp> |
||||||
|
#include <sys/types.h> |
||||||
|
#include <sys/stat.h> |
||||||
|
#include <fcntl.h> |
||||||
|
#include <unistd.h> |
||||||
|
#include <sys/mman.h> |
||||||
|
#include <iostream> |
||||||
|
|
||||||
|
class MainWindow:public QWidget |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
MainWindow(); |
||||||
|
private slots: |
||||||
|
void quit(); |
||||||
|
void openfile(); |
||||||
|
void copy(); |
||||||
|
void generate(); |
||||||
|
private: |
||||||
|
void setmagnet(const QString& fname); |
||||||
|
QLineEdit *filename; |
||||||
|
QPushButton *quitButton; |
||||||
|
QLabel *filenamelabel; |
||||||
|
QPushButton *openButton; |
||||||
|
QLineEdit *magnet; |
||||||
|
QLabel* magnetlabel; |
||||||
|
QPushButton* genButton; |
||||||
|
QPushButton* copyButton; |
||||||
|
}; |
||||||
|
|
||||||
|
int infohash(const char* file, QString& Qinfohash, bool& priv); |
Loading…
Reference in new issue