Напоминалка о днях рождений, живущая в трее

Изображение пользователя Condor.

В соответствии со старой доктриной ("Если ты не нашёл устраивающей тебя программы под linux, - нипиши её сам") решил попробовать себя на новом поприще и написал простенькую программку - напоминалку, болтающуюся в трее.
Мне нужна была простая маленькая программа, которая бы напоминала мне о днях рождений друзей и знакомых (даты которых помнить просто не реально), но ничего подходящего я не нашел.
Итак, я написал программу со следующими нехитрыми возможностями:

  • информирование о предстоящих событиях за 1-5 дней;
  • информирование о наступившем событиях;
  • информирование о возрасте события, при указании года начала события;
  • сортировка по дате событий из журнала.

Если кого-то сможет заинтересовать данная разработка, то милости прошу http://software.nisel.net/index.php/reminder.html.
Может, кто, меня мимоходом научит собирать deb пакеты? а то какой-то mustdie-way получается...
Я только встаю на путь истинный и только начинаю программировать под linux, так что прошу тапками в меня не кидаться...
Так же хотел бы выразить благодарность Fatalist'у с нашего форума, который консультировал меня и помогал мне с конструкциями Qt.

Комментарии (123)

0
DarkneSS - 19 Апрель, 2010 - 11:43
Изображение пользователя DarkneSS.

Потестим!

0
dyug - 19 Апрель, 2010 - 12:07

нет, конечно это вещь полезная, только я для этого приспособил гугул календарь.. :-)
это оказалось быстрее.
А учитывая мои 4 машины - так еще и намного удобнее. :-)

Это не в обиду - это как вариант решения проблемы. :-)

0
Condor - 19 Апрель, 2010 - 12:18
Изображение пользователя Condor.

Была у меня такая мысля, сделать сетевую версию, может и сделаю, когда придумаю как...

+1
dyug - 19 Апрель, 2010 - 12:31

ага, из серии где взять сетевое хранилище, чтоб работало где попало, что делать, если под руками есть только кпк/телефон/смартофон на винмобиле/симбиан/S40/андроид/еще черт знает что....
и так далее... :-)
Это из серии - а что будем делать дальше? :-))

0
Гость - 19 Апрель, 2010 - 13:07

Уговорил :0))
Сетевой версии не будет :0))

0
Жюстина - 19 Апрель, 2010 - 13:37
Изображение пользователя Жюстина.

Очень хочется такую программулину, потому что часто забываю всякие даты.

И deb-ки я училась однажды собирать по руководству, даже для uTorrent сделала. :D

Только тут чтоб дебку сделать нужно чтоб файлик data.dat был всё таки где-то в домашнем каталоге, а то программа будет запускаться из /bin или /usr/bin, не из под рута же её тогда запускать чтоб записывать в эти каталоги файл data.dat. Можно конечно симлинками его и распределением прав сделать, но это как-то не симпатишно получится.

0
Condor - 19 Апрель, 2010 - 20:10
Изображение пользователя Condor.

Я тоже подумывал в домашнюю директорию файл журнала кидать, чтобы можно было нормальный установщик сделать, но если положить его в корень домашней директории, то при запуске вручную, всё в порядке, а если кидать в автозагрузку, то программа почему-то не видит файл журнала и начинает ругаться, вот фиг знает почему...
Попробую ещё покапать в сторону разделения мух и котлет...
За ссылку спасибо, посмотрю...

+1
DarkneSS - 19 Апрель, 2010 - 23:21
Изображение пользователя DarkneSS.

Положите, пожалуйста, не в ~/ а в ~/.config/
ИМХО так будет симпатичней.

0
Condor - 20 Апрель, 2010 - 06:48
Изображение пользователя Condor.

Но, если туда положить, тогда будет неудобно править события, для этого придётся делать скрытые файлы видимыми, что не есть очень красиво, да и для новичков будет тяжеловато...

0
DarkneSS - 20 Апрель, 2010 - 09:29
Изображение пользователя DarkneSS.

Хозяин - барин!

+1
DarkneSS - 19 Апрель, 2010 - 20:06
Изображение пользователя DarkneSS.

Распаковал, базу наваял, закинул в автозагрузку - доволен. Спасибо автору!

0
DarkneSS - 19 Апрель, 2010 - 23:41
Изображение пользователя DarkneSS.

Работает под amd64, наверно, потому что установлен пакет ia32-libs.

+1
Condor - 20 Апрель, 2010 - 06:50
Изображение пользователя Condor.

Спасибо за информацию.
Как оказалось, ещё можно на флешке носить, и прямо с неё запускать.

+1
DarkneSS - 20 Апрель, 2010 - 09:28
Изображение пользователя DarkneSS.

Portable =)

+2
Condor - 20 Апрель, 2010 - 13:51
Изображение пользователя Condor.

Сделал новую версию.
Теперь файл журнала лежит в ~/.config/data.dat чтобы не мешался нигде (DarkneSS однако оказался прав с идеей куда бы его запихнуть), и для удобства редактирования журнала добавлен пункт редактирования в меню программы, который сам открывает файл журнала в текстовом редакторе, установленным, по-умолчанию.
Таким макаром, удалена необходимость знания пользователем, гдё находится его журнал и открытия его для редактирования вручную.
Сделал наконец-то deb пакет, но возникла новая проблема, при добавлении пункта меню, добавления не происходит.
Пакет собирал по этому руководству http://habrahabr.ru/blogs/linux/78094/.
В меню прописал
?package(deb):needs="text" section="Applications/Accesories" title="hzs reminder" command="/usr/bin/reminder"
Ничего не меняется и не добавляется.
Кто-нибудь подскажет, как формировать меню для программы?

