Exemplo n.º 1
0
void leave_archive(struct_panel *panel)
{
  char *iter;
  TRACE("Leaving archive '%s' to dir '%s'\n",panel->archive_stack[panel->archive_depth], panel->path);

  panel->archive_depth=panel->archive_depth-1;
  archive_list_free(panel->archive_list);
  if (panel->archive_depth > 0) /* Если мы ешё не достигли ФС */
  {
    (void)remove(panel->archive_stack[panel->archive_depth+1]); /* То удаляем архив который покинули - он был вложеным! */
    enter_archive(panel->archive_stack[panel->archive_depth], panel, FALSE);
  }
  else
  {
    update(panel); /* Обновляем список файлов */
    gtk_label_set_text (GTK_LABEL(panel->path_label), panel->path); /* Пишем текущий каталог в поле снизу */
  }
  TRACE("move_selection call '%s'\n",panel->archive_stack[panel->archive_depth+1]);
  iter=iter_from_filename (panel->archive_stack[panel->archive_depth+1], panel);
  move_selection(iter, panel); /* И выбираем файл архива курсором FIXME: Сработает только если покинутый вложенный архив в корне родительского архива, или же при покидании архива в реальную ФС. FIXME: этот прискорбный баг породит глюки при автоматическом переходе в следующий каталог! */
  free(iter);
  panel->archive_stack[panel->archive_depth+1][0]='\0'; /*Затираем имя покидаемого архива в стеке */
  if (panel == &top_panel)
  {
    write_archive_stack("top_panel.archive_stack", &top_panel);
    write_config_string("top_panel.archive_cwd", ""); /* FIXME: По идее надо бы завести ещё и стек путей в архивах, но это геморно( */
  }
  else
  {
    write_archive_stack("bottom_panel.archive_stack", &bottom_panel);
    write_config_string("bottom_panel.archive_cwd", "");
  }
}
Exemplo n.º 2
0
void config_save(char* filename, PCONFIGURATION config) {
  FILE* fd = fopen(filename, "w");
  if (fd == NULL) {
    fprintf(stderr, "Can't open configuration file: %s\n", filename);
    exit(EXIT_FAILURE);
  }

  if (config->stream.width != 1280)
    write_config_int(fd, "width", config->stream.width);
  if (config->stream.height != 720)
    write_config_int(fd, "height", config->stream.height);
  if (config->stream.fps != 60)
    write_config_int(fd, "fps", config->stream.fps);
  if (config->stream.bitrate != -1)
    write_config_int(fd, "bitrate", config->stream.bitrate);
  if (config->stream.packetSize != 1024)
    write_config_int(fd, "packetsize", config->stream.packetSize);
  if (!config->sops)
    write_config_bool(fd, "sops", config->sops);
  if (config->localaudio)
    write_config_bool(fd, "localaudio", config->localaudio);

  if (strcmp(config->app, "Steam") != 0)
    write_config_string(fd, "app", config->app);

  fclose(fd);
}
Exemplo n.º 3
0
void archive_enter_subdir(const char *subdir, struct_panel *panel)
{
  char *path, *temp;
  TRACE("archive_enter_subdir '%s'\n", subdir);
  temp=panel->archive_cwd;
  panel->archive_cwd=xconcat(temp, subdir);
  free(temp);
  if ( panel == &top_panel )
    write_config_string("top_panel.archive_cwd", panel->archive_cwd);
  else
    write_config_string("bottom_panel.archive_cwd", panel->archive_cwd);
  update(panel); /* Перерисовываем список */
  move_selection("0", panel); /* Выбираем первый элемент */
  path=xconcat_path_file(panel->archive_stack[panel->archive_depth], panel->archive_cwd);
  gtk_label_set_text (GTK_LABEL(panel->path_label), path); /* Пишем имя архива с путём в поле снизу */
  free(path);
}
Exemplo n.º 4
0
void archive_go_upper(struct_panel *panel) /* Переходим на уровень выше внутри архива */
{
  if (panel->archive_cwd[0] == '\0') /* Если на верхнем уровне архива - то покидаем его*/
    leave_archive(panel);
  else /* А если нет - */
  {
    char *slash=NULL, *path, *iter;
    trim_line(panel->archive_cwd); /* Удяляем последний символ (слэш) из текущего имени */
    archive_cwd_prev=xconcat(basename(panel->archive_cwd),"/");
    slash=strrchr(panel->archive_cwd, '/'); /* Ищем последний слэш в пути */
    if (slash==NULL) /* Если значение пути вырождается в NULL (слэша больше не оказалось) то делаем archive_cwd нулевой строкой*/
      panel->archive_cwd[0]='\0';
    else /* А иначе просто обрезаем путь в архиве на один уровень */
      *(slash+1)='\0';

    if (panel == &top_panel)
    {
      write_config_string("top_panel.archive_cwd", panel->archive_cwd);
      top_panel.last_name[0]='\0';
      write_config_string("top_panel.last_name", top_panel.last_name);
    }
    else
    {
      write_config_string("bottom_panel.archive_cwd", panel->archive_cwd);
      bottom_panel.last_name[0]='\0';
      write_config_string("bottom_panel.last_name", bottom_panel.last_name);
    }
    update(panel); /* Перерисовываем список */
    iter=iter_from_filename (archive_cwd_prev, panel);
    move_selection(iter, panel); /* И выделяем предыдущий каталог в архиве */
    free(iter);
    path=xconcat_path_file(panel->archive_stack[panel->archive_depth],panel->archive_cwd);
    gtk_label_set_text (GTK_LABEL(panel->path_label), path); /* Пишем имя архива с путём в поле снизу */
    free(path);
  }
}
Exemplo n.º 5
0
int find_next_archive_directory(struct_panel *panel)
{
  char **directories_list;
  int i=0;
  char *slash=NULL, *up_dir;
  up_dir=strdup(panel->archive_cwd);
  trim_line(up_dir); /* Удяляем последний символ (слэш) из текущего имени */
  slash=strrchr(up_dir, '/'); /* Ищем последний слэш в пути */
  if (slash==NULL) /* Если значение пути вырождается в NULL (слэша больше не оказалось) */
    up_dir[0]='\0'; /* То делаем archive_cwd нулевой строкой */
    else /* А иначе просто обрезаем путь в архиве на один уровень */
      *(slash+1)='\0';
    directories_list=archive_get_directories_list(panel, up_dir);
  while (TRUE)
  {
    if (directories_list[i]==NULL)
    {
      free(directories_list);
      return FALSE; /* Если достигли конца списка */
    }
    else
    {
      #ifdef debug_printf
      printf ("Checking '%s', need '%s'\n", directories_list[i], panel->archive_cwd);
      #endif
    }
    if (strcmp (directories_list[i], panel->archive_cwd) == 0) /* Сравниваем строку с текущим каталогом */
    {
      if (directories_list[i+1][0] == '\0') /* Если следующая строка пустая - */
      {
        #ifdef debug_printf
        printf ("Matched dirname '%s', stay here\n", directories_list[i]);
        #endif
        free(directories_list[i]);
        free(directories_list[i+1]);
        free(directories_list);
        return FALSE;  /* То возвращаем что переход не удался */
      }
      else
      {
        free(panel->archive_cwd);
        panel->archive_cwd=strdup(directories_list[i+1]);
        if ( panel == &top_panel )
          write_config_string("top_panel.archive_cwd", panel->archive_cwd);
        else
          write_config_string("bottom_panel.archive_cwd", panel->archive_cwd);
        #ifdef debug_printf
        printf("JUMPING TO %s\n", panel->archive_cwd);
        #endif

        /*Очищаем оставшийся список каталогов*/
        do free(directories_list[i++]);
        while (directories_list[i] != NULL);
        free(directories_list);

        return TRUE;  /* Иначе возвращаем успех */
      }
    }
    #ifdef debug_printf
    printf ("NOT matched dirname '%s', need '%s'\n", directories_list[i], panel->archive_cwd);
    #endif
    free(directories_list[i]);
    i++;
  }
  #ifdef debug_printf
  printf ("Dirname not matched!\n");
  #endif

  /*Очищаем оставшийся список каталогов*/
  do free(directories_list[i++]);
  while (directories_list[i] != NULL);
  free(directories_list);

  return FALSE; /* И возвращаем значение текущего каталога */
}