Browse Source

+ initial

master
Alex 'AdUser' Z 11 years ago
commit
0d0701e01f
  1. 139
      magnetize.cpp
  2. 34
      magnetize.h
  3. 5
      magnetize.pro

139
magnetize.cpp

@ -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();
}

34
magnetize.h

@ -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);

5
magnetize.pro

@ -0,0 +1,5 @@
HEADERS = magnetize.h
SOURCES = magnetize.cpp
LIBS += `pkg-config --libs libtorrent-rasterbar` -lboost_system-mt
QMAKE_CFLAGS += `pkg-config --cflags libtorrent-rasterbar`
QMAKE_CXXFLAGS += `pkg-config --cflags libtorrent-rasterbar`
Loading…
Cancel
Save