Выложил новую версию на сайте.
Пока можно потестить, кому интересно.

0
DarkneSS - 20 Апрель, 2010 - 14:18
Изображение пользователя DarkneSS.

Ещё пару предложений. Базу назвать как-нибудь очевидней, например, reminder.dat. И такая фишка: прога ищет reminder.dat сначала в своей папке (portable), если не находит, то ищет в ~/.config/

+1
Condor - 20 Апрель, 2010 - 16:56
Изображение пользователя Condor.

Я тоже уже так подумал, в следующей версии сделаю такой вариант.
Сейчас бъюсь с созданием пакета, меню не хочет создаваться...
Гы, у меня самая быстро развивающаяся программа в мире, новые версии выходят по несколько раз на дню :0))

0
Chibiko - 20 Апрель, 2010 - 15:39
Изображение пользователя Chibiko.

Предлагаю в программе сделать выбор загружаемых смайликов 8)
Типа - чтобы можно было менять "скин" программы в трее 8)

0
Condor - 20 Апрель, 2010 - 16:54
Изображение пользователя Condor.

А смысл...
По идее вообще можно не пользоваться этой менюшкой, всё управление на левой и средней кнопках мыши...

0
Chibiko - 21 Апрель, 2010 - 09:50
Изображение пользователя Chibiko.

В плане - в трее висят страшные смайлики. Мне вот нравятся анимешные. Вот если в трей можно было бы свои смайлики ставить - было бы интереснее. Вот так вот, я не про менюшки...

+1
Condor - 20 Апрель, 2010 - 17:37
Изображение пользователя Condor.

Выпустил новую версию программы, с учётом пожеланий DarkneSS'a.
База переименована в reminder.dat.
И такая фишка: прога ищет reminder.dat сначала в своей папке (portable), если не находит, то ищет в ~/.config/ тоже реализована.
В пункте о программе сообщается режим запущенной программы portable/standalone.
Буду продолжать мучать сборку пакета.

+1
DarkneSS - 20 Апрель, 2010 - 17:53
Изображение пользователя DarkneSS.

Круть. Я просто счастлив =)

0
Condor - 20 Апрель, 2010 - 18:32
Изображение пользователя Condor.

Не, ты будешь счастлив, когда я тебе, как самому активному тестировщику, выпишу именную версию :0))

0
DarkneSS - 20 Апрель, 2010 - 18:44
Изображение пользователя DarkneSS.

Плохой я тестировщик: ни одного багрепорта... С другой стороны - ты хороший программист =)
В чём фишка именной версии?

+1
Condor - 20 Апрель, 2010 - 20:01
Изображение пользователя Condor.

В том, что в пункте About будет надпись "special edition for DarkneSS".

0
DarkneSS - 20 Апрель, 2010 - 21:53
Изображение пользователя DarkneSS.

"Самому привередливому пользователю" =)

+1
Condor - 20 Апрель, 2010 - 21:59
Изображение пользователя Condor.

Ага.
Если у тебя иссякнут идеи о усовершенствовании программы, значит уже нечего будет добавить :0))
Тут поглядываю уже в сторону создания своего репозитария...

0
DarkneSS - 20 Апрель, 2010 - 23:12
Изображение пользователя DarkneSS.

Уже иссякли!

0
magzcheg - 28 Апрель, 2010 - 09:43
Изображение пользователя magzcheg.

А что если портэбл версия базы старее чем та что в ~/.config/ ? Или если эти 2 файла различаются? Было бы здорово иметь возможность автоматически, (но с запросом) обьединять \ синхронизировать их. =)

0
Condor - 20 Апрель, 2010 - 20:03
Изображение пользователя Condor.

Допилил deb пакет.
Программа теперь добавляется в пункт меню Office.
Последнюю на данный момент версию и описание можно найти на http://software.nisel.net/index.php/reminder.html.
Буду рад услышать отзывы и предложения.

0
vap - 21 Апрель, 2010 - 11:06
Изображение пользователя vap.

А можешь сделать чтоб из Kaddress брал?

0
Condor - 21 Апрель, 2010 - 13:41
Изображение пользователя Condor.

Kaddress это что?
И если в нём хранятся даты, разве у него нет функции напоминания?
Я под гномом сижу :0))

+1
Vlad_W_1999 - 22 Апрель, 2010 - 02:56

Я под гномом сижу

Вот это и заметно. Под KDE есть KAlarm.

0
Condor - 22 Апрель, 2010 - 06:51
Изображение пользователя Condor.

Куча, просто тонна настроек.
Зачем? Мне надо простую и лёгкую программу, чтобы висела в трее.
Есть ли возможность запихать KAlarm в трей я не знаю.

0
Vlad_W_1999 - 25 Апрель, 2010 - 13:17

Несколько опешил от тезиса о настройках. Вошёл посмотреть. Странно... Под маздаем даже у штатного шедулера настроек больше. Не говоря уже о том же nncron. И в трее KAlarm прекрасно себя чувствует.

Впрочем, на вкус и цвет. Чем больше будет альтернатив, тем лучше.

0
DarkneSS - 22 Апрель, 2010 - 20:18
Изображение пользователя DarkneSS.

Разве плохо, что человек написал свою прогу?

0
dyug - 23 Апрель, 2010 - 09:23

да нет, хорошо.
Только как показывает моя практика, мне проще найти уже существующий аналог :-)

на всякий случай: ключевые слова - "моя практика" "мне проще" :-)

0
Condor - 25 Апрель, 2010 - 09:20
Изображение пользователя Condor.

Ну, кому проще найти, а кому проще написать.
А если бы разработчики не писали чего-то своего, то из чего бы тогда пользователи выбирали?
А тут есть выбор, моя программа и те программы, которые реализуют примерно этот же функционал.

