Skip to content

Commit

Permalink
V2022.1.0
Browse files Browse the repository at this point in the history
V2022.1.0 Changelog:
- Rewrote Tube Converter in C++ using gtkmm
- Removed support for Windows OS. Only Linux is now supported

Changes From Last Commit:
- Made yt-dlp and ffmpeg hard dependencies instead of having Tube Converter download yt-dlp in the application
- Created Download and DownloadManager models to manage and track downloads in a queue form
- Modified FileTypes based on what yt-dlp supports
- Implemented UI design and code for download queue system
- Finalized design and code for GA release
  • Loading branch information
nlogozzo committed Jan 6, 2022
1 parent f1d707c commit e210ee4
Show file tree
Hide file tree
Showing 19 changed files with 406 additions and 212 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(HELPERS helpers/filetypehelpers.h helpers/filetypehelpers.cpp)
set(MODELS models/configuration.h models/configuration.cpp models/update/version.h models/update/version.cpp models/update/updateconfig.h models/update/updateconfig.cpp models/update/updater.h models/update/updater.cpp models/ytdlpmanager.h models/ytdlpmanager.cpp models/filetype.h)
set(MODELS models/configuration.h models/configuration.cpp models/update/version.h models/update/version.cpp models/update/updateconfig.h models/update/updateconfig.cpp models/update/updater.h models/update/updater.cpp models/filetype.h models/download.h models/download.cpp models/downloadmanager.h models/downloadmanager.cpp models/datadownloadscolumns.h models/datadownloadscolumns.cpp)
set(CONTROLS controls/headerbar.h controls/headerbar.cpp controls/infobar.h controls/infobar.cpp controls/progressdialog.h controls/progressdialog.cpp)
set(VIEWS views/mainwindow.h views/mainwindow.cpp views/settingsdialog.h views/settingsdialog.cpp)

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
- [gtkmm](https://gtkmm.org/en/)
- [curlpp](http://www.curlpp.org/)
- [jsoncpp](https://github.com/open-source-parsers/jsoncpp)
- [yt-dlp](https://github.com/yt-dlp/yt-dlp)
- [ffmpeg](https://www.ffmpeg.org/)

# Screenshots
TODO
2 changes: 1 addition & 1 deletion UpdateConfig.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"LatestVersion":"2022.1.0","Changelog":"- Rewrote Tube Converter in C++ using gtkmm\n- Removed support for Windows OS. Only Linux is now supported"}
{"LatestVersion":"2022.1.0","Changelog":"- Rewrote Tube Converter in C++ using gtkmm\n- Removed support for Windows OS. Only Linux is now supported","LinkToExe":"https://github.com/nlogozzo/NickvisionTubeConverter/releases/download/2022.1.0/NickvisionTubeConverter"}
42 changes: 31 additions & 11 deletions controls/headerbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,19 @@ namespace NickvisionTubeConverter::Controls
//==Select Save Folder==//
m_btnSelectSaveFolder.set_icon_name("folder-open");
m_btnSelectSaveFolder.set_tooltip_text("Select Save Folder");
//==Download Video==//
m_btnDownloadVideo.set_icon_name("document-save");
m_btnDownloadVideo.set_tooltip_text("Download Video");
//==Download Queue==//
m_btnDownloadVideos.set_icon_name("document-save");
m_btnDownloadVideos.set_tooltip_text("Download Queued Videos");
//==Clear Completed Downloads==//
m_btnClearCompletedDownloads.set_icon_name("edit-select-all");
m_btnClearCompletedDownloads.set_tooltip_text("Clear Completed Downloads");
//Add
m_btnAddDownloadToQueue.set_icon_name("list-add");
m_btnAddDownloadToQueue.set_tooltip_text("Add Download To Queue");
//Remove
m_btnRemoveSelectedDownloadFromQueue.set_icon_name("list-remove");
m_btnRemoveSelectedDownloadFromQueue.set_tooltip_text("Remove Selected Download From Queue");
//Clear
m_btnRemoveAllQueuedDownloads.set_icon_name("edit-delete");
m_btnRemoveAllQueuedDownloads.set_tooltip_text("Clear All Queued Downloads");
//==Settings==//
m_btnSettings.set_icon_name("settings");
m_btnSettings.set_tooltip_text("Settings");
Expand Down Expand Up @@ -42,8 +49,11 @@ namespace NickvisionTubeConverter::Controls
//==Layout==//
pack_start(m_btnSelectSaveFolder);
pack_start(m_sep1);
pack_start(m_btnDownloadVideo);
pack_start(m_btnClearCompletedDownloads);
pack_start(m_btnDownloadVideos);
pack_start(m_sep2);
pack_start(m_btnAddDownloadToQueue);
pack_start(m_btnRemoveSelectedDownloadFromQueue);
pack_start(m_btnRemoveAllQueuedDownloads);
pack_end(m_btnHelp);
pack_end(m_btnSettings);
}
Expand All @@ -53,14 +63,24 @@ namespace NickvisionTubeConverter::Controls
return m_btnSelectSaveFolder;
}

Gtk::Button& HeaderBar::getBtnDownloadVideo()
Gtk::Button& HeaderBar::getBtnDownloadVideos()
{
return m_btnDownloadVideo;
return m_btnDownloadVideos;
}

Gtk::Button& HeaderBar::getBtnClearCompletedDownloads()
Gtk::Button& HeaderBar::getBtnAddDownloadToQueue()
{
return m_btnClearCompletedDownloads;
return m_btnAddDownloadToQueue;
}

Gtk::Button& HeaderBar::getBtnRemoveSelectedDownloadFromQueue()
{
return m_btnRemoveSelectedDownloadFromQueue;
}

Gtk::Button& HeaderBar::getBtnRemoveAllQueuedDownloads()
{
return m_btnRemoveAllQueuedDownloads;
}

Gtk::Button& HeaderBar::getBtnSettings()
Expand Down
17 changes: 11 additions & 6 deletions controls/headerbar.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ namespace NickvisionTubeConverter::Controls
public:
HeaderBar();
Gtk::Button& getBtnSelectSaveFolder();
Gtk::Button& getBtnDownloadVideo();
Gtk::Button& getBtnClearCompletedDownloads();
Gtk::Button& getBtnDownloadVideos();
Gtk::Button& getBtnAddDownloadToQueue();
Gtk::Button& getBtnRemoveSelectedDownloadFromQueue();
Gtk::Button& getBtnRemoveAllQueuedDownloads();
Gtk::Button& getBtnSettings();
const std::shared_ptr<Gio::SimpleAction>& getActionCheckForUpdates() const;
const std::shared_ptr<Gio::SimpleAction>& getActionGitHubRepo() const;
Expand All @@ -23,10 +25,12 @@ namespace NickvisionTubeConverter::Controls
private:
//==Select Save Folder==//
Gtk::Button m_btnSelectSaveFolder;
//==Download Video==//
Gtk::Button m_btnDownloadVideo;
//==Clear Completed Downloads==//
Gtk::Button m_btnClearCompletedDownloads;
//==Download Videos==//
Gtk::Button m_btnDownloadVideos;
//====//
Gtk::Button m_btnAddDownloadToQueue;
Gtk::Button m_btnRemoveSelectedDownloadFromQueue;
Gtk::Button m_btnRemoveAllQueuedDownloads;
//==Settings==//
Gtk::Button m_btnSettings;
//==Help==//
Expand All @@ -43,6 +47,7 @@ namespace NickvisionTubeConverter::Controls
Gtk::MenuButton m_btnHelp;
//==Separators==//
Gtk::Separator m_sep1;
Gtk::Separator m_sep2;
};
}

