summaryrefslogtreecommitdiff
path: root/gtk2_ardour/video_copy_dialog.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/video_copy_dialog.cc')
-rw-r--r--gtk2_ardour/video_copy_dialog.cc270
1 files changed, 0 insertions, 270 deletions
diff --git a/gtk2_ardour/video_copy_dialog.cc b/gtk2_ardour/video_copy_dialog.cc
deleted file mode 100644
index 27926227a4..0000000000
--- a/gtk2_ardour/video_copy_dialog.cc
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- Copyright (C) 2010 Paul Davis
- Author: Robin Gareus <robin@gareus.org>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-#ifdef WITH_VIDEOTIMELINE
-
-#include <cstdio>
-#include <string>
-#include <sstream>
-#include <iomanip>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <sigc++/bind.h>
-#include <libgen.h>
-
-#include "pbd/error.h"
-#include "pbd/convert.h"
-#include "gtkmm2ext/utils.h"
-#include "ardour/session_directory.h"
-#include "ardour/profile.h"
-#include "ardour/template_utils.h"
-#include "ardour/session.h"
-#include "ardour_ui.h"
-#include "gui_thread.h"
-
-#include "utils_videotl.h"
-#include "utils.h"
-#include "opts.h"
-#include "video_copy_dialog.h"
-#include "i18n.h"
-
-using namespace Gtk;
-using namespace std;
-using namespace PBD;
-using namespace ARDOUR;
-
-VideoCopyDialog::VideoCopyDialog (Session* s, std::string infile)
- : ArdourDialog (_("Import Video File "))
- , infn (infile)
- , path_label (_("Output File:"), Gtk::ALIGN_LEFT)
- , browse_button (_("Browse"))
- , copy_button (_("Copy/Embed"))
- , abort_button (_("Abort"))
- , progress_label ()
-{
- set_session (s);
- autostart = false;
-
- set_name ("VideoCopyDialog");
- set_position (Gtk::WIN_POS_MOUSE);
- set_modal (true);
- set_skip_taskbar_hint (true);
- set_resizable (false);
- p_connection = sigc::connection();
-
- std::string dstdir = video_dest_dir(_session->session_directory().video_path(), video_get_docroot(Config));
- std::string dstfn = dstdir + G_DIR_SEPARATOR + Glib::path_get_basename(infile);
- path_entry.set_text (dstfn);
-
- path_hbox = manage (new HBox);
- path_hbox->pack_start (path_label, false, false, 3);
- path_hbox->pack_start (path_entry, true, true, 3);
- path_hbox->pack_start (browse_button, false, false, 3);
- browse_button.set_name ("PaddedButton");
- path_entry.set_width_chars(38);
-
- browse_button.signal_clicked().connect (sigc::mem_fun (*this, &VideoCopyDialog::open_browse_dialog));
- copy_button.signal_clicked().connect (sigc::mem_fun (*this, &VideoCopyDialog::launch_copy));
- abort_button.signal_clicked().connect (sigc::mem_fun (*this, &VideoCopyDialog::abort_clicked));
-
- progress_box = manage (new VBox);
- progress_box->pack_start (progress_label, false, false);
- progress_box->pack_start (pbar, false, false);
- progress_box->pack_start (abort_button, false, false);
-
- get_vbox()->pack_start (*path_hbox, false, false);
- get_vbox()->pack_start (*progress_box, false, false);
-
-
- cancel_button = add_button (Stock::CANCEL, RESPONSE_CANCEL);
- get_action_area()->pack_start (copy_button, false, false);
- show_all_children ();
- progress_box->hide();
-}
-
-VideoCopyDialog::~VideoCopyDialog ()
-{
-}
-
-void
-VideoCopyDialog::setup_non_interactive_copy (std::string destfn)
-{
- if (destfn.empty()) {
- std::string dstdir = video_dest_dir(_session->session_directory().video_path(), video_get_docroot(Config));
- outfn= dstdir + G_DIR_SEPARATOR + Glib::path_get_basename(infn);
- } else {
- outfn=destfn;
- }
- autostart=true;
-}
-
-void
-VideoCopyDialog::on_show ()
-{
- if (autostart) {
- Glib::signal_timeout().connect_once (sigc::mem_fun(*this, &VideoCopyDialog::launch_copy), 200);
- }
- Dialog::on_show ();
-}
-
-void
-VideoCopyDialog::abort_clicked ()
-{
- aborted = true;
-}
-
-gint
-VideoCopyDialog::progress_timeout ()
-{
- if (p_tot == 0) {
- pbar.set_pulse_step(.5);
- pbar.pulse();
- return 1;
- }
- pbar.set_fraction ((double)p_cur / (double) p_tot);
- return 1;
-}
-
-void*
-video_copy_thread (void *arg)
-{
- VideoCopyDialog *cvd = static_cast<VideoCopyDialog*>(arg);
- cvd->do_copy();
- return 0;
-}
-
-
-void
-VideoCopyDialog::launch_copy ()
-{
- if (!autostart) {
- outfn = path_entry.get_text();
- }
- if (!confirm_video_outfn(outfn)) { return; }
- p_cur = 0; p_tot = 0;
-
- p_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &VideoCopyDialog::progress_timeout), 80);
-
- pbar.set_size_request(300,-1);
- progress_box->show();
- path_hbox->hide();
- cancel_button->hide();
- copy_button.hide();
- aborted = false;
- finished = false;
-
- pthread_create(&thread, NULL, video_copy_thread ,this);
- while (!finished) {
- if (gtk_events_pending()) {
- gtk_main_iteration ();
- } else {
- usleep (10000);
- }
- }
- pthread_join(thread, NULL);
-
- p_connection.disconnect();
-
- if (aborted) {
- Gtk::Dialog::response(RESPONSE_CANCEL);
- } else {
- Gtk::Dialog::response(RESPONSE_ACCEPT);
- }
-}
-
-void
-VideoCopyDialog::do_copy ()
-{
- progress_label.set_text (_("Linking File."));
-
- unlink (outfn.c_str());
-
- bool try_hardlink = false; // Config->get_try_link_for_embed(); /* XXX */
- struct stat sb;
- if (lstat (infn.c_str(), &sb) == 0) {
- p_tot = sb.st_size;
- /* don't hardlink a symlink */
- if ((sb.st_mode&S_IFMT) == S_IFLNK) {
- try_hardlink = false;
- if (stat (infn.c_str(), &sb) == 0) {
- p_tot = sb.st_size;
- }
- }
- } else {
- /* Can not stat() input file */
- warning << _("Can not read input file.") << endmsg;
- aborted=true;
- finished=true;
- return;
- }
-
- if ( !try_hardlink || link(infn.c_str(), outfn.c_str()) ) {
- /* hard-link failed , try copy */
- progress_label.set_text (_("Copying File."));
- int infd = open (infn.c_str(), O_RDONLY);
- int outfd = open (outfn.c_str(), O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
- if (infd <0 || outfd <0) {
- if (infd != -1) close(infd);
- warning << _("Can not open files for copy.") << endmsg;
- aborted=true;
- finished=true;
- return;
- }
- char buffer[BUFSIZ];
- ssize_t nrb, ret;
- while ((nrb = read(infd, buffer, BUFSIZ)) > 0 && nrb != -1 ) {
- ret = write(outfd, buffer, nrb);
- if(ret != nrb || aborted) {
- warning << _("File copy failed.") << endmsg;
- unlink(outfn.c_str());
- aborted=true;
- finished=true;
- return;
- }
- p_cur+=ret;
- }
- }
- finished=true;
- return;
-}
-
-void
-VideoCopyDialog::open_browse_dialog ()
-{
- Gtk::FileChooserDialog dialog(_("Video File Copy Destination"), Gtk::FILE_CHOOSER_ACTION_SAVE);
- dialog.set_filename (path_entry.get_text());
-
- dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
- dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
-
- int result = dialog.run();
-
- if (result == Gtk::RESPONSE_OK) {
- std::string filename = dialog.get_filename();
-
- if (filename.length()) {
- path_entry.set_text (filename);
- }
- }
-}
-#endif /* WITH_VIDEOTIMELINE */