0
dyug - 25 Апрель, 2010 - 19:37

dyug - 23 Апрель, 2010 - 08:23
да нет, хорошо.
Только как показывает моя практика, мне проще найти уже существующий аналог :-)

на всякий случай: ключевые слова - "моя практика" "мне проще" :-)

Я же написал. знал что именно это я и услышу.
Прочти еще раз клчевые слова, которые я повторил специально.

0
Vlad_W_1999 - 25 Апрель, 2010 - 13:19

Замечательно, что человек написал свою прогу! Я же не об этом говорил, а о том, что она для гнома.

0
Condor - 26 Апрель, 2010 - 11:47
Изображение пользователя Condor.

Она на Qt написана, если чего, так что она "и для гнома" :0))
Да и вообще там форма-то скрыта, то есть интерфейса как такового нету, а в трее всплывающие сообщения примерно одинаково выглядят.

0
Condor - 22 Апрель, 2010 - 14:33
Изображение пользователя Condor.

Выпустил новую версию.
Теперь программа локализована и имеет русскоязычный интерфейс.

0
Wander - 26 Апрель, 2010 - 19:43
Изображение пользователя Wander.

А где исходники? - Или это проприетарное ПО?
Хотелось бы посмотреть, - я надеюсь ты не против?
Выложи плиз.

0
Condor - 27 Апрель, 2010 - 06:22
Изображение пользователя Condor.

Это основной код. Остальное и так понятно.
#include <QtGui>
#include <QDate>
#include <QString>
#include <QProcess>
#include <QByteArray>
#include <QTextStream>
#include <QMessageBox>
#include <QDesktopServices>

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    setupUi(this);
    //****************** Create TrayIcon Menu ***************************************

    sortAction = new QAction(tr("&Sort events list"), this);
    sortAction->setIcon(QIcon(":ico/sort.png"));
    connect(sortAction, SIGNAL(triggered()), this, SLOT(SortDataFile()));

    launchAction = new QAction(tr("&Launch editor"), this);
    launchAction->setIcon(QIcon(":ico/edit.png"));
    connect(launchAction, SIGNAL(triggered()), this, SLOT(LaunchEditor()));

    siteAction = new QAction(tr("&Go to site"), this);
    siteAction->setIcon(QIcon(":ico/gosite.png"));
    connect(siteAction, SIGNAL(triggered()), this, SLOT(GoSite()));

    aboutAction = new QAction(tr("&About"), this);
    aboutAction->setIcon(QIcon(":ico/about.png"));
    connect(aboutAction, SIGNAL(triggered()), this, SLOT(ShowAbout()));

    quitAction = new QAction(tr("&Quit"), this);
    quitAction->setIcon(QIcon(":ico/quit.png"));
    connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));

    trayIconMenu = new QMenu(this);

    trayIconMenu->addAction(sortAction);
    trayIconMenu->addAction(launchAction);
    trayIconMenu->addAction(siteAction);
    trayIconMenu->addAction(aboutAction);
    trayIconMenu->addSeparator();
    trayIconMenu->addAction(quitAction);

    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setContextMenu(trayIconMenu);

    //********************************************************************************

    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
            this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));

    trayIcon->setIcon(QIcon(":ico/normal.png"));
    trayIcon->show();

    //datafile = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);
    datafile = qApp->applicationDirPath();
    datafile.append("/reminder.dat");
    QFile cf(datafile);
    if (!cf.exists())
    {
        datafile = QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
        datafile.append("/.config/reminder.dat");
        QFile cf(datafile);
        if (!cf.exists())
        {
            QStringList list;
            list.append("03.03;День рождения разработчика hzs reminder;1983\n");
            list.append("04.10;Дата создания hzs reminder;2010\n");
            cf.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
            QTextStream out(&cf);
            for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
                out << *it;
            cf.close();
        }
        portableapp = false;
    }
    else
        portableapp = true;
    EventsSelectione();
    if (eventscount > 1)
        trayIcon->showMessage(tr("hzs reminder:"), tr("Events found"));
    if (eventscount == 1)
        trayIcon->showMessage(tr("hzs reminder:"), tr("Event found"));
    if (eventscount == 0)
        trayIcon->showMessage(tr("hzs reminder:"), tr("No events found"));
    prevdate = QDate::currentDate();
    startTimer(60000 * 60);
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (trayIcon->isVisible()) {
        hide();
        event->ignore();
    }
}

void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
    switch (reason)
    {
        case QSystemTrayIcon::Trigger:
        {
            EventsSelectione();
            break;
        }

        case QSystemTrayIcon::MiddleClick:
        {
            qApp->quit();
            break;
        }
     }
}

void MainWindow::SortDataFile()
{
    QFile cf(datafile);
    if (!cf.exists())
    {
        trayIcon->showMessage(tr("Error sorting events"), tr("Data file 'reminder.dat' not found!\nCreate valid file 'reminder.dat' and restart programm"));
    }
    else
    {
        QString line;
        QStringList list;
        cf.open(QIODevice::ReadOnly);
        while (!cf.atEnd())
        {
            line = cf.readLine();
            list.append(line);
        }
        cf.close();
        list.sort();
        cf.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
        QTextStream out(&cf);
        for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
            out << *it;
        cf.close();
        trayIcon->showMessage("hzs reminder:", tr("Events sorted by dates"));
    }
}