Expand Down
51 changes: 8 additions & 43 deletions helpers/filetypehelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,12 @@ namespace NickvisionTubeConverter::Helpers
{
case FileType::MP4:
return "MP4";
case FileType::MOV:
return "MOV";
case FileType::AVI:
return "AVI";
case FileType::WEBM:
return "WEBM";
case FileType::MP3:
return "MP3";
case FileType::WAV:
return "WAV";
case FileType::WMA:
return "WMA";
case FileType::OGG:
return "OGG";
case FileType::FLAC:
return "FLAC";
}
Expand All @@ -34,17 +28,12 @@ namespace NickvisionTubeConverter::Helpers
{
case FileType::MP4:
return ".mp4";
case FileType::MOV:
return ".mov";
case FileType::AVI:
return ".avi";
case FileType::WEBM:
return ".webm";
case FileType::MP3:
return ".mp3";
case FileType::WAV:
return ".wav";
case FileType::WMA:
return ".wma";
case FileType::OGG:
return ".ogg";
case FileType::FLAC:
return ".flac";
Expand All @@ -59,13 +48,9 @@ namespace NickvisionTubeConverter::Helpers
{
return FileType::MP4;
}
else if(sToLower.find("mov") != std::string::npos)
else if(sToLower.find("webm") != std::string::npos)
{
return FileType::MOV;
}
else if(sToLower.find("avi") != std::string::npos)
{
return FileType::AVI;
return FileType::WEBM;
}
else if(sToLower.find("mp3") != std::string::npos)
{
Expand All @@ -75,14 +60,6 @@ namespace NickvisionTubeConverter::Helpers
{
return FileType::WAV;
}
else if(sToLower.find("wma") != std::string::npos)
{
return FileType::WMA;
}
else if(sToLower.find("ogg") != std::string::npos)
{
return FileType::OGG;
}
else if(sToLower.find("flac") != std::string::npos)
{
return FileType::FLAC;
Expand All @@ -99,18 +76,12 @@ namespace NickvisionTubeConverter::Helpers
{
case FileType::MP4:
return false;
case FileType::MOV:
return false;
case FileType::AVI:
case FileType::WEBM:
return false;
case FileType::MP3:
return true;
case FileType::WAV:
return true;
case FileType::WMA:
return true;
case FileType::OGG:
return true;
case FileType::FLAC:
return true;
}
Expand All @@ -122,18 +93,12 @@ namespace NickvisionTubeConverter::Helpers
{
case FileType::MP4:
return true;
case FileType::MOV:
return true;
case FileType::AVI:
case FileType::WEBM:
return true;
case FileType::MP3:
return false;
case FileType::WAV:
return false;
case FileType::WMA:
return false;
case FileType::OGG:
return false;
case FileType::FLAC:
return false;
}
Expand Down
16 changes: 1 addition & 15 deletions models/configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@

namespace NickvisionTubeConverter::Models
{
using namespace NickvisionTubeConverter::Models::Update;

Configuration::Configuration() : m_configDir(std::string(getpwuid(getuid())->pw_dir) + "/.config/Nickvision/NickvisionTubeConverter/"), m_currentYtDlpVersion("0.0.0"), m_maxNumberOfActiveDownloads(5), m_previousSaveFolder(""), m_previousFileFormat(0)
Configuration::Configuration() : m_configDir(std::string(getpwuid(getuid())->pw_dir) + "/.config/Nickvision/NickvisionTubeConverter/"), m_maxNumberOfActiveDownloads(5), m_previousSaveFolder(""), m_previousFileFormat(0)
{
if (!std::filesystem::exists(m_configDir))
{
Expand All @@ -22,7 +20,6 @@ namespace NickvisionTubeConverter::Models
try
{
configFile >> json;
setCurrentYtDlpVersion({ json.get("CurrentYtDlpVersion", "0.0.0").asString() });
setMaxNumberOfActiveDownloads(json.get("MaxNumberOfActiveDownloads", 5).asInt());
setPreviousSaveFolder(json.get("PreviousSaveFolder", "").asString());
setPreviousFileFormat(json.get("PreviousFileFormat", 0).asInt());
Expand All @@ -31,16 +28,6 @@ namespace NickvisionTubeConverter::Models
}
}

const Version& Configuration::getCurrentYtDlpVersion() const
{
return m_currentYtDlpVersion;
}

void Configuration::setCurrentYtDlpVersion(const Version& currentYtDlpVersion)
{
m_currentYtDlpVersion = currentYtDlpVersion;
}

int Configuration::getMaxNumberOfActiveDownloads() const
{
return m_maxNumberOfActiveDownloads;
Expand Down Expand Up @@ -77,7 +64,6 @@ namespace NickvisionTubeConverter::Models
if (configFile.is_open())
{
Json::Value json;
json["CurrentYtDlpVersion"] = getCurrentYtDlpVersion().toString();
json["MaxNumberOfActiveDownloads"] = getMaxNumberOfActiveDownloads();
json["PreviousSaveFolder"] = getPreviousSaveFolder();
json["PreviousFileFormat"] = getPreviousFileFormat();
Expand Down
4 changes: 0 additions & 4 deletions models/configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@
#define CONFIGURATION_H

#include <string>
#include "update/updateconfig.h"

namespace NickvisionTubeConverter::Models
{
class Configuration
{
public:
Configuration();
const Update::Version& getCurrentYtDlpVersion() const;
void setCurrentYtDlpVersion(const Update::Version& currentYtDlpVersion);
int getMaxNumberOfActiveDownloads() const;
void setMaxNumberOfActiveDownloads(int maxNumberOfActiveDownloads);
const std::string& getPreviousSaveFolder() const;
Expand All @@ -22,7 +19,6 @@ namespace NickvisionTubeConverter::Models

private:
std::string m_configDir;
Update::Version m_currentYtDlpVersion;
int m_maxNumberOfActiveDownloads;
std::string m_previousSaveFolder;
int m_previousFileFormat;
Expand Down
32 changes: 32 additions & 0 deletions models/datadownloadscolumns.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include "datadownloadscolumns.h"

namespace NickvisionTubeConverter::Models
{
DataDownloadsColumns::DataDownloadsColumns()
{
add(m_colID);
add(m_colPath);
add(m_colFileType);
add(m_colUrl);
}

const Gtk::TreeModelColumn<unsigned int>& DataDownloadsColumns::getColID() const
{
return m_colID;
}

const Gtk::TreeModelColumn<std::string>& DataDownloadsColumns::getColPath() const
{
return m_colPath;
}

const Gtk::TreeModelColumn<std::string>& DataDownloadsColumns::getColFileType() const
{
return m_colFileType;
}

const Gtk::TreeModelColumn<std::string>& DataDownloadsColumns::getColUrl() const
{
return m_colUrl;
}
}
26 changes: 26 additions & 0 deletions models/datadownloadscolumns.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#ifndef DATADOWNLOADSCOLUMNS_H
#define DATADOWNLOADSCOLUMNS_H

#include <string>
#include <gtkmm.h>

namespace NickvisionTubeConverter::Models
{
class DataDownloadsColumns : public Gtk::TreeModel::ColumnRecord
{
public:
DataDownloadsColumns();
const Gtk::TreeModelColumn<unsigned int>& getColID() const;
const Gtk::TreeModelColumn<std::string>& getColPath() const;
const Gtk::TreeModelColumn<std::string>& getColFileType() const;
const Gtk::TreeModelColumn<std::string>& getColUrl() const;

private:
Gtk::TreeModelColumn<unsigned int> m_colID;
Gtk::TreeModelColumn<std::string> m_colPath;
Gtk::TreeModelColumn<std::string> m_colFileType;
Gtk::TreeModelColumn<std::string> m_colUrl;
};
}

#endif // DATADOWNLOADSCOLUMNS_H
Loading

0 comments on commit e210ee4

Please sign in to comment.