void MainWindow::EventsSelectione()
{
    int currentmonth, currentday, currentyear;
    eventscount = 0;
    QDate date = QDate::currentDate();
    QDate basedate;
    currentmonth = date.month();
    currentday = date.day();
    currentyear = date.year();
    QFile cf(datafile);
    if (!cf.exists())
    {
        trayIcon->showMessage(tr("Error loading programm"), tr("Data file 'reminder.dat' not found!\nCreate valid file 'reminder.dat' and restart programm"));
    }
    else
    {
        QString lines = "";
        QString line, templine;
        QString baseevent;
        QStringList list;
        int baseyear, basemonth, baseday, dot, semi, lastsemi, daysto, yearsto;
        bool icotoday = false;
;
        cf.open(QIODevice::ReadOnly);
        while (!cf.atEnd())
        {
            line = cf.readLine();
            dot = line.indexOf(".");
            semi = line.indexOf(";");
            lastsemi = line.lastIndexOf(";");
            basemonth = line.mid(0, dot).toInt();
            baseday = line.mid(dot + 1, semi - dot - 1).toInt();
            baseevent = line.mid(semi + 1, lastsemi - semi - 1);
            baseyear = line.mid(lastsemi + 1, line.length() - lastsemi - 2).toInt();

            if (basedate.setDate(currentyear, basemonth, baseday))
            {
                daysto = date.daysTo(basedate);
                yearsto = currentyear - baseyear;
                if(daysto <= 4 && daysto >= 0)
                {
                    if (daysto == 0)
                    {
                        lines.append(tr("Today: "));
                        icotoday = true;
                    }
                    if (daysto == 1)
                    {
                        templine.setNum(daysto);
                        lines.append(templine);
                        lines.append(tr(" day to: "));
                        trayIcon->setIcon(QIcon(":ico/soon.png"));
                    }
                    if (daysto > 1)
                    {
                        templine.setNum(daysto);
                        lines.append(templine);
                        lines.append(tr(" days to: "));
                        trayIcon->setIcon(QIcon(":ico/soon.png"));
                    }
                    lines.append(baseevent);
                    lines.append(" ");
                    if (yearsto > 0 && yearsto < 100)
                    {
                        templine.setNum(yearsto);
                        lines.append("(");
                        lines.append(templine);
                        lines.append(")");
                    }
                    lines.append("\n");
                    eventscount ++;
                }
            }
        }
        cf.close();
        if (icotoday == true)
            trayIcon->setIcon(QIcon(":ico/today.png"));
        if (eventscount > 1)
            trayIcon->showMessage(tr("hzs reminder: events found"), lines);
        if (eventscount == 1)
            trayIcon->showMessage(tr("hzs reminder: event found"), lines);
        if (eventscount == 0)
        {
            trayIcon->showMessage(tr("hzs reminder:"), tr("No events found"));
            trayIcon->setIcon(QIcon(":ico/normal.png"));
        }
    }
}

void MainWindow::ShowAbout()
{
    QString aline = tr("hzs reminder v. 2010.04.24\n© 2010 Nisel Alexander\n");//special edition for DarkneSS\n");
    if (portableapp)
        aline.append(tr("portable mode\n"));
    else
        aline.append(tr("standalone mode\n"));
    aline.append(tr("\nAdvertising:\n* Creation the internet sites;\n* Introduction Linux at the enterprises;\n"));
    aline.append(tr("* Installation Linux on servers.\nhttp://nisel.net"));
    trayIcon->showMessage(tr("About hzs reminder:"), aline);
}

void MainWindow::LaunchEditor()
{
    QString fileedit = "file:///";
    fileedit.append(datafile);
    QDesktopServices::openUrl(QUrl(fileedit, QUrl::TolerantMode));
}

void MainWindow::GoSite()
{
    QDesktopServices::openUrl(QUrl("http://software.nisel.net/index.php/reminder.html", QUrl::TolerantMode));
}

void MainWindow::timerEvent(QTimerEvent*)
{
    if (QDate::currentDate() > prevdate)
    {
        EventsSelectione();
        prevdate = QDate::currentDate();
    }
}

+1
Гость - 27 Апрель, 2010 - 12:45

Это основной код. Остальное и так понятно.
Не - ну так не делается.
Хочу забрать весь проект, посмотреть.
Это же не сложно - запаковать все тарбол и положить на том сайте, где бинарник и дебка.

ЗЫ. Или ты переживаешь за свою интеллектуальную собственность ;-)

0
Condor - 27 Апрель, 2010 - 20:54
Изображение пользователя Condor.

Гы, вот фиг его знает.
Пока что до конца не проникся идеей "совсем" свободно распространяемого :0))

0
ktchv - 27 Апрель, 2010 - 09:15
Изображение пользователя ktchv.

труЪ.

Положи её в ланчпад под систему контроля версий, это полезно. плюс там автоматическая сборка деб-ов.

0
Grenky - 28 Апрель, 2010 - 09:21
Изображение пользователя Grenky.

Как бы слить в нее все ДР из календаря гугла.

0
Condor - 28 Апрель, 2010 - 13:48
Изображение пользователя Condor.

В каком формате можно из гугла выгрузку сделать?
Может, если не сильно гиморно напишу конвертер, а может можно просто в табличном процессоре обработать.
Формат журнала в принципе по формату csv сделан и его многие табличные редакторы поддерживают.

0
Grenky - 29 Апрель, 2010 - 01:21
Изображение пользователя Grenky.

login@gmail.com.ics - то есть формат ICS
только вот я не до конца понял как выгрузить спец календарь "Дни рождения", но из основного календаря всё выгружается.
Если скрестить (синхронизация) Вашу программу с google.calendar то получится мощный инструмент для напоминания о событиях оттуда. Хотя останется всё той же маленькой програмулинкой :) Но тут думаю нужно рыть в сторону API функций.

+1
dyug - 29 Апрель, 2010 - 11:41

и в итоге возвращаемся к моему комментарию... :-)

0
Condor - 29 Апрель, 2010 - 14:12
Изображение пользователя Condor.

Хм...
На досуге завести что-ли себе календарь гугла и глянуть что там можно сделать.
Если никаких зависимостей не всплывёт, можно попробовать что-то будет сделать.

+1
RavenS - 29 Апрель, 2010 - 07:47
Изображение пользователя RavenS.

В KDE-шной программулине Kontact есть Календарь (он же KOrganizer), который все эти оповещения умеет делать. :) Там даже можно выбрать дополнительные источники для оповещения, например, "Дни рождения из адресной книги KDE", а также установить, за сколько дней перед днём рождения оповестить.
Единственное, что мне в нём не нравится, так это устрашающий вид интерфейса при создании событий и задач. Такое большое количество флажочков, кнопочек и полей для ввода, хотя бОльшая часть из них обычно не нужна, просто угнетает)

0
Condor - 24 Май, 2010 - 20:24
Изображение пользователя Condor.

Мне было бы не очень интересно с KOrganizer половину кед поставить в свою систему.
Я сижу в гноме.
А моей программе по барабану, какую оболочку использует пользователь, так же как и не надо ставить дополнительные пакеты.
А насчёт большого количества кнопочек, под гномом есть что-то подобное, но именно из-за тяжести такого рода софта, я решил написать маленькую легкую программку.

0
Гость - 20 Май, 2010 - 21:38

а birthday из репов ?

0
Condor - 24 Май, 2010 - 20:29
Изображение пользователя Condor.

Вы догадались как создать базу друзей с днями рождений?
Да и видеть оповещение при логине в систему, не особо удобно...
А, вот, когда, висит в трее ржущий колобок, который с удовольствием "пообщается" с тобой по клике мышкой...

0
vanoc - 12 Ноябрь, 2010 - 19:34
Изображение пользователя vanoc.

Condor отличная программа. Спасибо! А почему не реализовано "дд.мм.гг описание" ? Как-то не привычно то, как сейчас сделано. И кнопка "отсортировать список событий" имхо лишняя, т.к. список и так формируется вручную.

0
DarkneSS - 12 Ноябрь, 2010 - 20:18
Изображение пользователя DarkneSS.

Ни разу не лишняя! Я тискал :-)

0
vanoc - 12 Ноябрь, 2010 - 20:31
Изображение пользователя vanoc.

Фиг с ней с кнопкой :) А вот даты реально напрягают. Сейчас пытаюсь всю базу в днюхами и праздниками подогнать под программу, так это ппц. У меня уже голова кругом.

0
DarkneSS - 12 Ноябрь, 2010 - 20:48
Изображение пользователя DarkneSS.

Было такое... Уже привык =)

0
Condor - 14 Ноябрь, 2010 - 13:41
Изображение пользователя Condor.

Действительно настолько напряжно перегнать данные?
Надо бы подумать, может, действительно переделать немного.
Будет со временем получше, покапаюсь в программе.

+1
Condor - 14 Ноябрь, 2010 - 13:36
Изображение пользователя Condor.

Год у даты события не реализован так как можно отмечать какое-то событие каждый год, не заморачиваясь о годе, например, праздник какой-то, а дату я ввёл позже, чтобы программа могла считать сколько лет человеку, чтобы открытку правильную использовать, а считать самому лень.
А список хоть и вручную формируется, но опять таки надо выискивать позицию, куда вписать событие надо, а это опять же лень.
Хотя при запуске файл журнала вроде сортируется у меня, программку давно писал, не помню точно.
Как что-то новое придумаю, сделаю новую версию, а так основная напоминательная функция работает, пока что не лезу.

0
uicraor - 14 Ноябрь, 2010 - 23:33
Изображение пользователя uicraor.

Пипл негодуэ!!! Исходники ф студию!!! =)

+1
Condor - 15 Ноябрь, 2010 - 05:48
Изображение пользователя Condor.

Почему ещё нет года в блоке с датой, дело в сортировке дат, то есть она происходит по месяцу, а потом по числу.
Если добавлять год, то по идее, будет по году сортировка вестись, а это неправильно, так как нам важен именно день и месяц события.
То есть, если добавить год, и сделать запись такого вида 1983.03.03;Моя денька, то сортировку надо будет переписывать и если стоит перед месяцем год из 4 цифр, то сортировку надо организовывать без учёта года.
С другой стороны эта запись получится не проще, так как в программах обычно дата хранится в формате дд.мм.гггг.
Возможно, имеет смысл переписать программу с учётом возможности хранения даты в формате дд.мм.гггг и чтобы автоматом проверялось стоит ли год.
Ну и процедуру сортировки переписать.
Не знаю как со временем будет, может ближе к НГ что-нить придумаю, или в январе уже.
А на сайте организую конвертер, чтобы можно было автоматически отконвертировать старый файл журнала.
А что насчёт исходников пипл негодуэ?
Там один модуль всего, код открыт и выложен выше в топике.
Но по просьбам трудящихся открою всё остальное, чтобы можно было посмотреть ещё картинки :0) )

0
vanoc - 15 Ноябрь, 2010 - 15:24
Изображение пользователя vanoc.

Спасибо!

0
Гость - 14 Октябрь, 2011 - 16:49

Всё-таки даты... я специально открыл базу в виде csv и посмотрел, как в офисе даты выглядят. Даже там месяц идёт после дня. Сортировку-то написать - две минуты. Обрезать текст по первую точку, обрезать по вторую, преобразовать в числа, второе умножить на 31, прибавить первое.

А главное - зачем уведомление об отсутствии уведомлений? Я, допустим, загружаю компьютер и меньше всего думаю о том, что ни у кого из знакомых дней рождения нет. А программа об этом напоминает. Зачем? Может опцию можно какую-нибудь? Ключик в командной строке?

0
Гость - 14 Октябрь, 2011 - 22:34

Уведомления об отсутствии уведомлений отчекрыжил сам. Ну и ещё кой-чего лишнее отчекрыжил. А ещё вот этого файлика (reminder.qrc) для сборки сильно не хватало:
&lt;RCC>
    &lt;qresource prefix="/">
        &lt;file>ico/about.png&lt;/file>
        &lt;file>ico/edit.png&lt;/file>
        &lt;file>ico/normal.png&lt;/file>
        &lt;file>ico/quit.png&lt;/file>
        &lt;file>ico/soon.png&lt;/file>
        &lt;file>ico/sort.png&lt;/file>
        &lt;file>ico/today.png&lt;/file>
        &lt;file>translations/reminder_ru.qm&lt;/file>
    &lt;/qresource>
&lt;/RCC>

Мы же, знаете ли, гуманитарии... нас этому не обучали.

+1
DarkneSS - 25 Декабрь, 2011 - 13:15
Изображение пользователя DarkneSS.

Пипл интересуется, какая лицензия исходников. =)
И про команду сборки.qmake ./reminder.pro
WARNING: Failure to find: reminder.qrc
/usr/bin/rcc: File does not exist 'reminder.qrc'

0
Condor - 28 Декабрь, 2011 - 09:15
Изображение пользователя Condor.

GPLv3.
Добавил в архив reminder.qrc файл ресурсов смайликов, вот хрен его знает почему его в архиве не было.
Кстати, под 11.10 по ходу дела надо deb пакет перепаковывать, от прошлогодней версии у меня пакет не ставится.
Давно делал, уже не помню как пакет собирать, надо повспоминать будет.

0
DarkneSS - 28 Декабрь, 2011 - 14:51
Изображение пользователя DarkneSS.

У меня работает пакет в 11.10. Могу попробовать репозиторий замутить. Рпм точно сделаю, они попроще, с дебами у меня не складывается пока))

0
Condor - 29 Декабрь, 2011 - 00:23
Изображение пользователя Condor.

У меня не работает.
Я себе систему 64 разрядную везде воткнул, надо перекомпиливать :0))
Чтобы компилить под х32, надо либо виртуалку, либо жене на нетбук поставить qtcreator.

0
DarkneSS - 29 Декабрь, 2011 - 01:27
Изображение пользователя DarkneSS.

У меня х64 тоже.

0
Гость - 19 Январь, 2012 - 19:05

На первый взгляд программа немного запутанна. Я пока не хочу в ней разбираться, но советую её упростить. Видели систему напоминалок в телефонах?

0
DarkneSS - 19 Январь, 2012 - 19:18
Изображение пользователя DarkneSS.

Видел. Недавно купил, напоминает, что сегодня Др, но не пишет чей :D Так что нет, спасибо.

0
DarkneSS - 15 Апрель, 2012 - 01:06
Изображение пользователя DarkneSS.

Не прошло и полгода, как я не без чьей-то там матери осилил сборку deb-ов. Милости прошу тестировать.

Пакеты были пустые, исправил))

0
Master_Yoda - 24 Сентябрь, 2012 - 21:48

По-русски не хочет говорить. Пуркуа?

И почему-то на строку 25.09;Бла бла бла; в dat-файле никак не реагирует. После клика на морде, говорит не найдено событий. А при запуске аж два раза повторяет, что событий нет.

Так'c. Вопрос по дате снимается. Формат мм.дд. А вот дублирование при запуске так и осталось. И по буржуйски разговаривает.

0
DarkneSS - 24 Сентябрь, 2012 - 23:09
Изображение пользователя DarkneSS.

Если х64, попробуйте пакет с сайта. Если с ним всё хорошо, буду завтра думать.
Если не amd64, тоже завтра подумаю.
PS На правах мыслей вслух.

0
Master_Yoda - 25 Сентябрь, 2012 - 06:48

Система 32 бита. Качнул с сайта hzs_reminder_2010.4.24.deb. Теперь по-русски, но другая проблема, вид всплывающих подсказок совершенно не в тему :(
Вот так выглядит, а вот так должно.

Правда сейчас это всё проделывается на другом компе, но система такая же, 12.04, 32 бита.

0
DarkneSS - 25 Сентябрь, 2012 - 08:11
Изображение пользователя DarkneSS.

Старая версия без кдешных уведомлений. Вечером буду чинить репку.

0
Master_Yoda - 25 Сентябрь, 2012 - 13:24

Знаете, что ещё хотелось бы добавить в напоминалку? Чтоб при активации события ещё и звук был.

0
DarkneSS - 25 Сентябрь, 2012 - 13:33
Изображение пользователя DarkneSS.

Я только по пакетикам))

0
Master_Yoda - 25 Сентябрь, 2012 - 13:34

Я знаю. Это я так, мечты вслух.

0
DarkneSS - 25 Сентябрь, 2012 - 14:00
Изображение пользователя DarkneSS.

Condor скастится когда-нибудь ;)

0
DarkneSS - 26 Сентябрь, 2012 - 00:57
Изображение пользователя DarkneSS.

Починил. Пробуйте.

0
Master_Yoda - 26 Сентябрь, 2012 - 07:42

Отлично! Теперь по нашему гутарит. Но дубли при запуске так и остались.

0
DarkneSS - 26 Сентябрь, 2012 - 07:48
Изображение пользователя DarkneSS.

Ждём Condor-а :) Дубль подтверждаю.

0
Condor - 27 Сентябрь, 2012 - 18:47
Изображение пользователя Condor.

Кто спалился?
Я спалился?
В общем, при запуске, он пишет что события найдены, а вот потом, во втором сообщении, пишет чего он нашёл.
Сейчас попробую покосить эту пакость.

0
Condor - 27 Сентябрь, 2012 - 19:27
Изображение пользователя Condor.

Убрал дублирование сообщений при запуске программы, сейчас авродя как корректно работать должно.
64 разрядный бинарник
Исходники
Надо потестить, если всё в порядке, соберу DEB пакеты.
Кстати, есть мысля попробовать проект поинтереснее, подумываю над выводом событий из гуглокалендаря.

0
DarkneSS - 27 Сентябрь, 2012 - 20:06
Изображение пользователя DarkneSS.

Про обновление репки никаких конкретных сроков сказать не могу :( Но будет когда-нибудь обязательно.

0
Master_Yoda - 28 Сентябрь, 2012 - 11:37

Репку ждать не стал, скомпилил из исходников. Правда вот так у меня по-русски не говорит:
myappTranslator.load(":/translations/reminder_" + QLocale::system().name());
А вот так норм:
myappTranslator.load("translations/reminder_" + QLocale::system().name());

И ещё хотелось бы внести предложение. Не показывать сообщение, при запуске программы, если событий не найдено. Судя по коду, сейчас это не очень удобно делать, но если вынести функцию поиска событий в отдельную (вместе с проверкой на наличие и чтением), то такой вариант будет очень легко организовать.

0
Condor - 28 Сентябрь, 2012 - 15:50
Изображение пользователя Condor.

myappTranslator.load(":/translations/reminder_" + QLocale::system().name());
Это дериктива брать перевод из файла ресурсов, он в архиве есть.
Насчёт невывода сообщения о отсутствии событий, я выносил отдельной функцией, на следующий день винт в ноуте погиб, вместе со всей работой, я как-то вчера не стал снова переделывать, хотя, вынести всё отдельной функцией было бы правильно, с точки зрения логики и удобочитаемости кода.
Возможно, сделаю, уже потом и пакеты соберу.

0
DarkneSS - 28 Сентябрь, 2012 - 16:12
Изображение пользователя DarkneSS.

Просто оно стало собираться с локалью во внешнем файле. И с такой строкой она не подгружается. Пару месяцев назад те же сорцы в дебах вшивали локаль в бинарник.

0
Condor - 28 Сентябрь, 2012 - 18:48
Изображение пользователя Condor.

Не компилится, или просто русский язык не подхватывается?
Надо бы мне виртуалку с русским языком завести :0))

0
DarkneSS - 28 Сентябрь, 2012 - 19:45
Изображение пользователя DarkneSS.

Не подхватывается. Когда локаль конвертируется в файл *.qm, что и стало происходить.LANG=ru_RU.UTF-8 my_cool_prog

0
Master_Yoda - 28 Сентябрь, 2012 - 17:29

Это дериктива брать перевод из файла ресурсов, он в архиве есть.
Вот именно в таком виде, эта директива, у меня не работает. В смысле перевод не подхватывает. А если убрать
:/
то всё гуд. Т.к. изучаю Qt методом тыка, то не могу научно обосновать сей факт.

А винт жалко. Можно смело сказать, что погиб он смертью храбрых :)

0
Гость - 4 Декабрь, 2013 - 23:15

у меня при установке в убурту13 выругалось что:
Установка пакета, который не соответствует стандартам, не разрешена. Это может привести к серьёзным ошибкам на вашем компьютере. Пожалуйста, свяжитесь с теми, кто предоставили данный пакет, указав подробности, изложенные ниже.

- почему так ругается? обычно простое предупреждение что из недостоверных источников ставится пакет, а здесь такие страшные "суеверия" ? :)

0
DarkneSS - 4 Декабрь, 2013 - 23:20
Изображение пользователя DarkneSS.

А вы как ставите? Из моего репозитория? о.0

0
Гость - 5 Декабрь, 2013 - 00:43

я по указанной ссылке: http://software.nisel.net/programs/hzs_reminder_2010.4.24.deb

0
Гость - 5 Декабрь, 2013 - 20:33

Так что, правильную ссылку я использую или есть другие сборки? :)

0
DarkneSS - 5 Декабрь, 2013 - 21:50
0
Гость - 6 Декабрь, 2013 - 11:25

возможно я сильно томрожу.. :) Но может проще выложить саму дебку?
запускаю по вашей ссылке: echo 'deb http://download.opensuse.org/repositories/home:DarkSS:deb/xUbuntu_13.10/ /' >> /etc/apt/sources.list.d/hzs-reminder.list через судо - пишет "отказано в доступе"

0
DarkneSS - 7 Декабрь, 2013 - 14:47
Изображение пользователя DarkneSS.

От рута же надо, написано выше, а ниже есть ссылки и на дебки.

0
Гость - 8 Декабрь, 2013 - 12:35

это я понял, что от рута. Вопрос в том - зачем так жестко? обычные программы работают же из-под юзера и ставятся. ну могут запросить пароль при установке. А здесь так все жестко :)

0
DarkneSS - 8 Декабрь, 2013 - 20:52
Изображение пользователя DarkneSS.

Программа и работает от пользователя. А репозитории, ключи и пакеты только от рута.

0
Гость - 16 Декабрь, 2013 - 09:19

Здравствуйте, уважаемые!
Все-таки гложет меня вопрос :)... по поводу рутовских прав при установке проги:
Вот запускаю установку деб-пакета (под юзером).
1) Центр приложений уточняет доверяю ли я источику (стандартная процедура, соглашаюсь)
2) И сразу же вместо запроса пароля, как это делают все обычные программы под убунту, которые я ставил,при установке вашего пакета, выходит сообщение:
"Этот пакет плохого качества. Установка пакета, который не соответствует стандартам, не разрешена. Это может привести к серьезным ошибкам на вашем компьютере. Пожалуйста, свяжитесь с теми, кто предоставили данный пакет, указав подробности, изложенные ниже"

И ниже:
Lintian check results for /tmp/hzs_reminder_2010.4.24.deb:
E: hzs-reminder: arch-independent-package-contains-binary-or-object usr/bin/reminder
E: hzs-reminder: control-file-has-bad-owner md5sums hzs/hzs != root/root
E: hzs-reminder: control-file-has-bad-owner postinst hzs/hzs != root/root
E: hzs-reminder: maintainer-address-missing Nisel Alexander II
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/ 1000/1000
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/bin/ 1000/1000
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/bin/reminder 1000/1000
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/share/ 1000/1000
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/share/applications/ 1000/1000
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/share/applications/reminder.desktop 1000/1000
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/share/pixmaps/ 1000/1000
E: hzs-reminder: wrong-file-owner-uid-or-gid usr/share/pixmaps/reminderico.png 1000/1000

- вот это меня и смущает.Не просто запрос рутовского пароля - а подробное обругивание "пакета плохого качества"

Может можно нормальную дебку собрать? что такого крутого она требует, что убунта так ругается?

Извините за дотошность, но я с винды ушел по причене что там каждая прога делает что хочет и все "от рута". У меня рабочая машина и я ставлю легальное ПО на нее, поэтому такие ругачки напрягают.
:)

0
DarkneSS - 16 Декабрь, 2013 - 18:27
Изображение пользователя DarkneSS.

Наш пакет с сайта программы или из моего репозитория? Если хотите нормально, выбирайте репозиторий.
Аха, вижу по версии, что с сайта. Поставьте уже мой пакет.

0
Гость - 17 Декабрь, 2013 - 14:33

какой ваш то? я пробовал разные ссылки, указанные на этой странице :) Ругачки одинаковые (убунта 13 )
дайте ссылку "на ваш" :)

0
DarkneSS - 18 Декабрь, 2013 - 18:28
Изображение пользователя DarkneSS.

Повторяю ссылку. И напоминаю что там можно тоже «просто скачать пакет».

0
Гость - 19 Декабрь, 2013 - 09:53

люди дорые :)
прога в автозагрузке. даты добавил в текстовый файл. формат там трудно напутать:
03.03;День рождения разработчика hzs reminder;1983
04.10;Дата создания hzs reminder;2010
19.12;поставил напоминальщик;2013
20.12;тест напоминальщика

- а не выводятся уведомления то... я ребутнул комп - должно же было сообщить о сегодняшнем и завтрашнем?

+1
Condor - 19 Декабрь, 2013 - 14:13
Изображение пользователя Condor.

Для сортировки использован американский формат даты ММ.ДД.
То есть должно быть
12.19;поставил напоминальщик;2013
12.20;тест напоминальщика

0
Гость - 20 Декабрь, 2013 - 21:50

все, спасибо :) работает!!

0
Condor - 18 Декабрь, 2013 - 07:14
Изображение пользователя Condor.

По-свежее пакеты есть, я ни разу не видел такого сообщения.

0
Condor - 7 Декабрь, 2013 - 13:41
Изображение пользователя Condor.

Есть ещё варианты на http://software.nisel.net/reminder.html
Я ленюсь пересобирать пакеты, тем более что использую LTS версию дистрибутива и мне хватает версии пару-летней давности, но DarkneSS авродя как частенько пересобирает.

+3
Condor - 13 Август, 2017 - 09:25
Изображение пользователя Condor.

Неудачно переставил систему, при переносе потерял все свои исходники, в том числе напоминалки.
Но линукс, это добрые люди, нашел исходники своего софта, поставил бинарник вообще с репозитария.
И да, это привет Дмитрию DarkneSS.

0
DarkneSS - 16 Август, 2017 - 18:30
Изображение пользователя DarkneSS.

К слову о птичках: Qt 4 не войдёт в состав Debian 10.

0
Condor - 18 Август, 2017 - 12:05
Изображение пользователя Condor.

Это, я так понимаю намёк на то, что если у меня есть исходники, нужно их перепилить под пятые кеды, так как старые исходники не компилятся под 5 кеды и код нужно серьёзно рефакторить...

0
DarkneSS - 20 Август, 2017 - 20:32
Изображение пользователя DarkneSS.

Таки да!

0
Condor - 1 Октябрь, 2017 - 19:44
Изображение пользователя Condor.

Короче, я нашел исходники за 2010 год, последняя моя версия была в 2014, у тебя случаем не осталось?
Вернулся на Kubuntu 14.04, всё новомодное гумно не пришлось по вкусу, дык даже без переделки не могу скомпилить, не из чего :0((

0
DarkneSS - 8 Октябрь, 2017 - 17:42
Изображение пользователя DarkneSS.

Всё, что у меня есть, скачано около 5 лет назад: 1, 2, 3. С Qt4 все 3 собираются. Лучше залить на github =)

0
Condor - 11 Октябрь, 2017 - 20:15
Изображение пользователя Condor.

Не даёт скачать, закинь в обоако куда-нить плиз.

0
DarkneSS - 12 Октябрь, 2017 - 22:37
Изображение пользователя DarkneSS.

1 и 2. У двух название и размер совпали, дубль не заливал.

0
ozim - 14 Октябрь, 2017 - 20:36

чето как то "Сервер не найден" :(

0
Condor - 18 Октябрь, 2017 - 11:35
Изображение пользователя Condor.

Есть в репозитариях некоторых.
Сейчас надо полностью всё переписывать, так как в новых версиях QT старый код не компилируется.
Руки дойдут, переделаю напоминалку полностью, заставлю работать в современных версиях.
Ну и сайт надо будет снова запилить.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры